From 6b7100fecaaaf0e8e42c4d2ccebac165e89e79bf Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Wed, 7 Dec 2011 21:27:59 +0900 Subject: [PATCH] Don't execute pending onStartInputView if EditorInfos are equivalent Bug: 5722732 Bug: 5722867 Change-Id: I8347c258b286c3329f318d50adf205e78e49c722 --- .../inputmethod/keyboard/KeyboardId.java | 9 ++++++ .../keyboard/KeyboardSwitcher.java | 30 ++++++++----------- .../android/inputmethod/latin/LatinIME.java | 4 ++- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardId.java b/java/src/com/android/inputmethod/keyboard/KeyboardId.java index 840857778..ecc821a4b 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardId.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardId.java @@ -16,6 +16,7 @@ package com.android.inputmethod.keyboard; +import android.text.TextUtils; import android.view.inputmethod.EditorInfo; import com.android.inputmethod.compat.EditorInfoCompatUtils; @@ -177,6 +178,14 @@ public class KeyboardId { ); } + public static boolean equivalentEditorInfoForKeyboard(EditorInfo a, EditorInfo b) { + if (a == null && b == null) return true; + if (a == null || b == null) return false; + return a.inputType == b.inputType + && a.imeOptions == b.imeOptions + && TextUtils.equals(a.privateImeOptions, b.privateImeOptions); + } + public static String modeName(int mode) { switch (mode) { case MODE_TEXT: return "text"; diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java index e8d11b0f4..50d963c07 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java @@ -125,23 +125,9 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha mIsValid = true; } - public void restore(boolean forceRestore) { - if (!mIsValid) { - if (forceRestore) { - setAlphabetKeyboard(); - } - return; - } - mIsValid = false; - - if (mIsAlphabetMode) { + public void restore() { + if (!mIsValid || mIsAlphabetMode) { setAlphabetKeyboard(); - if (mIsShiftLocked) { - setShiftLocked(true); - } - if (mIsShifted) { - setShifted(MANUAL_SHIFT); - } } else { if (mIsShifted) { setSymbolsShiftedKeyboard(); @@ -149,6 +135,16 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha setSymbolsKeyboard(); } } + + if (!mIsValid) return; + mIsValid = false; + + if (mIsAlphabetMode) { + setShiftLocked(mIsShiftLocked); + if (!mIsShiftLocked) { + setShifted(mIsShifted ? MANUAL_SHIFT : UNSHIFT); + } + } } } @@ -204,7 +200,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha mSymbolsShiftedKeyboardId = getKeyboardId(editorInfo, true, true, settingsValues); mState.onLoadKeyboard(); mLayoutSwitchBackSymbols = mResources.getString(R.string.layout_switch_back_symbols); - mSavedKeyboardState.restore(mCurrentId == null); + mSavedKeyboardState.restore(); } catch (RuntimeException e) { Log.w(TAG, "loading keyboard failed: " + mMainKeyboardId, e); LatinImeLogger.logOnException(mMainKeyboardId.toString(), e); diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 5f446a5c4..c2656b891 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -62,6 +62,7 @@ import com.android.inputmethod.deprecated.VoiceProxy; import com.android.inputmethod.keyboard.Key; import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.keyboard.KeyboardActionListener; +import com.android.inputmethod.keyboard.KeyboardId; import com.android.inputmethod.keyboard.KeyboardSwitcher; import com.android.inputmethod.keyboard.KeyboardView; import com.android.inputmethod.keyboard.LatinKeyboard; @@ -442,7 +443,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar } public void onStartInputView(EditorInfo editorInfo, boolean restarting) { - if (hasMessages(MSG_PENDING_IMS_CALLBACK) && editorInfo == mAppliedEditorInfo) { + if (hasMessages(MSG_PENDING_IMS_CALLBACK) + && KeyboardId.equivalentEditorInfoForKeyboard(editorInfo, mAppliedEditorInfo)) { // Typically this is the second onStartInputView after orientation changed. resetPendingImsCallback(); } else {