aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/LatinIME.java
diff options
context:
space:
mode:
authorKeisuke Kuroyanagi <ksk@google.com>2014-03-25 15:35:20 +0900
committerKeisuke Kuroyanagi <ksk@google.com>2014-03-25 15:35:20 +0900
commitadfb262797023c4ca57bb470e547f90c88f638ca (patch)
tree86b052bdeab30de2ee27d5ead6b5e20086f3ace6 /java/src/com/android/inputmethod/latin/LatinIME.java
parent37b9562fd7b593c90d7ab383ec650f39a7c0f621 (diff)
downloadlatinime-adfb262797023c4ca57bb470e547f90c88f638ca.tar.gz
latinime-adfb262797023c4ca57bb470e547f90c88f638ca.tar.xz
latinime-adfb262797023c4ca57bb470e547f90c88f638ca.zip
Remove logic related to dictionary loading from LatinIME.
Make mSuggest final and give DictionaryFacilitator the responsibility to manage dictionary loading state. This can simplify the logic to decide how to deal with additional dictionaries when loading settings or language switching. Bug: 13273534 Change-Id: I9f3d328272f25addfa186fbeedaaf8417455ba99
Diffstat (limited to 'java/src/com/android/inputmethod/latin/LatinIME.java')
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java127
1 files changed, 51 insertions, 76 deletions
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 38e386493..0c0be82df 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -215,7 +215,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
false /* includeResumedWordInSuggestions */);
break;
case MSG_REOPEN_DICTIONARIES:
- latinIme.initSuggest();
+ latinIme.resetSuggest();
// In theory we could call latinIme.updateSuggestionStrip() right away, but
// in the practice, the dictionary is not finished opening yet so we wouldn't
// get any suggestions. Wait one frame.
@@ -478,10 +478,12 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// TODO: Resolve mutual dependencies of {@link #loadSettings()} and {@link #initSuggest()}.
loadSettings();
- initSuggest();
+ resetSuggest();
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
ResearchLogger.getInstance().init(this, mKeyboardSwitcher);
+ ResearchLogger.getInstance().initDictionary(
+ mInputLogic.mSuggest.mDictionaryFacilitator);
}
// Register to receive ringer mode change and network state change.
@@ -520,31 +522,15 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// This method is called on startup and language switch, before the new layout has
// been displayed. Opening dictionaries never affects responsivity as dictionaries are
// asynchronously loaded.
- initOrResetSuggestForSettingsValues(mInputLogic.mSuggest, locale, currentSettingsValues);
- }
-
- private void initOrResetSuggestForSettingsValues(final Suggest oldSuggest,
- final Locale locale, final SettingsValues settingsValues) {
- if (!mHandler.hasPendingReopenDictionaries() && oldSuggest != null) {
- // May need to reset dictionaries depending on the user settings.
- final DictionaryFacilitatorForSuggest oldDictionaryFacilitator =
- oldSuggest.mDictionaryFacilitator;
- if (!oldDictionaryFacilitator.needsToBeRecreated(locale, settingsValues)) {
- // Continue to use the same dictionary facilitator if no configuration has changed.
- refreshPersonalizationDictionarySession();
- return;
- }
- final DictionaryFacilitatorForSuggest dictionaryFacilitator =
- new DictionaryFacilitatorForSuggest(settingsValues, oldDictionaryFacilitator);
- // Create Suggest instance with the new dictionary facilitator.
- replaceSuggest(new Suggest(oldSuggest, dictionaryFacilitator));
- } else if (oldSuggest == null) {
- initSuggest();
+ if (!mHandler.hasPendingReopenDictionaries()) {
+ resetSuggestForLocale(locale);
}
+ refreshPersonalizationDictionarySession();
}
private void refreshPersonalizationDictionarySession() {
- final Suggest suggest = mInputLogic.mSuggest;
+ final DictionaryFacilitatorForSuggest dictionaryFacilitator =
+ mInputLogic.mSuggest.mDictionaryFacilitator;
final boolean shouldKeepUserHistoryDictionaries;
final boolean shouldKeepPersonalizationDictionaries;
if (mSettings.getCurrent().mUsePersonalizedDicts) {
@@ -559,17 +545,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
if (!shouldKeepUserHistoryDictionaries) {
// Remove user history dictionaries.
PersonalizationHelper.removeAllUserHistoryDictionaries(this);
- if (suggest != null) {
- suggest.mDictionaryFacilitator.clearUserHistoryDictionary();
- }
+ dictionaryFacilitator.clearUserHistoryDictionary();
}
if (!shouldKeepPersonalizationDictionaries) {
// Remove personalization dictionaries.
PersonalizationHelper.removeAllPersonalizationDictionaries(this);
PersonalizationDictionarySessionRegistrar.resetAll(this);
} else {
- final DictionaryFacilitatorForSuggest dictionaryFacilitator =
- (suggest == null) ? null : suggest.mDictionaryFacilitator;
PersonalizationDictionarySessionRegistrar.init(this, dictionaryFacilitator);
}
}
@@ -583,7 +565,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
}
- private void initSuggest() {
+ private void resetSuggest() {
final Locale switcherSubtypeLocale = mSubtypeSwitcher.getCurrentSubtypeLocale();
final String switcherLocaleStr = switcherSubtypeLocale.toString();
final Locale subtypeLocale;
@@ -599,47 +581,42 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
} else {
subtypeLocale = switcherSubtypeLocale;
}
- initSuggestForLocale(mInputLogic.mSuggest, subtypeLocale);
+ resetSuggestForLocale(subtypeLocale);
}
- private void initSuggestForLocale(final Suggest oldSuggest, final Locale locale) {
- final SettingsValues settingsValues = mSettings.getCurrent();
- final DictionaryFacilitatorForSuggest oldDictionaryFacilitator =
- (oldSuggest == null) ? null : oldSuggest.mDictionaryFacilitator;
- // Creates new dictionary facilitator for the new locale.
+ /**
+ * Reset suggest by loading dictionaries for the locale and the current settings values.
+ *
+ * @param locale the locale
+ */
+ private void resetSuggestForLocale(final Locale locale) {
final DictionaryFacilitatorForSuggest dictionaryFacilitator =
- new DictionaryFacilitatorForSuggest(this /* context */, locale, settingsValues,
- this /* DictionaryInitializationListener */, oldDictionaryFacilitator);
- final Suggest newSuggest = new Suggest(locale, dictionaryFacilitator);
+ mInputLogic.mSuggest.mDictionaryFacilitator;
+ final SettingsValues settingsValues = mSettings.getCurrent();
+ dictionaryFacilitator.resetDictionaries(this /* context */, locale,
+ settingsValues.mUseContactsDict, settingsValues.mUsePersonalizedDicts,
+ false /* forceReloadMainDictionary */, this);
if (settingsValues.mCorrectionEnabled) {
- newSuggest.setAutoCorrectionThreshold(settingsValues.mAutoCorrectionThreshold);
+ mInputLogic.mSuggest.setAutoCorrectionThreshold(
+ settingsValues.mAutoCorrectionThreshold);
}
- replaceSuggest(newSuggest);
}
+ /**
+ * Reset suggest by loading the main dictionary of the current locale.
+ */
/* package private */ void resetSuggestMainDict() {
- final DictionaryFacilitatorForSuggest oldDictionaryFacilitator =
- mInputLogic.mSuggest.mDictionaryFacilitator;
final DictionaryFacilitatorForSuggest dictionaryFacilitator =
- new DictionaryFacilitatorForSuggest(this /* listener */, oldDictionaryFacilitator);
- replaceSuggest(new Suggest(mInputLogic.mSuggest /* oldSuggest */, dictionaryFacilitator));
- }
-
- private void replaceSuggest(final Suggest newSuggest) {
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.getInstance().initDictionary(newSuggest.mDictionaryFacilitator);
- }
- mInputLogic.replaceSuggest(newSuggest);
- refreshPersonalizationDictionarySession();
+ mInputLogic.mSuggest.mDictionaryFacilitator;
+ final SettingsValues settingsValues = mSettings.getCurrent();
+ dictionaryFacilitator.resetDictionaries(this /* context */,
+ dictionaryFacilitator.getLocale(), settingsValues.mUseContactsDict,
+ settingsValues.mUsePersonalizedDicts, true /* forceReloadMainDictionary */, this);
}
@Override
public void onDestroy() {
- final Suggest suggest = mInputLogic.mSuggest;
- if (suggest != null) {
- suggest.close();
- mInputLogic.mSuggest = null;
- }
+ mInputLogic.mSuggest.mDictionaryFacilitator.closeDictionaries();
mSettings.onDestroy();
unregisterReceiver(mReceiver);
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
@@ -802,10 +779,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// Note: the following does a round-trip IPC on the main thread: be careful
final Locale currentLocale = mSubtypeSwitcher.getCurrentSubtypeLocale();
- Suggest suggest = mInputLogic.mSuggest;
- if (null != suggest && null != currentLocale && !currentLocale.equals(suggest.mLocale)) {
- initSuggest();
- suggest = mInputLogic.mSuggest;
+ final Suggest suggest = mInputLogic.mSuggest;
+ if (null != currentLocale && !currentLocale.equals(suggest.getLocale())) {
+ // TODO: Do this automatically.
+ resetSuggest();
}
// TODO[IL]: Can the following be moved to InputLogic#startInput?
@@ -833,13 +810,12 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
if (isDifferentTextField ||
!currentSettingsValues.hasSameOrientation(getResources().getConfiguration())) {
loadSettings();
- suggest = mInputLogic.mSuggest;
}
if (isDifferentTextField) {
mainKeyboardView.closing();
currentSettingsValues = mSettings.getCurrent();
- if (suggest != null && currentSettingsValues.mCorrectionEnabled) {
+ if (currentSettingsValues.mCorrectionEnabled) {
suggest.setAutoCorrectionThreshold(currentSettingsValues.mAutoCorrectionThreshold);
}
@@ -865,8 +841,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
mHandler.cancelUpdateSuggestionStrip();
- mainKeyboardView.setMainDictionaryAvailability(null != suggest
- ? suggest.mDictionaryFacilitator.hasMainDictionary() : false);
+ mainKeyboardView.setMainDictionaryAvailability(
+ suggest.mDictionaryFacilitator.hasInitializedMainDictionary());
mainKeyboardView.setKeyPreviewPopupEnabled(currentSettingsValues.mKeyPreviewPopupOn,
currentSettingsValues.mKeyPreviewPopupDismissDelay);
mainKeyboardView.setSlidingKeyInputPreviewEnabled(
@@ -1407,8 +1383,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
public void getSuggestedWords(final int sessionId, final int sequenceNumber,
final OnGetSuggestedWordsCallback callback) {
final Keyboard keyboard = mKeyboardSwitcher.getKeyboard();
- final Suggest suggest = mInputLogic.mSuggest;
- if (keyboard == null || suggest == null) {
+ if (keyboard == null) {
callback.onGetSuggestedWords(SuggestedWords.EMPTY);
return;
}
@@ -1437,7 +1412,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
}
}
- suggest.getSuggestedWords(mInputLogic.mWordComposer,
+ mInputLogic.mSuggest.getSuggestedWords(mInputLogic.mWordComposer,
mInputLogic.mWordComposer.getPreviousWordForSuggestion(),
keyboard.getProximityInfo(), currentSettings.mBlockPotentiallyOffensive,
currentSettings.mCorrectionEnabled, additionalFeaturesOptions, sessionId,
@@ -1722,12 +1697,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// DO NOT USE THIS for any other purpose than testing. This can break the keyboard badly.
@UsedForTesting
/* package for test */ void replaceDictionariesForTest(final Locale locale) {
- final DictionaryFacilitatorForSuggest oldDictionaryFacilitator =
- mInputLogic.mSuggest.mDictionaryFacilitator;
- final DictionaryFacilitatorForSuggest dictionaryFacilitator =
- new DictionaryFacilitatorForSuggest(this, locale, mSettings.getCurrent(),
- this /* listener */, oldDictionaryFacilitator);
- replaceSuggest(new Suggest(locale, dictionaryFacilitator));
+ final SettingsValues settingsValues = mSettings.getCurrent();
+ mInputLogic.mSuggest.mDictionaryFacilitator.resetDictionaries(this, locale,
+ settingsValues.mUseContactsDict, settingsValues.mUsePersonalizedDicts,
+ false /* forceReloadMainDictionary */, this /* listener */);
}
// DO NOT USE THIS for any other purpose than testing.
@@ -1738,8 +1711,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
public void dumpDictionaryForDebug(final String dictName) {
- if (mInputLogic.mSuggest == null) {
- initSuggest();
+ final DictionaryFacilitatorForSuggest dictionaryFacilitator =
+ mInputLogic.mSuggest.mDictionaryFacilitator;
+ if (dictionaryFacilitator.getLocale() == null) {
+ resetSuggest();
}
mInputLogic.mSuggest.mDictionaryFacilitator.dumpDictionaryForDebug(dictName);
}