]> gitweb.fperrin.net Git - Dictionary.git/commitdiff
More thorough writability check.
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>
Thu, 19 Nov 2015 19:55:18 +0000 (20:55 +0100)
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>
Thu, 19 Nov 2015 19:55:18 +0000 (20:55 +0100)
src/com/hughes/android/dictionary/DictionaryApplication.java
src/com/hughes/android/dictionary/DictionaryManagerActivity.java
src/com/hughes/android/dictionary/PreferenceActivity.java

index 1de2001ff6452cede91465c141edc9ac4ea03518..d63553825430153b01bec1c25e6a34e13cf2d486 100644 (file)
@@ -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), "");
index 127de4358792396ba289327b3673ae7d793d1611..f22f7d4cb800f06cded32416733bbc4a0c220707 100644 (file)
@@ -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);
index 470677a13656b27b89383f8a8e7f9a8faf901be4..a415d871a262839ce6ecdff1f6462b6b4c3fb81e 100644 (file)
@@ -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())