From f1bd215a3fe170da6132f4f4e4254f4903d6b146 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Reimar=20D=C3=B6ffinger?= Date: Wed, 9 Dec 2015 23:55:14 +0100 Subject: [PATCH] Add flag to avoid using ICU collator. --- .../hughes/android/dictionary/DictionaryApplication.java | 9 ++++++++- src/com/hughes/android/dictionary/engine/Index.java | 3 ++- src/com/hughes/android/dictionary/engine/Language.java | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/com/hughes/android/dictionary/DictionaryApplication.java b/src/com/hughes/android/dictionary/DictionaryApplication.java index d635538..b415501 100644 --- a/src/com/hughes/android/dictionary/DictionaryApplication.java +++ b/src/com/hughes/android/dictionary/DictionaryApplication.java @@ -61,6 +61,13 @@ 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. + static public final boolean USE_COLLATOR = true; + // Static, determined by resources (and locale). // Unordered. static Map DOWNLOADABLE_UNCOMPRESSED_FILENAME_NAME_TO_DICTIONARY_INFO = null; @@ -539,7 +546,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 uncompressedFilenameComparator = new Comparator() { @Override public int compare(String uncompressedFilename1, String uncompressedFilename2) { diff --git a/src/com/hughes/android/dictionary/engine/Index.java b/src/com/hughes/android/dictionary/engine/Index.java index 6386708..9905216 100644 --- a/src/com/hughes/android/dictionary/engine/Index.java +++ b/src/com/hughes/android/dictionary/engine/Index.java @@ -41,6 +41,7 @@ import java.util.AbstractList; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.EnumMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -291,7 +292,7 @@ public final class Index implements RAFSerializable { int start = 0; int end = sortedIndexEntries.size(); - final Collator sortCollator = sortLanguage.getCollator(); + final Comparator sortCollator = sortLanguage.getCollator(); while (start < end) { final int mid = (start + end) / 2; if (interrupted.get()) { diff --git a/src/com/hughes/android/dictionary/engine/Language.java b/src/com/hughes/android/dictionary/engine/Language.java index eaa11b6..78085f6 100644 --- a/src/com/hughes/android/dictionary/engine/Language.java +++ b/src/com/hughes/android/dictionary/engine/Language.java @@ -14,8 +14,10 @@ package com.hughes.android.dictionary.engine; +import com.hughes.android.dictionary.DictionaryApplication; import com.ibm.icu.text.Collator; +import java.util.Comparator; import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; @@ -62,7 +64,9 @@ public class Language { return isoCode; } - public synchronized Collator getCollator() { + public synchronized Comparator getCollator() { + if (!DictionaryApplication.USE_COLLATOR) + return String.CASE_INSENSITIVE_ORDER; // Don't think this is thread-safe... // if (collator == null) { this.collator = Collator.getInstance(locale); -- 2.43.0