From 5df60c856e1cb528f4c03b2c2172d74fee6bee46 Mon Sep 17 00:00:00 2001 From: Peter Osterlund Date: Sun, 20 Nov 2016 12:01:04 +0100 Subject: [PATCH] DroidFish: Made the application context globally available. --- DroidFish/AndroidManifest.xml | 3 ++- .../src/org/petero/droidfish/DroidFish.java | 5 ----- .../src/org/petero/droidfish/DroidFishApp.java | 18 ++++++++++++++++++ .../src/org/petero/droidfish/GUIInterface.java | 5 ----- .../src/org/petero/droidfish/book/EcoDb.java | 10 +++++----- .../droidfish/engine/DroidComputerPlayer.java | 8 ++------ .../droidfish/engine/ExternalEngine.java | 5 +++-- .../droidfish/engine/InternalStockFish.java | 5 ++--- .../petero/droidfish/engine/NetworkEngine.java | 5 +++-- .../droidfish/engine/OpenExchangeEngine.java | 6 ++---- .../petero/droidfish/engine/UCIEngineBase.java | 12 +++++------- .../gamelogic/DroidChessController.java | 6 +++--- .../src/org/petero/droidfish/book/EcoTest.java | 4 ++-- 13 files changed, 47 insertions(+), 45 deletions(-) create mode 100644 DroidFish/src/org/petero/droidfish/DroidFishApp.java diff --git a/DroidFish/AndroidManifest.xml b/DroidFish/AndroidManifest.xml index 1686679..415069a 100644 --- a/DroidFish/AndroidManifest.xml +++ b/DroidFish/AndroidManifest.xml @@ -11,7 +11,8 @@ - diff --git a/DroidFish/src/org/petero/droidfish/DroidFish.java b/DroidFish/src/org/petero/droidfish/DroidFish.java index 2a0297e..c7eeddc 100644 --- a/DroidFish/src/org/petero/droidfish/DroidFish.java +++ b/DroidFish/src/org/petero/droidfish/DroidFish.java @@ -1919,11 +1919,6 @@ public class DroidFish extends Activity return mPonderMode; } - @Override - public Context getContext() { - return this; - } - @Override public String playerName() { return playerName; diff --git a/DroidFish/src/org/petero/droidfish/DroidFishApp.java b/DroidFish/src/org/petero/droidfish/DroidFishApp.java new file mode 100644 index 0000000..3c31c1b --- /dev/null +++ b/DroidFish/src/org/petero/droidfish/DroidFishApp.java @@ -0,0 +1,18 @@ +package org.petero.droidfish; + +import android.app.Application; +import android.content.Context; + +public class DroidFishApp extends Application { + private static Context appContext; + @Override + public void onCreate() { + super.onCreate(); + appContext = this; + } + + /** Get the application context. */ + public static Context getContext() { + return appContext; + } +} diff --git a/DroidFish/src/org/petero/droidfish/GUIInterface.java b/DroidFish/src/org/petero/droidfish/GUIInterface.java index c21f6f0..58f5628 100644 --- a/DroidFish/src/org/petero/droidfish/GUIInterface.java +++ b/DroidFish/src/org/petero/droidfish/GUIInterface.java @@ -24,8 +24,6 @@ import org.petero.droidfish.gamelogic.Game; import org.petero.droidfish.gamelogic.Move; import org.petero.droidfish.gamelogic.Position; -import android.content.Context; - /** Interface between the GUI and the ChessController. */ public interface GUIInterface { @@ -105,9 +103,6 @@ public interface GUIInterface { /** Return true if pondering (permanent brain) is enabled. */ public boolean ponderMode(); - /** Return application context. */ - public Context getContext(); - /** Get the default player name. */ public String playerName(); diff --git a/DroidFish/src/org/petero/droidfish/book/EcoDb.java b/DroidFish/src/org/petero/droidfish/book/EcoDb.java index 88cf28e..5a586aa 100644 --- a/DroidFish/src/org/petero/droidfish/book/EcoDb.java +++ b/DroidFish/src/org/petero/droidfish/book/EcoDb.java @@ -19,7 +19,6 @@ package org.petero.droidfish.book; import android.annotation.SuppressLint; -import android.content.Context; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -28,6 +27,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.WeakHashMap; +import org.petero.droidfish.DroidFishApp; import org.petero.droidfish.gamelogic.ChessParseError; import org.petero.droidfish.gamelogic.GameTree; import org.petero.droidfish.gamelogic.Move; @@ -42,9 +42,9 @@ public class EcoDb { private static EcoDb instance; /** Get singleton instance. */ - public static EcoDb getInstance(Context context) { + public static EcoDb getInstance() { if (instance == null) { - instance = new EcoDb(context); + instance = new EcoDb(); } return instance; } @@ -183,13 +183,13 @@ public class EcoDb { } /** Constructor. */ - private EcoDb(Context context) { + private EcoDb() { posHashToNodeIdx = new HashMap(); posHashToNodeIdx2 = new HashMap>(); gtNodeToIdx = new WeakLRUCache(50); try { ByteArrayOutputStream bufStream = new ByteArrayOutputStream(); - InputStream inStream = context.getAssets().open("eco.dat"); + InputStream inStream = DroidFishApp.getContext().getAssets().open("eco.dat"); if (inStream == null) throw new IOException("Can't read ECO database"); byte[] buf = new byte[1024]; diff --git a/DroidFish/src/org/petero/droidfish/engine/DroidComputerPlayer.java b/DroidFish/src/org/petero/droidfish/engine/DroidComputerPlayer.java index 135362d..d538902 100644 --- a/DroidFish/src/org/petero/droidfish/engine/DroidComputerPlayer.java +++ b/DroidFish/src/org/petero/droidfish/engine/DroidComputerPlayer.java @@ -36,15 +36,12 @@ import org.petero.droidfish.gamelogic.UndoInfo; import org.petero.droidfish.gamelogic.SearchListener.PvInfo; import org.petero.droidfish.tb.Probe; -import android.content.Context; - /** * A computer algorithm player. * @author petero */ public class DroidComputerPlayer { private UCIEngine uciEngine = null; - private final Context context; private final SearchListener listener; private final DroidBook book; private EngineOptions engineOptions = new EngineOptions(); @@ -234,8 +231,7 @@ public class DroidComputerPlayer { private Thread engineMonitor; /** Constructor. Starts engine process if not already started. */ - public DroidComputerPlayer(Context context, SearchListener listener) { - this.context = context; + public DroidComputerPlayer(SearchListener listener) { this.listener = listener; book = DroidBook.getInstance(); } @@ -654,7 +650,7 @@ public class DroidComputerPlayer { myAssert(searchRequest != null); engineName = "Computer"; - uciEngine = UCIEngineBase.getEngine(context, searchRequest.engine, + uciEngine = UCIEngineBase.getEngine(searchRequest.engine, engineOptions, new UCIEngine.Report() { @Override diff --git a/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java b/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java index 4a8b7d8..653ed20 100644 --- a/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java +++ b/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java @@ -27,6 +27,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.nio.channels.FileChannel; +import org.petero.droidfish.DroidFishApp; import org.petero.droidfish.EngineOptions; import org.petero.droidfish.R; import android.content.Context; @@ -46,8 +47,8 @@ public class ExternalEngine extends UCIEngineBase { private boolean startedOk; private boolean isRunning; - public ExternalEngine(Context context, String engine, Report report) { - this.context = context; + public ExternalEngine(String engine, Report report) { + context = DroidFishApp.getContext(); this.report = report; engineFileName = new File(engine); engineProc = null; diff --git a/DroidFish/src/org/petero/droidfish/engine/InternalStockFish.java b/DroidFish/src/org/petero/droidfish/engine/InternalStockFish.java index c21e47d..f666062 100644 --- a/DroidFish/src/org/petero/droidfish/engine/InternalStockFish.java +++ b/DroidFish/src/org/petero/droidfish/engine/InternalStockFish.java @@ -30,14 +30,13 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Locale; -import android.content.Context; import android.os.Environment; /** Stockfish engine running as process, started from assets resource. */ public class InternalStockFish extends ExternalEngine { - public InternalStockFish(Context context, Report report) { - super(context, "", report); + public InternalStockFish(Report report) { + super("", report); } @Override diff --git a/DroidFish/src/org/petero/droidfish/engine/NetworkEngine.java b/DroidFish/src/org/petero/droidfish/engine/NetworkEngine.java index 584cdb4..5993c00 100644 --- a/DroidFish/src/org/petero/droidfish/engine/NetworkEngine.java +++ b/DroidFish/src/org/petero/droidfish/engine/NetworkEngine.java @@ -26,6 +26,7 @@ import java.io.InputStreamReader; import java.net.Socket; import java.net.UnknownHostException; +import org.petero.droidfish.DroidFishApp; import org.petero.droidfish.EngineOptions; import org.petero.droidfish.FileUtil; import org.petero.droidfish.R; @@ -49,8 +50,8 @@ public class NetworkEngine extends UCIEngineBase { private boolean isRunning; private boolean isError; - public NetworkEngine(Context context, String engine, EngineOptions engineOptions, Report report) { - this.context = context; + public NetworkEngine(String engine, EngineOptions engineOptions, Report report) { + context = DroidFishApp.getContext(); this.report = report; fileName = engine; networkID = engineOptions.networkID; diff --git a/DroidFish/src/org/petero/droidfish/engine/OpenExchangeEngine.java b/DroidFish/src/org/petero/droidfish/engine/OpenExchangeEngine.java index d487850..48c104b 100644 --- a/DroidFish/src/org/petero/droidfish/engine/OpenExchangeEngine.java +++ b/DroidFish/src/org/petero/droidfish/engine/OpenExchangeEngine.java @@ -7,13 +7,11 @@ import java.util.List; import com.kalab.chess.enginesupport.ChessEngine; import com.kalab.chess.enginesupport.ChessEngineResolver; -import android.content.Context; - /** Engine imported from a different android app, resolved using the open exchange format. */ public class OpenExchangeEngine extends ExternalEngine { - public OpenExchangeEngine(Context context, String engine, Report report) { - super(context, engine, report); + public OpenExchangeEngine(String engine, Report report) { + super(engine, report); } @Override diff --git a/DroidFish/src/org/petero/droidfish/engine/UCIEngineBase.java b/DroidFish/src/org/petero/droidfish/engine/UCIEngineBase.java index 31a0a8b..4ddd0f0 100644 --- a/DroidFish/src/org/petero/droidfish/engine/UCIEngineBase.java +++ b/DroidFish/src/org/petero/droidfish/engine/UCIEngineBase.java @@ -30,28 +30,26 @@ import java.util.Properties; import org.petero.droidfish.EngineOptions; import org.petero.droidfish.engine.cuckoochess.CuckooChessEngine; -import android.content.Context; - public abstract class UCIEngineBase implements UCIEngine { private boolean processAlive; private UCIOptions options; protected boolean isUCI; - public static UCIEngine getEngine(Context context, String engine, + public static UCIEngine getEngine(String engine, EngineOptions engineOptions, Report report) { if ("stockfish".equals(engine) && (EngineUtil.internalStockFishName() == null)) engine = "cuckoochess"; if ("cuckoochess".equals(engine)) return new CuckooChessEngine(report); else if ("stockfish".equals(engine)) - return new InternalStockFish(context, report); + return new InternalStockFish(report); else if (EngineUtil.isOpenExchangeEngine(engine)) - return new OpenExchangeEngine(context, engine, report); + return new OpenExchangeEngine(engine, report); else if (EngineUtil.isNetEngine(engine)) - return new NetworkEngine(context, engine, engineOptions, report); + return new NetworkEngine(engine, engineOptions, report); else - return new ExternalEngine(context, engine, report); + return new ExternalEngine(engine, report); } protected UCIEngineBase() { diff --git a/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java b/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java index da8b341..6afcedc 100644 --- a/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java +++ b/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java @@ -88,7 +88,7 @@ public class DroidChessController { updateGUI(); this.gameMode = gameMode; if (computerPlayer == null) { - computerPlayer = new DroidComputerPlayer(gui.getContext(), listener); + computerPlayer = new DroidComputerPlayer(listener); computerPlayer.setBookOptions(bookOptions); computerPlayer.setEngineOptions(engineOptions); } @@ -932,7 +932,7 @@ public class DroidChessController { if (game != null) { Pair> bi = computerPlayer.getBookHints(game.currPos(), localPt()); Pair ecoData = - EcoDb.getInstance(gui.getContext()).getEco(game.tree); + EcoDb.getInstance().getEco(game.tree); String eco = ecoData.first; listener.notifyBookInfo(searchId, bi.first, bi.second, eco, ecoData.second); } @@ -975,7 +975,7 @@ public class DroidChessController { } else if (computersTurn || ponder) { listener.clearSearchInfo(searchId); Pair ecoData = - EcoDb.getInstance(gui.getContext()).getEco(game.tree); + EcoDb.getInstance().getEco(game.tree); String eco = ecoData.first; listener.notifyBookInfo(searchId, "", null, eco, ecoData.second); final Pair> ph = game.getUCIHistory(); diff --git a/DroidFishTest/src/org/petero/droidfish/book/EcoTest.java b/DroidFishTest/src/org/petero/droidfish/book/EcoTest.java index 25aeda0..9bead3f 100644 --- a/DroidFishTest/src/org/petero/droidfish/book/EcoTest.java +++ b/DroidFishTest/src/org/petero/droidfish/book/EcoTest.java @@ -32,7 +32,7 @@ public class EcoTest extends AndroidTestCase { } public void testEco() throws Throwable { - EcoDb ecoDb = EcoDb.getInstance(getContext()); + EcoDb ecoDb = EcoDb.getInstance(); { String pgn = "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 Nf6 O-O Be7 Re1"; GameTree gt = readPGN(pgn); @@ -137,7 +137,7 @@ public class EcoTest extends AndroidTestCase { } public void testEcoFromFEN() throws Throwable { - EcoDb ecoDb = EcoDb.getInstance(getContext()); + EcoDb ecoDb = EcoDb.getInstance(); GameTree gt = gtFromFEN("rnbqkbnr/ppp2ppp/4p3/3P4/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3"); String eco = ecoDb.getEco(gt).first; assertEquals("C01: French, exchange variation", eco);