Simplification and optimization (A20)

Change-Id: Ia837e553ccfe67cd4303096290194a5186df059b
This commit is contained in:
Jean Chalard 2012-06-26 17:30:12 +09:00
parent 77e95e60bb
commit 6234be1fe7

View file

@ -79,9 +79,7 @@ public class Suggest {
private Dictionary mMainDictionary; private Dictionary mMainDictionary;
private ContactsBinaryDictionary mContactsDict; private ContactsBinaryDictionary mContactsDict;
private WhitelistDictionary mWhiteListDictionary; private WhitelistDictionary mWhiteListDictionary;
private final ConcurrentHashMap<String, Dictionary> mUnigramDictionaries = private final ConcurrentHashMap<String, Dictionary> mDictionaries =
new ConcurrentHashMap<String, Dictionary>();
private final ConcurrentHashMap<String, Dictionary> mBigramDictionaries =
new ConcurrentHashMap<String, Dictionary>(); new ConcurrentHashMap<String, Dictionary>();
public static final int MAX_SUGGESTIONS = 18; public static final int MAX_SUGGESTIONS = 18;
@ -107,16 +105,13 @@ public class Suggest {
final Dictionary mainDict = DictionaryFactory.createDictionaryForTest(context, dictionary, final Dictionary mainDict = DictionaryFactory.createDictionaryForTest(context, dictionary,
startOffset, length /* useFullEditDistance */, false, locale); startOffset, length /* useFullEditDistance */, false, locale);
mMainDictionary = mainDict; mMainDictionary = mainDict;
addOrReplaceDictionary(mUnigramDictionaries, DICT_KEY_MAIN, mainDict); addOrReplaceDictionary(mDictionaries, DICT_KEY_MAIN, mainDict);
addOrReplaceDictionary(mBigramDictionaries, DICT_KEY_MAIN, mainDict);
initWhitelistAndAutocorrectAndPool(context, locale); initWhitelistAndAutocorrectAndPool(context, locale);
} }
private void initWhitelistAndAutocorrectAndPool(final Context context, final Locale locale) { private void initWhitelistAndAutocorrectAndPool(final Context context, final Locale locale) {
mWhiteListDictionary = new WhitelistDictionary(context, locale); mWhiteListDictionary = new WhitelistDictionary(context, locale);
addOrReplaceDictionary(mUnigramDictionaries, DICT_KEY_WHITELIST, mWhiteListDictionary); addOrReplaceDictionary(mDictionaries, DICT_KEY_WHITELIST, mWhiteListDictionary);
// The whitelist dictionary never returns any bigrams, so it's safe to add it here
addOrReplaceDictionary(mBigramDictionaries, DICT_KEY_WHITELIST, mWhiteListDictionary);
} }
private void initAsynchronously(final Context context, final Locale locale) { private void initAsynchronously(final Context context, final Locale locale) {
@ -145,8 +140,7 @@ public class Suggest {
public void run() { public void run() {
final DictionaryCollection newMainDict = final DictionaryCollection newMainDict =
DictionaryFactory.createMainDictionaryFromManager(context, locale); DictionaryFactory.createMainDictionaryFromManager(context, locale);
addOrReplaceDictionary(mUnigramDictionaries, DICT_KEY_MAIN, newMainDict); addOrReplaceDictionary(mDictionaries, DICT_KEY_MAIN, newMainDict);
addOrReplaceDictionary(mBigramDictionaries, DICT_KEY_MAIN, newMainDict);
mMainDictionary = newMainDict; mMainDictionary = newMainDict;
} }
}.start(); }.start();
@ -167,7 +161,7 @@ public class Suggest {
} }
public ConcurrentHashMap<String, Dictionary> getUnigramDictionaries() { public ConcurrentHashMap<String, Dictionary> getUnigramDictionaries() {
return mUnigramDictionaries; return mDictionaries;
} }
public static int getApproxMaxWordLength() { public static int getApproxMaxWordLength() {
@ -179,9 +173,7 @@ public class Suggest {
* before the main dictionary, if set. This refers to the system-managed user dictionary. * before the main dictionary, if set. This refers to the system-managed user dictionary.
*/ */
public void setUserDictionary(UserBinaryDictionary userDictionary) { public void setUserDictionary(UserBinaryDictionary userDictionary) {
addOrReplaceDictionary(mUnigramDictionaries, DICT_KEY_USER, userDictionary); addOrReplaceDictionary(mDictionaries, DICT_KEY_USER, userDictionary);
// The user dictionary never returns any bigrams, so it's safe to add it
addOrReplaceDictionary(mBigramDictionaries, DICT_KEY_USER, userDictionary);
} }
/** /**
@ -191,13 +183,11 @@ public class Suggest {
*/ */
public void setContactsDictionary(ContactsBinaryDictionary contactsDictionary) { public void setContactsDictionary(ContactsBinaryDictionary contactsDictionary) {
mContactsDict = contactsDictionary; mContactsDict = contactsDictionary;
addOrReplaceDictionary(mUnigramDictionaries, DICT_KEY_CONTACTS, contactsDictionary); addOrReplaceDictionary(mDictionaries, DICT_KEY_CONTACTS, contactsDictionary);
addOrReplaceDictionary(mBigramDictionaries, DICT_KEY_CONTACTS, contactsDictionary);
} }
public void setUserHistoryDictionary(UserHistoryDictionary userHistoryDictionary) { public void setUserHistoryDictionary(UserHistoryDictionary userHistoryDictionary) {
addOrReplaceDictionary(mUnigramDictionaries, DICT_KEY_USER_HISTORY, userHistoryDictionary); addOrReplaceDictionary(mDictionaries, DICT_KEY_USER_HISTORY, userHistoryDictionary);
addOrReplaceDictionary(mBigramDictionaries, DICT_KEY_USER_HISTORY, userHistoryDictionary);
} }
public void setAutoCorrectionThreshold(float threshold) { public void setAutoCorrectionThreshold(float threshold) {
@ -258,9 +248,9 @@ public class Suggest {
} else { } else {
lowerPrevWord = null; lowerPrevWord = null;
} }
for (final String key : mBigramDictionaries.keySet()) { for (final String key : mDictionaries.keySet()) {
final int dicTypeId = sDictKeyToDictIndex.get(key); final int dicTypeId = sDictKeyToDictIndex.get(key);
final Dictionary dictionary = mBigramDictionaries.get(key); final Dictionary dictionary = mDictionaries.get(key);
final ArrayList<SuggestedWordInfo> suggestions = final ArrayList<SuggestedWordInfo> suggestions =
dictionary.getBigrams(wordComposer, prevWordForBigram); dictionary.getBigrams(wordComposer, prevWordForBigram);
if (null != lowerPrevWord) { if (null != lowerPrevWord) {
@ -284,12 +274,12 @@ public class Suggest {
wordComposerForLookup = wordComposer; wordComposerForLookup = wordComposer;
} }
// At second character typed, search the unigrams (scores being affected by bigrams) // At second character typed, search the unigrams (scores being affected by bigrams)
for (final String key : mUnigramDictionaries.keySet()) { for (final String key : mDictionaries.keySet()) {
// Skip UserUnigramDictionary and WhitelistDictionary to lookup // Skip UserUnigramDictionary and WhitelistDictionary to lookup
if (key.equals(DICT_KEY_USER_HISTORY) || key.equals(DICT_KEY_WHITELIST)) if (key.equals(DICT_KEY_USER_HISTORY) || key.equals(DICT_KEY_WHITELIST))
continue; continue;
final int dicTypeId = sDictKeyToDictIndex.get(key); final int dicTypeId = sDictKeyToDictIndex.get(key);
final Dictionary dictionary = mUnigramDictionaries.get(key); final Dictionary dictionary = mDictionaries.get(key);
final ArrayList<SuggestedWordInfo> suggestions = dictionary.getWords( final ArrayList<SuggestedWordInfo> suggestions = dictionary.getWords(
wordComposerForLookup, prevWordForBigram, proximityInfo); wordComposerForLookup, prevWordForBigram, proximityInfo);
for (final SuggestedWordInfo suggestion : suggestions) { for (final SuggestedWordInfo suggestion : suggestions) {
@ -306,7 +296,7 @@ public class Suggest {
final boolean hasAutoCorrection; final boolean hasAutoCorrection;
if (isCorrectionEnabled) { if (isCorrectionEnabled) {
final CharSequence autoCorrection = final CharSequence autoCorrection =
AutoCorrection.computeAutoCorrectionWord(mUnigramDictionaries, wordComposer, AutoCorrection.computeAutoCorrectionWord(mDictionaries, wordComposer,
mSuggestions, consideredWord, mAutoCorrectionThreshold, mSuggestions, consideredWord, mAutoCorrectionThreshold,
whitelistedWord); whitelistedWord);
hasAutoCorrection = (null != autoCorrection); hasAutoCorrection = (null != autoCorrection);
@ -470,8 +460,7 @@ public class Suggest {
public void close() { public void close() {
final HashSet<Dictionary> dictionaries = new HashSet<Dictionary>(); final HashSet<Dictionary> dictionaries = new HashSet<Dictionary>();
dictionaries.addAll(mUnigramDictionaries.values()); dictionaries.addAll(mDictionaries.values());
dictionaries.addAll(mBigramDictionaries.values());
for (final Dictionary dictionary : dictionaries) { for (final Dictionary dictionary : dictionaries) {
dictionary.close(); dictionary.close();
} }