aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
diff options
context:
space:
mode:
authorKeisuke Kuroyanagi <ksk@google.com>2014-05-01 10:16:57 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-05-01 10:16:58 +0000
commitc005c1dc565bd02cb1a24d5349a8078ed49dbae9 (patch)
treec7795369ef6cd9da950060bee6c172ab36adde90 /java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
parent61fe28831d93a829f67694a342b6c94bdc7732ea (diff)
parent99f26648710e1962e27eb8d27816a62996d61cb2 (diff)
downloadlatinime-c005c1dc565bd02cb1a24d5349a8078ed49dbae9.tar.gz
latinime-c005c1dc565bd02cb1a24d5349a8078ed49dbae9.tar.xz
latinime-c005c1dc565bd02cb1a24d5349a8078ed49dbae9.zip
Merge "Use dictType to class map to create sub dicts."
Diffstat (limited to 'java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java')
-rw-r--r--java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java42
1 files changed, 32 insertions, 10 deletions
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
index 061910775..39b045bf1 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
@@ -31,6 +31,8 @@ import com.android.inputmethod.latin.utils.LanguageModelParam;
import com.android.inputmethod.latin.utils.SuggestionResults;
import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -64,6 +66,20 @@ public class DictionaryFacilitatorForSuggest {
Dictionary.TYPE_CONTACTS
};
+ private static final Map<String, Class<? extends ExpandableBinaryDictionary>>
+ DICT_TYPE_TO_CLASS = CollectionUtils.newHashMap();
+
+ static {
+ DICT_TYPE_TO_CLASS.put(Dictionary.TYPE_USER_HISTORY, UserHistoryDictionary.class);
+ DICT_TYPE_TO_CLASS.put(Dictionary.TYPE_PERSONALIZATION, PersonalizationDictionary.class);
+ DICT_TYPE_TO_CLASS.put(Dictionary.TYPE_USER, UserBinaryDictionary.class);
+ DICT_TYPE_TO_CLASS.put(Dictionary.TYPE_CONTACTS, ContactsBinaryDictionary.class);
+ }
+
+ private static final String DICT_FACTORY_METHOD_NAME = "getDictionary";
+ private static final Class<?>[] DICT_FACTORY_METHOD_ARG_TYPES =
+ new Class[] { Context.class, Locale.class, File.class };
+
private static final String[] SUB_DICT_TYPES =
Arrays.copyOfRange(DICT_TYPES_ORDERED_TO_GET_SUGGESTION, 1 /* start */,
DICT_TYPES_ORDERED_TO_GET_SUGGESTION.length);
@@ -145,15 +161,20 @@ public class DictionaryFacilitatorForSuggest {
private static ExpandableBinaryDictionary getSubDict(final String dictType,
final Context context, final Locale locale, final File dictFile) {
- if (Dictionary.TYPE_CONTACTS.equals(dictType)) {
- return ContactsBinaryDictionary.getDictionary(context, locale, dictFile);
- } else if (Dictionary.TYPE_USER.equals(dictType)) {
- return UserBinaryDictionary.getDictionary(context, locale, dictFile);
- } else if (Dictionary.TYPE_USER_HISTORY.equals(dictType)) {
- return UserHistoryDictionary.getDictionary(context, locale, dictFile);
- } else if (Dictionary.TYPE_PERSONALIZATION.equals(dictType)) {
- return PersonalizationDictionary.getDictionary(context, locale, dictFile);
- } else {
+ final Class<? extends ExpandableBinaryDictionary> dictClass =
+ DICT_TYPE_TO_CLASS.get(dictType);
+ if (dictClass == null) {
+ return null;
+ }
+ try {
+ final Method factoryMethod = dictClass.getMethod(DICT_FACTORY_METHOD_NAME,
+ DICT_FACTORY_METHOD_ARG_TYPES);
+ final Object dict = factoryMethod.invoke(null /* obj */,
+ new Object[] { context, locale, dictFile });
+ return (ExpandableBinaryDictionary) dict;
+ } catch (final NoSuchMethodException | SecurityException | IllegalAccessException
+ | IllegalArgumentException | InvocationTargetException e) {
+ Log.e(TAG, "Cannot create dictionary: " + dictType, e);
return null;
}
}
@@ -165,9 +186,10 @@ public class DictionaryFacilitatorForSuggest {
final boolean localeHasBeenChanged = !newLocale.equals(mDictionaries.mLocale);
// We always try to have the main dictionary. Other dictionaries can be unused.
final boolean reloadMainDictionary = localeHasBeenChanged || forceReloadMainDictionary;
+ // TODO: Make subDictTypesToUse configurable by resource or a static final list.
final Set<String> subDictTypesToUse = CollectionUtils.newHashSet();
if (useContactsDict) {
- subDictTypesToUse.add(Dictionary.TYPE_USER);
+ subDictTypesToUse.add(Dictionary.TYPE_CONTACTS);
}
subDictTypesToUse.add(Dictionary.TYPE_USER);
if (usePersonalizedDicts) {