From e9926b0d11d481c6534c059384c9a5a858ebdaae Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Thu, 27 Feb 2014 22:31:57 +0900 Subject: [PATCH 1/2] Remove redundant creation of dictionary facilitator. Change-Id: I2edab4e3ba4ea0b9b13f9bb224aac86cac9b9f31 --- .../DictionaryFacilitatorForSuggest.java | 10 ++++ .../android/inputmethod/latin/LatinIME.java | 50 ++++++++++--------- .../android/inputmethod/latin/Suggest.java | 1 + 3 files changed, 38 insertions(+), 23 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java index e767e4be9..26d5dda4e 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java +++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java @@ -186,6 +186,16 @@ public class DictionaryFacilitatorForSuggest { } } + public boolean needsToBeRecreated(final Locale newLocale, + final SettingsValues newSettingsValues) { + return !mLocale.equals(newLocale) + || (newSettingsValues.mUseContactsDict != (mContactsDictionary != null)) + || (newSettingsValues.mUsePersonalizedDicts != (mUserHistoryDictionary != null)) + || (newSettingsValues.mUsePersonalizedDicts != hasPersonalizationDictionary()) + || (newSettingsValues.mUseOnlyPersonalizationDictionaryForDebug + != (mDictionarySubsetForDebug != null)); + } + // initialize a debug flag for the personalization private void initForDebug(final SettingsValues settingsValues) { if (settingsValues.mUseOnlyPersonalizationDictionaryForDebug) { diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 44282a492..793c1c4ac 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -508,27 +508,31 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen final EditorInfo editorInfo = getCurrentInputEditorInfo(); final InputAttributes inputAttributes = new InputAttributes(editorInfo, isFullscreenMode()); mSettings.loadSettings(this, locale, inputAttributes); - AudioAndHapticFeedbackManager.getInstance().onSettingsChanged(mSettings.getCurrent()); - // To load the keyboard we need to load all the settings once, but resetting the - // contacts dictionary should be deferred until after the new layout has been displayed - // to improve responsivity. In the language switching process, we post a reopenDictionaries - // message, then come here to read the settings for the new language before we change - // the layout; at this time, we need to skip resetting the contacts dictionary. It will - // be done later inside {@see #initSuggest()} when the reopenDictionaries message is - // processed. final SettingsValues currentSettingsValues = mSettings.getCurrent(); - final Suggest suggest = mInputLogic.mSuggest; - if (!mHandler.hasPendingReopenDictionaries() && suggest != null) { + AudioAndHapticFeedbackManager.getInstance().onSettingsChanged(currentSettingsValues); + // 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 = - suggest.mDictionaryFacilitator; + 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(currentSettingsValues, - oldDictionaryFacilitator); + new DictionaryFacilitatorForSuggest(settingsValues, oldDictionaryFacilitator); // Create Suggest instance with the new dictionary facilitator. - resetSuggest(new Suggest(suggest /* oldSuggest */, dictionaryFacilitator)); - } else if (suggest == null) { - initSuggestForLocale(locale); + replaceSuggest(new Suggest(oldSuggest, dictionaryFacilitator)); + } else if (oldSuggest == null) { + initSuggestForLocale(oldSuggest, locale); } } @@ -588,13 +592,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } else { subtypeLocale = switcherSubtypeLocale; } - initSuggestForLocale(subtypeLocale); + initSuggestForLocale(mInputLogic.mSuggest, subtypeLocale); } - private void initSuggestForLocale(final Locale locale) { + private void initSuggestForLocale(final Suggest oldSuggest, final Locale locale) { final SettingsValues settingsValues = mSettings.getCurrent(); final DictionaryFacilitatorForSuggest oldDictionaryFacilitator = - (mInputLogic.mSuggest == null) ? null : mInputLogic.mSuggest.mDictionaryFacilitator; + (oldSuggest == null) ? null : oldSuggest.mDictionaryFacilitator; // Creates new dictionary facilitator for the new locale. final DictionaryFacilitatorForSuggest dictionaryFacilitator = new DictionaryFacilitatorForSuggest(this /* context */, locale, settingsValues, @@ -603,7 +607,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen if (settingsValues.mCorrectionEnabled) { newSuggest.setAutoCorrectionThreshold(settingsValues.mAutoCorrectionThreshold); } - resetSuggest(newSuggest); + replaceSuggest(newSuggest); } /* package private */ void resetSuggestMainDict() { @@ -611,10 +615,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen mInputLogic.mSuggest.mDictionaryFacilitator; final DictionaryFacilitatorForSuggest dictionaryFacilitator = new DictionaryFacilitatorForSuggest(this /* listener */, oldDictionaryFacilitator); - resetSuggest(new Suggest(mInputLogic.mSuggest /* oldSuggest */, dictionaryFacilitator)); + replaceSuggest(new Suggest(mInputLogic.mSuggest /* oldSuggest */, dictionaryFacilitator)); } - private void resetSuggest(final Suggest newSuggest) { + private void replaceSuggest(final Suggest newSuggest) { if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) { ResearchLogger.getInstance().initDictionary(newSuggest.mDictionaryFacilitator); } @@ -1719,7 +1723,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen final DictionaryFacilitatorForSuggest dictionaryFacilitator = new DictionaryFacilitatorForSuggest(this, locale, mSettings.getCurrent(), this /* listener */, oldDictionaryFacilitator); - resetSuggest(new Suggest(locale, dictionaryFacilitator)); + replaceSuggest(new Suggest(locale, dictionaryFacilitator)); } // DO NOT USE THIS for any other purpose than testing. diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java index abf831a28..499a98d65 100644 --- a/java/src/com/android/inputmethod/latin/Suggest.java +++ b/java/src/com/android/inputmethod/latin/Suggest.java @@ -59,6 +59,7 @@ public final class Suggest { // Locale used for upper- and title-casing words public final Locale mLocale; + // TODO: Move dictionaryFacilitator constructing logics from LatinIME to Suggest. public Suggest(final Locale locale, final DictionaryFacilitatorForSuggest dictionaryFacilitator) { mLocale = locale; From 1aac28a2b9e1013970e737639872ffb9cd7b26b0 Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Thu, 27 Feb 2014 16:49:25 +0900 Subject: [PATCH 2/2] Remove "Use only personalization dictionary". Bug: 13216198 Change-Id: I20ce61c4a10c360e028bf6427f632cc5299763e4 --- java/res/values/strings.xml | 2 -- java/res/xml/prefs_for_debug.xml | 5 ----- .../DictionaryFacilitatorForSuggest.java | 20 +------------------ .../latin/settings/DebugSettings.java | 2 -- .../latin/settings/SettingsValues.java | 5 ----- 5 files changed, 1 insertion(+), 33 deletions(-) diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml index ddff7697c..5efa73362 100644 --- a/java/res/values/strings.xml +++ b/java/res/values/strings.xml @@ -491,8 +491,6 @@ mobile devices. [CHAR LIMIT=25] --> Key popup dismiss end scale Read external dictionary file - - Use only personalization dictionary No dictionary files in the Downloads folder diff --git a/java/res/xml/prefs_for_debug.xml b/java/res/xml/prefs_for_debug.xml index 81a5d98b9..7b2b8eab4 100644 --- a/java/res/xml/prefs_for_debug.xml +++ b/java/res/xml/prefs_for_debug.xml @@ -65,11 +65,6 @@ android:key="pref_key_preview_dismiss_duration" android:title="@string/prefs_key_popup_dismiss_duration_settings" latin:maxValue="100" /> - diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java index 26d5dda4e..14e1baf41 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java +++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java @@ -53,7 +53,6 @@ public class DictionaryFacilitatorForSuggest { private final ConcurrentHashMap mDictionaries = CollectionUtils.newConcurrentHashMap(); - private HashSet mDictionarySubsetForDebug = null; private Dictionary mMainDictionary; private ContactsBinaryDictionary mContactsDictionary; @@ -83,7 +82,6 @@ public class DictionaryFacilitatorForSuggest { mContext = context; mLocale = locale; mLatchForWaitingLoadingMainDictionary = new CountDownLatch(1); - initForDebug(settingsValues); loadMainDict(context, locale, listener); setUserDictionary(new UserBinaryDictionary(context, locale)); resetAdditionalDictionaries(oldDictionaryFacilitator, settingsValues); @@ -99,7 +97,6 @@ public class DictionaryFacilitatorForSuggest { final DictionaryFacilitatorForSuggest oldDictionaryFacilitator) { mContext = oldDictionaryFacilitator.mContext; mLocale = oldDictionaryFacilitator.mLocale; - mDictionarySubsetForDebug = oldDictionaryFacilitator.mDictionarySubsetForDebug; mLatchForWaitingLoadingMainDictionary = new CountDownLatch(1); loadMainDict(mContext, mLocale, listener); // Transfer user dictionary. @@ -128,7 +125,6 @@ public class DictionaryFacilitatorForSuggest { mContext = oldDictionaryFacilitator.mContext; mLocale = oldDictionaryFacilitator.mLocale; mLatchForWaitingLoadingMainDictionary = new CountDownLatch(0); - initForDebug(settingsValues); // Transfer main dictionary. setMainDictionary(oldDictionaryFacilitator.mMainDictionary); oldDictionaryFacilitator.removeDictionary(Dictionary.TYPE_MAIN); @@ -191,17 +187,7 @@ public class DictionaryFacilitatorForSuggest { return !mLocale.equals(newLocale) || (newSettingsValues.mUseContactsDict != (mContactsDictionary != null)) || (newSettingsValues.mUsePersonalizedDicts != (mUserHistoryDictionary != null)) - || (newSettingsValues.mUsePersonalizedDicts != hasPersonalizationDictionary()) - || (newSettingsValues.mUseOnlyPersonalizationDictionaryForDebug - != (mDictionarySubsetForDebug != null)); - } - - // initialize a debug flag for the personalization - private void initForDebug(final SettingsValues settingsValues) { - if (settingsValues.mUseOnlyPersonalizationDictionaryForDebug) { - mDictionarySubsetForDebug = new HashSet(); - mDictionarySubsetForDebug.add(Dictionary.TYPE_PERSONALIZATION); - } + || (newSettingsValues.mUsePersonalizedDicts != hasPersonalizationDictionary()); } public void close() { @@ -531,10 +517,6 @@ public class DictionaryFacilitatorForSuggest { } private void addOrReplaceDictionary(final String key, final Dictionary dict) { - if (mDictionarySubsetForDebug != null && !mDictionarySubsetForDebug.contains(key)) { - Log.w(TAG, "Ignore add " + key + " dictionary for debug."); - return; - } final Dictionary oldDict; if (dict == null) { oldDict = mDictionaries.remove(key); diff --git a/java/src/com/android/inputmethod/latin/settings/DebugSettings.java b/java/src/com/android/inputmethod/latin/settings/DebugSettings.java index c87dd1589..11d369282 100644 --- a/java/src/com/android/inputmethod/latin/settings/DebugSettings.java +++ b/java/src/com/android/inputmethod/latin/settings/DebugSettings.java @@ -42,8 +42,6 @@ public final class DebugSettings extends PreferenceFragment public static final String PREF_FORCE_NON_DISTINCT_MULTITOUCH = "force_non_distinct_multitouch"; public static final String PREF_USABILITY_STUDY_MODE = "usability_study_mode"; public static final String PREF_STATISTICS_LOGGING = "enable_logging"; - public static final String PREF_USE_ONLY_PERSONALIZATION_DICTIONARY_FOR_DEBUG = - "use_only_personalization_dictionary_for_debug"; public static final String PREF_KEY_PREVIEW_SHOW_UP_START_SCALE = "pref_key_preview_show_up_start_scale"; public static final String PREF_KEY_PREVIEW_DISMISS_END_SCALE = diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java index 77968f79a..50fbbb19f 100644 --- a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java +++ b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java @@ -84,7 +84,6 @@ public final class SettingsValues { public final float mAutoCorrectionThreshold; public final boolean mCorrectionEnabled; public final int mSuggestionVisibility; - public final boolean mUseOnlyPersonalizationDictionaryForDebug; public final int mDisplayOrientation; private final AsyncResultHolder mAppWorkarounds; @@ -168,8 +167,6 @@ public final class SettingsValues { prefs, DebugSettings.PREF_KEY_PREVIEW_DISMISS_END_SCALE, ResourceUtils.getFloatFromFraction( res, R.fraction.config_key_preview_dismiss_end_scale)); - mUseOnlyPersonalizationDictionaryForDebug = prefs.getBoolean( - DebugSettings.PREF_USE_ONLY_PERSONALIZATION_DICTIONARY_FOR_DEBUG, false); mDisplayOrientation = res.getConfiguration().orientation; mAppWorkarounds = new AsyncResultHolder(); final PackageInfo packageInfo = TargetPackageInfoGetterTask.getCachedPackageInfo( @@ -390,8 +387,6 @@ public final class SettingsValues { sb.append("" + mCorrectionEnabled); sb.append("\n mSuggestionVisibility = "); sb.append("" + mSuggestionVisibility); - sb.append("\n mUseOnlyPersonalizationDictionaryForDebug = "); - sb.append("" + mUseOnlyPersonalizationDictionaryForDebug); sb.append("\n mDisplayOrientation = "); sb.append("" + mDisplayOrientation); sb.append("\n mAppWorkarounds = ");