]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/DictionaryApplication.java
Make updating the dictionary list more robust.
[Dictionary.git] / src / com / hughes / android / dictionary / DictionaryApplication.java
index 98971832183b323e6277e5ee391e6f3809e170c3..b8022cebe827e08c9fe5ed7edc68dffbbe0724a2 100644 (file)
@@ -20,6 +20,7 @@ import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
 import android.net.Uri;
+import android.os.Build;
 import android.os.Environment;
 import android.preference.PreferenceManager;
 import android.support.v4.view.MenuItemCompat;
@@ -32,6 +33,8 @@ import android.view.View;
 import android.widget.Button;
 import android.widget.ImageButton;
 import android.widget.ImageView.ScaleType;
+import android.widget.LinearLayout;
+import android.widget.Toast;
 
 import com.hughes.android.dictionary.DictionaryInfo.IndexInfo;
 import com.hughes.android.dictionary.engine.Dictionary;
@@ -59,6 +62,14 @@ public class DictionaryApplication extends Application {
 
     static final String LOG = "QuickDicApp";
 
+    // If set to false, avoid use of ICU collator
+    // Works well enough for most european languages,
+    // gives faster startup and avoids crashes on some
+    // devices due to Dalvik bugs (e.g. ARMv6, S5570i, CM11).
+    // Leave it enabled by default for correctness except
+    // for my known broken development/performance test device config.
+    static public final boolean USE_COLLATOR = !android.os.Build.FINGERPRINT.equals("Samsung/cm_tassve/tassve:4.4.4/KTU84Q/20150211:userdebug/release-keys");
+
     // Static, determined by resources (and locale).
     // Unordered.
     static Map<String, DictionaryInfo> DOWNLOADABLE_UNCOMPRESSED_FILENAME_NAME_TO_DICTIONARY_INFO = null;
@@ -350,8 +361,7 @@ public class DictionaryApplication extends Application {
         MenuItemCompat.setShowAsAction(about, MenuItem.SHOW_AS_ACTION_NEVER);
         about.setOnMenuItemClickListener(new OnMenuItemClickListener() {
             public boolean onMenuItemClick(final MenuItem menuItem) {
-                final Intent intent = new Intent().setClassName(AboutActivity.class
-                        .getPackage().getName(), AboutActivity.class.getCanonicalName());
+                final Intent intent = new Intent(getApplicationContext(), AboutActivity.class);
                 context.startActivity(intent);
                 return false;
             }
@@ -361,7 +371,7 @@ public class DictionaryApplication extends Application {
         MenuItemCompat.setShowAsAction(help, MenuItem.SHOW_AS_ACTION_NEVER);
         help.setOnMenuItemClickListener(new OnMenuItemClickListener() {
             public boolean onMenuItemClick(final MenuItem menuItem) {
-                context.startActivity(HtmlDisplayActivity.getHelpLaunchIntent());
+                context.startActivity(HtmlDisplayActivity.getHelpLaunchIntent(getApplicationContext()));
                 return false;
             }
         });
@@ -371,8 +381,7 @@ public class DictionaryApplication extends Application {
         preferences.setOnMenuItemClickListener(new OnMenuItemClickListener() {
             public boolean onMenuItemClick(final MenuItem menuItem) {
                 PreferenceActivity.prefsMightHaveChanged = true;
-                final Intent intent = new Intent().setClassName(PreferenceActivity.class
-                        .getPackage().getName(), PreferenceActivity.class.getCanonicalName());
+                final Intent intent = new Intent(getApplicationContext(), PreferenceActivity.class);
                 context.startActivity(intent);
                 return false;
             }
@@ -384,7 +393,7 @@ public class DictionaryApplication extends Application {
             public boolean onMenuItemClick(final MenuItem menuItem) {
                 final Intent intent = new Intent(Intent.ACTION_VIEW);
                 intent.setData(Uri
-                        .parse("http://code.google.com/p/quickdic-dictionary/issues/entry"));
+                        .parse("http://github.com/rdoeffinger/Dictionary/issues"));
                 context.startActivity(intent);
                 return false;
             }
@@ -402,9 +411,23 @@ public class DictionaryApplication extends Application {
         }
         dictDir = new File(dir);
         dictDir.mkdirs();
+        if (!dictDir.isDirectory() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+             getApplicationContext().getExternalFilesDirs(null);
+        }
         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), "");
@@ -503,10 +526,7 @@ public class DictionaryApplication extends Application {
             button.setScaleType(ScaleType.FIT_CENTER);
             result = button;
         }
-        result.setMinimumWidth(languageButtonPixels);
-        result.setMinimumHeight(languageButtonPixels * 2 / 3);
-        // result.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
-        // LayoutParams.WRAP_CONTENT));
+        result.setLayoutParams(new LinearLayout.LayoutParams(languageButtonPixels, LinearLayout.LayoutParams.MATCH_PARENT));
         return result;
     }
 
@@ -525,7 +545,7 @@ public class DictionaryApplication extends Application {
         PersistentObjectCache.getInstance().write(C.DICTIONARY_CONFIGS, dictionaryConfig);
     }
 
-    final Collator collator = Collator.getInstance();
+    final Comparator collator = USE_COLLATOR ? Collator.getInstance() : String.CASE_INSENSITIVE_ORDER;
     final Comparator<String> uncompressedFilenameComparator = new Comparator<String>() {
         @Override
         public int compare(String uncompressedFilename1, String uncompressedFilename2) {
@@ -607,15 +627,20 @@ public class DictionaryApplication extends Application {
                                 file.getName(), dictionaryInfo);
                     }
                 } else {
-                    Log.w(LOG, "dictDir is not a diretory: " + getDictDir().getPath());
+                    Log.w(LOG, "dictDir is not a directory: " + getDictDir().getPath());
                 }
                 if (!toAddSorted.isEmpty()) {
                     Collections.sort(toAddSorted, uncompressedFilenameComparator);
                     newDictionaryConfig.dictionaryFilesOrdered.addAll(toAddSorted);
                 }
 
-                PersistentObjectCache.getInstance()
-                        .write(C.DICTIONARY_CONFIGS, newDictionaryConfig);
+                try {
+                    PersistentObjectCache.getInstance()
+                                 .write(C.DICTIONARY_CONFIGS, newDictionaryConfig);
+                } catch (Exception e) {
+                    Log.e(LOG, "Failed persisting dictionary configs", e);
+                }
+
                 synchronized (this) {
                     dictionaryConfig = newDictionaryConfig;
                 }