Merge "[HW14] Cleanup" into lmp-dev
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 3a5f85d..4adc28d 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -752,8 +752,30 @@
         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 @@
         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 @@
             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 @@
             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(