From 4ca6ad93d52dce0812a814e283264e4b3e0c73fd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Reimar=20D=C3=B6ffinger?= Date: Thu, 19 Nov 2015 20:55:18 +0100 Subject: [PATCH] More thorough writability check. --- .../android/dictionary/DictionaryApplication.java | 11 +++++++++++ .../android/dictionary/DictionaryManagerActivity.java | 5 +++-- .../hughes/android/dictionary/PreferenceActivity.java | 3 ++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/com/hughes/android/dictionary/DictionaryApplication.java b/src/com/hughes/android/dictionary/DictionaryApplication.java index 1de2001..d635538 100644 --- a/src/com/hughes/android/dictionary/DictionaryApplication.java +++ b/src/com/hughes/android/dictionary/DictionaryApplication.java @@ -408,6 +408,17 @@ public class DictionaryApplication extends Application { return dictDir; } + static public boolean checkFileCreate(File dir) { + boolean res = false; + File testfile = new File(dir, "quickdic_writetest"); + try { + testfile.delete(); + res = testfile.createNewFile() & testfile.delete(); + } catch (Exception e) { + } + return res; + } + public File getWordListFile() { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); String file = prefs.getString(getString(R.string.wordListFileKey), ""); diff --git a/src/com/hughes/android/dictionary/DictionaryManagerActivity.java b/src/com/hughes/android/dictionary/DictionaryManagerActivity.java index 127de43..f22f7d4 100644 --- a/src/com/hughes/android/dictionary/DictionaryManagerActivity.java +++ b/src/com/hughes/android/dictionary/DictionaryManagerActivity.java @@ -174,8 +174,9 @@ public class DictionaryManagerActivity extends ActionBarActivity { Toast.LENGTH_LONG).show(); } catch (Exception e) { String msg = getString(R.string.unzippingFailed, dest); - if (!application.getDictDir().canWrite()) { - msg = getString(R.string.notWritable, application.getDictDir().getAbsolutePath()); + File dir = application.getDictDir(); + if (!dir.canWrite() || !application.checkFileCreate(dir)) { + msg = getString(R.string.notWritable, dir.getAbsolutePath()); } new AlertDialog.Builder(context).setTitle(getString(R.string.error)).setMessage(msg).setNeutralButton("Close", null).show(); Log.e(LOG, "Failed to unzip.", e); diff --git a/src/com/hughes/android/dictionary/PreferenceActivity.java b/src/com/hughes/android/dictionary/PreferenceActivity.java index 470677a..a415d87 100644 --- a/src/com/hughes/android/dictionary/PreferenceActivity.java +++ b/src/com/hughes/android/dictionary/PreferenceActivity.java @@ -91,7 +91,8 @@ public class PreferenceActivity extends android.preference.PreferenceActivity public void onSharedPreferenceChanged(SharedPreferences p, String v) { final DictionaryApplication application = (DictionaryApplication)getApplication(); File dictDir = application.getDictDir(); - if (!dictDir.isDirectory() || !dictDir.canWrite()) { + if (!dictDir.isDirectory() || !dictDir.canWrite() || + !application.checkFileCreate(dictDir)) { String dirs = ""; String externalDir = Environment.getExternalStorageDirectory().getAbsolutePath(); if (new File(externalDir).canWrite()) -- 2.43.0