aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin
diff options
context:
space:
mode:
authorKeisuke Kuroyanagi <ksk@google.com>2014-04-23 13:13:56 -0700
committerKeisuke Kuroyanagi <ksk@google.com>2014-04-24 11:25:50 -0700
commit978958a41f8e3365643d6b45a9fc36d02c01df44 (patch)
treeb42d5dc471d22d16f831f402cb5c9952c113be14 /java/src/com/android/inputmethod/latin
parent2dcb5c1b4d399501fc7645bf933f08f3a0e7e512 (diff)
downloadlatinime-978958a41f8e3365643d6b45a9fc36d02c01df44.tar.gz
latinime-978958a41f8e3365643d6b45a9fc36d02c01df44.tar.xz
latinime-978958a41f8e3365643d6b45a9fc36d02c01df44.zip
Simplify DictionaryFacilitatorForSuggest to be flexible.
Bug: 13755213 Change-Id: I151269a7038b72a33b436da4c7596e09949e6d00
Diffstat (limited to 'java/src/com/android/inputmethod/latin')
-rw-r--r--java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java160
1 files changed, 65 insertions, 95 deletions
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
index 34bece29f..78f64e08d 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
@@ -69,8 +69,9 @@ public class DictionaryFacilitatorForSuggest {
public final Locale mLocale;
public final ConcurrentHashMap<String, Dictionary> mDictMap =
CollectionUtils.newConcurrentHashMap();
- // Main dictionary will be asynchronously loaded.
- public Dictionary mMainDictionary;
+ public final ConcurrentHashMap<String, ExpandableBinaryDictionary> mSubDictMap =
+ CollectionUtils.newConcurrentHashMap();
+ // TODO: Remove sub dictionary members and use mSubDictMap.
public final ContactsBinaryDictionary mContactsDictionary;
public final UserBinaryDictionary mUserDictionary;
public final UserHistoryDictionary mUserHistoryDictionary;
@@ -78,7 +79,6 @@ public class DictionaryFacilitatorForSuggest {
public Dictionaries() {
mLocale = null;
- mMainDictionary = null;
mContactsDictionary = null;
mUserDictionary = null;
mUserHistoryDictionary = null;
@@ -90,57 +90,56 @@ public class DictionaryFacilitatorForSuggest {
final UserHistoryDictionary userHistoryDict,
final PersonalizationDictionary personalizationDict) {
mLocale = locale;
+ // Main dictionary can be asynchronously loaded.
setMainDict(mainDict);
mContactsDictionary = contactsDict;
- if (mContactsDictionary != null) {
- mDictMap.put(Dictionary.TYPE_CONTACTS, mContactsDictionary);
- }
+ setSubDict(Dictionary.TYPE_CONTACTS, mContactsDictionary);
mUserDictionary = userDict;
- if (mUserDictionary != null) {
- mDictMap.put(Dictionary.TYPE_USER, mUserDictionary);
- }
+ setSubDict(Dictionary.TYPE_USER, mUserDictionary);
mUserHistoryDictionary = userHistoryDict;
- if (mUserHistoryDictionary != null) {
- mDictMap.put(Dictionary.TYPE_USER_HISTORY, mUserHistoryDictionary);
- }
+ setSubDict(Dictionary.TYPE_USER_HISTORY, mUserHistoryDictionary);
mPersonalizationDictionary = personalizationDict;
- if (mPersonalizationDictionary != null) {
- mDictMap.put(Dictionary.TYPE_PERSONALIZATION, mPersonalizationDictionary);
+ setSubDict(Dictionary.TYPE_PERSONALIZATION, mPersonalizationDictionary);
+ }
+
+ private void setSubDict(final String dictType, final ExpandableBinaryDictionary dict) {
+ if (dict != null) {
+ mDictMap.put(dictType, dict);
+ mSubDictMap.put(dictType, dict);
}
}
public void setMainDict(final Dictionary mainDict) {
- mMainDictionary = mainDict;
// Close old dictionary if exists. Main dictionary can be assigned multiple times.
final Dictionary oldDict;
- if (mMainDictionary != null) {
- oldDict = mDictMap.put(Dictionary.TYPE_MAIN, mMainDictionary);
+ if (mainDict != null) {
+ oldDict = mDictMap.put(Dictionary.TYPE_MAIN, mainDict);
} else {
oldDict = mDictMap.remove(Dictionary.TYPE_MAIN);
}
- if (oldDict != null && mMainDictionary != oldDict) {
+ if (oldDict != null && mainDict != oldDict) {
oldDict.close();
}
}
- public boolean hasMainDict() {
- return mMainDictionary != null;
+ public Dictionary getMainDict() {
+ return mDictMap.get(Dictionary.TYPE_MAIN);
}
- public boolean hasContactsDict() {
- return mContactsDictionary != null;
+ public ExpandableBinaryDictionary getSubDict(final String dictType) {
+ return mSubDictMap.get(dictType);
}
- public boolean hasUserDict() {
- return mUserDictionary != null;
+ public boolean hasDict(final String dictType) {
+ return mDictMap.contains(dictType);
}
- public boolean hasUserHistoryDict() {
- return mUserHistoryDictionary != null;
- }
-
- public boolean hasPersonalizationDict() {
- return mPersonalizationDictionary != null;
+ public void closeDict(final String dictType) {
+ final Dictionary dict = mDictMap.remove(dictType);
+ mSubDictMap.remove(dictType);
+ if (dict != null) {
+ dict.close();
+ }
}
}
@@ -172,12 +171,12 @@ public class DictionaryFacilitatorForSuggest {
// The main dictionary will be asynchronously loaded.
newMainDict = null;
} else {
- newMainDict = mDictionaries.mMainDictionary;
+ newMainDict = mDictionaries.getMainDict();
}
// Open or move contacts dictionary.
final ContactsBinaryDictionary newContactsDict;
- if (!closeContactsDictionary && mDictionaries.hasContactsDict()) {
+ if (!closeContactsDictionary && mDictionaries.hasDict(Dictionary.TYPE_CONTACTS)) {
newContactsDict = mDictionaries.mContactsDictionary;
} else if (useContactsDict) {
newContactsDict = new ContactsBinaryDictionary(context, newLocale);
@@ -187,7 +186,7 @@ public class DictionaryFacilitatorForSuggest {
// Open or move user dictionary.
final UserBinaryDictionary newUserDictionary;
- if (!closeUserDictionary && mDictionaries.hasUserDict()) {
+ if (!closeUserDictionary && mDictionaries.hasDict(Dictionary.TYPE_USER)) {
newUserDictionary = mDictionaries.mUserDictionary;
} else {
newUserDictionary = new UserBinaryDictionary(context, newLocale);
@@ -195,7 +194,7 @@ public class DictionaryFacilitatorForSuggest {
// Open or move user history dictionary.
final UserHistoryDictionary newUserHistoryDict;
- if (!closeUserHistoryDictionary && mDictionaries.hasUserHistoryDict()) {
+ if (!closeUserHistoryDictionary && mDictionaries.hasDict(Dictionary.TYPE_USER_HISTORY)) {
newUserHistoryDict = mDictionaries.mUserHistoryDictionary;
} else if (usePersonalizedDicts) {
newUserHistoryDict = PersonalizationHelper.getUserHistoryDictionary(context, newLocale);
@@ -205,7 +204,8 @@ public class DictionaryFacilitatorForSuggest {
// Open or move personalization dictionary.
final PersonalizationDictionary newPersonalizationDict;
- if (!closePersonalizationDictionary && mDictionaries.hasPersonalizationDict()) {
+ if (!closePersonalizationDictionary
+ && mDictionaries.hasDict(Dictionary.TYPE_PERSONALIZATION)) {
newPersonalizationDict = mDictionaries.mPersonalizationDictionary;
} else if (usePersonalizedDicts) {
newPersonalizationDict =
@@ -230,22 +230,23 @@ public class DictionaryFacilitatorForSuggest {
}
// Clean up old dictionaries.
- oldDictionaries.mDictMap.clear();
- if (reloadMainDictionary && oldDictionaries.hasMainDict()) {
- oldDictionaries.mMainDictionary.close();
+ if (reloadMainDictionary) {
+ oldDictionaries.closeDict(Dictionary.TYPE_MAIN);
}
- if (closeContactsDictionary && oldDictionaries.hasContactsDict()) {
- oldDictionaries.mContactsDictionary.close();
+ if (closeContactsDictionary) {
+ oldDictionaries.closeDict(Dictionary.TYPE_CONTACTS);
}
- if (closeUserDictionary && oldDictionaries.hasUserDict()) {
- oldDictionaries.mUserDictionary.close();
+ if (closeUserDictionary) {
+ oldDictionaries.closeDict(Dictionary.TYPE_USER);
}
- if (closeUserHistoryDictionary && oldDictionaries.hasUserHistoryDict()) {
- oldDictionaries.mUserHistoryDictionary.close();
+ if (closeUserHistoryDictionary) {
+ oldDictionaries.closeDict(Dictionary.TYPE_USER_HISTORY);
}
- if (closePersonalizationDictionary && oldDictionaries.hasPersonalizationDict()) {
- oldDictionaries.mPersonalizationDictionary.close();
+ if (closePersonalizationDictionary) {
+ oldDictionaries.closeDict(Dictionary.TYPE_PERSONALIZATION);
}
+ oldDictionaries.mDictMap.clear();
+ oldDictionaries.mSubDictMap.clear();
}
private void asyncReloadMainDictionary(final Context context, final Locale locale,
@@ -332,32 +333,20 @@ public class DictionaryFacilitatorForSuggest {
dictionaries = mDictionaries;
mDictionaries = new Dictionaries();
}
- if (dictionaries.hasMainDict()) {
- dictionaries.mMainDictionary.close();
- }
- if (dictionaries.hasContactsDict()) {
- dictionaries.mContactsDictionary.close();
- }
- if (dictionaries.hasUserDict()) {
- dictionaries.mUserDictionary.close();
- }
- if (dictionaries.hasUserHistoryDict()) {
- dictionaries.mUserHistoryDictionary.close();
- }
- if (dictionaries.hasPersonalizationDict()) {
- dictionaries.mPersonalizationDictionary.close();
+ for (final Dictionary dict : dictionaries.mDictMap.values()) {
+ dict.close();
}
}
// The main dictionary could have been loaded asynchronously. Don't cache the return value
// of this method.
public boolean hasInitializedMainDictionary() {
- final Dictionaries dictionaries = mDictionaries;
- return dictionaries.hasMainDict() && dictionaries.mMainDictionary.isInitialized();
+ final Dictionary mainDict = mDictionaries.getMainDict();
+ return mainDict != null && mainDict.isInitialized();
}
public boolean hasPersonalizationDictionary() {
- return mDictionaries.hasPersonalizationDict();
+ return mDictionaries.hasDict(Dictionary.TYPE_PERSONALIZATION);
}
public void flushPersonalizationDictionary() {
@@ -377,18 +366,9 @@ public class DictionaryFacilitatorForSuggest {
public void waitForLoadingDictionariesForTesting(final long timeout, final TimeUnit unit)
throws InterruptedException {
waitForLoadingMainDictionary(timeout, unit);
- final Dictionaries dictionaries = mDictionaries;
- if (dictionaries.hasContactsDict()) {
- dictionaries.mContactsDictionary.waitAllTasksForTests();
- }
- if (dictionaries.hasUserDict()) {
- dictionaries.mUserDictionary.waitAllTasksForTests();
- }
- if (dictionaries.hasUserHistoryDict()) {
- dictionaries.mUserHistoryDictionary.waitAllTasksForTests();
- }
- if (dictionaries.hasPersonalizationDict()) {
- dictionaries.mPersonalizationDictionary.waitAllTasksForTests();
+ final Map<String, ExpandableBinaryDictionary> dictMap = mDictionaries.mSubDictMap;
+ for (final ExpandableBinaryDictionary dict : dictMap.values()) {
+ dict.waitAllTasksForTests();
}
}
@@ -411,7 +391,7 @@ public class DictionaryFacilitatorForSuggest {
public void addToUserHistory(final String suggestion, final boolean wasAutoCapitalized,
final String previousWord, final int timeStampInSeconds) {
final Dictionaries dictionaries = mDictionaries;
- if (!dictionaries.hasUserHistoryDict()) {
+ if (!dictionaries.hasDict(Dictionary.TYPE_USER_HISTORY)) {
return;
}
final int maxFreq = getMaxFrequency(suggestion);
@@ -439,8 +419,8 @@ public class DictionaryFacilitatorForSuggest {
// History dictionary in order to avoid suggesting them until the dictionary
// consolidation is done.
// TODO: Remove this hack when ready.
- final int lowerCaseFreqInMainDict = dictionaries.hasMainDict() ?
- dictionaries.mMainDictionary.getFrequency(suggestionLowerCase) :
+ final int lowerCaseFreqInMainDict = dictionaries.hasDict(Dictionary.TYPE_MAIN) ?
+ dictionaries.getMainDict().getFrequency(suggestionLowerCase) :
Dictionary.NOT_A_PROBABILITY;
if (maxFreq < lowerCaseFreqInMainDict
&& lowerCaseFreqInMainDict >= CAPITALIZED_FORM_MAX_PROBABILITY_FOR_INSERT) {
@@ -492,10 +472,10 @@ public class DictionaryFacilitatorForSuggest {
public boolean isValidMainDictWord(final String word) {
final Dictionaries dictionaries = mDictionaries;
- if (TextUtils.isEmpty(word) || !dictionaries.hasMainDict()) {
+ if (TextUtils.isEmpty(word) || !dictionaries.hasDict(Dictionary.TYPE_MAIN)) {
return false;
}
- return dictionaries.mMainDictionary.isValidWord(word);
+ return dictionaries.getMainDict().isValidWord(word);
}
public boolean isValidWord(final String word, final boolean ignoreCase) {
@@ -538,7 +518,8 @@ public class DictionaryFacilitatorForSuggest {
public void clearUserHistoryDictionary() {
- final UserHistoryDictionary userHistoryDict = mDictionaries.mUserHistoryDictionary;
+ final ExpandableBinaryDictionary userHistoryDict =
+ mDictionaries.getSubDict(Dictionary.TYPE_USER_HISTORY);
if (userHistoryDict == null) {
return;
}
@@ -548,8 +529,8 @@ public class DictionaryFacilitatorForSuggest {
// This method gets called only when the IME receives a notification to remove the
// personalization dictionary.
public void clearPersonalizationDictionary() {
- final PersonalizationDictionary personalizationDict =
- mDictionaries.mPersonalizationDictionary;
+ final ExpandableBinaryDictionary personalizationDict =
+ mDictionaries.getSubDict(Dictionary.TYPE_PERSONALIZATION);
if (personalizationDict == null) {
return;
}
@@ -571,18 +552,7 @@ public class DictionaryFacilitatorForSuggest {
}
public void dumpDictionaryForDebug(final String dictName) {
- final ExpandableBinaryDictionary dictToDump;
- if (dictName.equals(Dictionary.TYPE_CONTACTS)) {
- dictToDump = mDictionaries.mContactsDictionary;
- } else if (dictName.equals(Dictionary.TYPE_USER)) {
- dictToDump = mDictionaries.mUserDictionary;
- } else if (dictName.equals(Dictionary.TYPE_USER_HISTORY)) {
- dictToDump = mDictionaries.mUserHistoryDictionary;
- } else if (dictName.equals(Dictionary.TYPE_PERSONALIZATION)) {
- dictToDump = mDictionaries.mPersonalizationDictionary;
- } else {
- dictToDump = null;
- }
+ final ExpandableBinaryDictionary dictToDump = mDictionaries.getSubDict(dictName);
if (dictToDump == null) {
Log.e(TAG, "Cannot dump " + dictName + ". "
+ "The dictionary is not being used for suggestion or cannot be dumped.");