From f1accd4f04b13f764e1ffa7c7964e4b7c41ddf4b Mon Sep 17 00:00:00 2001 From: Jean Chalard Date: Mon, 4 Aug 2014 19:27:05 +0900 Subject: [PATCH] [HS1] Save some data in startInputView Bug: 8152758 Change-Id: Ic57d3918b08e775769d4ba5d73ba5c31231e0d6a --- .../android/inputmethod/latin/LatinIME.java | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 719aeac77..373601b52 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -752,8 +752,30 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen loadKeyboard(); } + /** + * A class that holds information to pass from onStartInputInternal to onStartInputViewInternal + * + * OnStartInput needs to reload the settings and that will prevent onStartInputViewInternal + * from comparing the old settings with the new ones, so we use this memory to pass the + * necessary information along. + */ + private static class EditorChangeInfo { + public final boolean mIsSameInputType; + public final boolean mHasSameOrientation; + public EditorChangeInfo(final boolean isSameInputType, final boolean hasSameOrientation) { + mIsSameInputType = isSameInputType; + mHasSameOrientation = hasSameOrientation; + } + } + + private EditorChangeInfo mLastEditorChangeInfo; + private void onStartInputInternal(final EditorInfo editorInfo, final boolean restarting) { super.onStartInput(editorInfo, restarting); + SettingsValues currentSettingsValues = mSettings.getCurrent(); + mLastEditorChangeInfo = new EditorChangeInfo( + currentSettingsValues.isSameInputType(editorInfo), + currentSettingsValues.hasSameOrientation(getResources().getConfiguration())); } @SuppressWarnings("deprecation") @@ -763,9 +785,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen final KeyboardSwitcher switcher = mKeyboardSwitcher; switcher.updateKeyboardTheme(); final MainKeyboardView mainKeyboardView = switcher.getMainKeyboardView(); - // If we are starting input in a different text field from before, we'll have to reload - // settings, so currentSettingsValues can't be final. - SettingsValues currentSettingsValues = mSettings.getCurrent(); if (editorInfo == null) { Log.e(TAG, "Null EditorInfo in onStartInputView()"); @@ -808,7 +827,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen accessUtils.onStartInputViewInternal(mainKeyboardView, editorInfo, restarting); } - final boolean inputTypeChanged = !currentSettingsValues.isSameInputType(editorInfo); + final boolean inputTypeChanged = !mLastEditorChangeInfo.mIsSameInputType; final boolean isDifferentTextField = !restarting || inputTypeChanged; if (isDifferentTextField) { mSubtypeSwitcher.updateParametersOnStartInputView(); @@ -853,13 +872,12 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen canReachInputConnection = true; } - if (isDifferentTextField || - !currentSettingsValues.hasSameOrientation(getResources().getConfiguration())) { + if (isDifferentTextField || !mLastEditorChangeInfo.mHasSameOrientation) { loadSettings(); } + final SettingsValues currentSettingsValues = mSettings.getCurrent(); if (isDifferentTextField) { mainKeyboardView.closing(); - currentSettingsValues = mSettings.getCurrent(); if (currentSettingsValues.mAutoCorrectionEnabledPerUserSettings) { suggest.setAutoCorrectionThreshold(