Skip to content

Commit 57a666c

Browse files
author
gerhard.kalab
committedDec 5, 2014
use Context.getFilesDir() instead of "/data/data" to fix file access problems on some devices (e.g. Galaxy Tab S);
release version 1.49
1 parent dd12d1a commit 57a666c

File tree

4 files changed

+25
-45
lines changed

4 files changed

+25
-45
lines changed
 

‎AndroidManifest.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
android:installLocation="auto"
44
package="org.scid.android"
5-
android:versionCode="48"
6-
android:versionName="1.48" >
5+
android:versionCode="49"
6+
android:versionName="1.49" >
77

88
<uses-sdk
99
android:minSdkVersion="4"

‎src/org/scid/android/ScidAndroidActivity.java

+7-9
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,8 @@ public void onCreate(Bundle savedInstanceState) {
108108
if (!scidFileDir.exists()) {
109109
scidFileDir.mkdirs();
110110
}
111+
engineManager = new EngineManager(this);
111112
checkUciEngine();
112-
engineManager = EngineManager.getInstance();
113-
engineManager.setContext(this);
114113
preferences = PreferenceManager.getDefaultSharedPreferences(this);
115114
preferences.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() {
116115
@Override
@@ -207,8 +206,8 @@ private boolean isXChessType() {
207206
}
208207

209208
private void checkUciEngine() {
210-
// check if engine exists in /data/data/org.scid.android
211-
File engine = new File(EngineManager.getDefaultEngine()
209+
// check if engine exists in the files directory
210+
File engine = new File(engineManager.getDefaultEngine()
212211
.getExecutablePath());
213212
if (engine.exists()) {
214213
try {
@@ -224,14 +223,13 @@ private void checkUciEngine() {
224223
Log.e(TAG, e.getMessage(), e);
225224
}
226225
} else {
227-
228226
Log.d(TAG, "Engine is missing from data. Intializing...");
229227
try {
230228
InputStream istream = new FileInputStream(getApplicationInfo().dataDir
231229
+ File.separator
232230
+ "lib"
233231
+ File.separator
234-
+ EngineManager.getInstance().getInternalEngineFileName());
232+
+ EngineManager.getInternalEngineFileName());
235233
FileOutputStream fout = new FileOutputStream(
236234
engine.getAbsolutePath());
237235
byte[] b = new byte[1024];
@@ -242,7 +240,7 @@ private void checkUciEngine() {
242240
istream.close();
243241
fout.close();
244242
Log.d(TAG, engine.getName()
245-
+ " copied to /data/data/org.scid.android/");
243+
+ " copied to files directory");
246244
try {
247245
String cmd[] = { "chmod", "744", engine.getAbsolutePath() };
248246
Process process = Runtime.getRuntime().exec(cmd);
@@ -932,7 +930,7 @@ private final void readPrefs() {
932930
ColorTheme.instance().readColors(preferences);
933931
cb.setColors();
934932

935-
String engineName = preferences.getString(ANALYSIS_ENGINE, EngineManager
933+
String engineName = preferences.getString(ANALYSIS_ENGINE, engineManager
936934
.getDefaultEngine().getName());
937935
engineManager.setCurrentEngineName(engineName);
938936

@@ -1474,7 +1472,7 @@ public void engineChanged(EngineChangeEvent event) {
14741472
&& event.getSuccess()) {
14751473
Editor editor = preferences.edit();
14761474
editor.putString(ANALYSIS_ENGINE,
1477-
EngineManager.getDefaultEngine()
1475+
engineManager.getDefaultEngine()
14781476
.getName());
14791477
editor.commit();
14801478
}

‎src/org/scid/android/StartEngineTask.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,10 @@ private void ensureEngine(String engineName, String engineFileName,
4242
}
4343
if (pkg != null && pkg.length() > 0) {
4444
int newVersion = resolver.ensureEngineVersion(engineFileName, pkg,
45-
engineVersion, new File(EngineManager.DATA_PATH));
46-
File engineFile = new File(EngineManager.DATA_PATH + File.separator
47-
+ engineFileName);
45+
engineVersion, activity.getFilesDir());
46+
File engineFile = new File(activity.getFilesDir(),engineFileName);
4847
if (newVersion > engineVersion && engineFile.exists()) {
49-
new EngineManager()
48+
new EngineManager(activity)
5049
.saveToConfiguration(engineName,
5150
engineFile.getAbsolutePath(), pkg,
5251
newVersion);

‎src/org/scid/android/engine/EngineManager.java

+13-30
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
* Class to manage UCI chess engines.
4040
*/
4141
public class EngineManager {
42-
public static final String DATA_PATH = "/data/data/org.scid.android/";
4342
private static final String ENGINE_DATA_FILE = "engines.xml";
4443
private static final String INTERNAL_ENGINE_NAME = "Stockfish 5";
4544
private static EngineConfig defaultEngine;
@@ -85,32 +84,15 @@ public interface EngineChangeListener {
8584
public void engineChanged(EngineChangeEvent event);
8685
}
8786

88-
private static EngineManager instance = new EngineManager();
89-
90-
/**
91-
* Gets the singleton instance of the manager.
92-
*
93-
* @return The manager singleton.
94-
*/
95-
public static EngineManager getInstance() {
96-
return instance;
97-
}
98-
99-
public EngineManager() {
87+
public EngineManager(Context context) {
88+
this.context = context;
10089
// Establish the default engine
101-
defaultEngine = new EngineConfig(INTERNAL_ENGINE_NAME, DATA_PATH
102-
+ getInternalEngineFileName(), null, 0);
90+
defaultEngine = new EngineConfig(INTERNAL_ENGINE_NAME, context
91+
.getFilesDir().getPath() + getInternalEngineFileName(), null, 0);
10392
}
10493

105-
/**
106-
* Sets the application context for the manager to use. The application
107-
* context is needed for displaying dialogs and accessing resource strings.
108-
*
109-
* @param context
110-
* The application context.
111-
*/
112-
public void setContext(Context context) {
113-
this.context = context;
94+
public String getFilesDir() {
95+
return context.getFilesDir().getPath();
11496
}
11597

11698
public void addEngineChangeListener(EngineChangeListener listener) {
@@ -135,7 +117,7 @@ public void removeEngineChangeListener(EngineChangeListener listener) {
135117
*
136118
* @return The default EngineConfig.
137119
*/
138-
public static EngineConfig getDefaultEngine() {
120+
public EngineConfig getDefaultEngine() {
139121
return defaultEngine;
140122
}
141123

@@ -234,7 +216,7 @@ public boolean addEngine(String engineName, String executable,
234216
String enginePackage, int engineVersion) {
235217
EngineConfig engine = getEnginesList().get(engineName);
236218
if (engine == null) {
237-
File engineFile = new File(DATA_PATH + executable);
219+
File engineFile = new File(context.getFilesDir(), executable);
238220
String engineAbsPath = engineFile.getAbsolutePath();
239221
boolean engineExists = engineFile.exists();
240222
if (!engineExists) {
@@ -290,7 +272,7 @@ private void addOpenExchangeEngine(String executable, String engineAbsPath,
290272
found = true;
291273
try {
292274
openEngine.copyToFiles(context.getContentResolver(),
293-
new File(DATA_PATH));
275+
context.getFilesDir());
294276
Toast.makeText(
295277
context,
296278
context.getString(R.string.engine_added_copied,
@@ -429,7 +411,8 @@ private void saveEngineData(Map<String, EngineConfig> enginesList) {
429411
if (Log.isLoggable("SCID", Log.DEBUG))
430412
Log.d("SCID", "Engine XML: " + writer.toString());
431413

432-
File engineDataFile = new File(DATA_PATH + ENGINE_DATA_FILE);
414+
File engineDataFile = new File(context.getFilesDir(),
415+
ENGINE_DATA_FILE);
433416
fw = new FileWriter(engineDataFile);
434417
fw.write(writer.toString());
435418
fw.close();
@@ -464,7 +447,7 @@ private Map<String, EngineConfig> getEnginesList() {
464447
*/
465448
private void loadEngineData() {
466449
TreeMap<String, EngineConfig> list = new TreeMap<String, EngineConfig>();
467-
File engineDataFile = new File(DATA_PATH + ENGINE_DATA_FILE);
450+
File engineDataFile = new File(context.getFilesDir(), ENGINE_DATA_FILE);
468451
if (engineDataFile.exists()) {
469452
FileReader fr = null;
470453
try {
@@ -584,7 +567,7 @@ protected Boolean doInBackground(File... params) {
584567
if (!canceled) {
585568
if (Log.isLoggable("SCID", Log.INFO))
586569
Log.i("SCID", srcFile.getName() + " copied to "
587-
+ DATA_PATH);
570+
+ context.getFilesDir().getPath());
588571
result = Boolean.TRUE;
589572
}
590573
} catch (IOException e) {

0 commit comments

Comments
 (0)
Failed to load comments.