From 5d2556b93286f5f1d7d829b586b84a8b7ae55743 Mon Sep 17 00:00:00 2001 From: Ken Wakasa Date: Tue, 6 Nov 2012 16:45:44 +0900 Subject: [PATCH] Reset the IME if requested by the app. Specifically, reset the KeyboardState to the main Alphabet layout in LatinIME.onStartInputViewInternal() if a keyboard layout set doesn't get reloaded in the method. Please note TextView.setText() calls up resetInput(), then the IME should reset with it. bug: 7482086 Note that bug: 6851364 needs to be revisited. Change-Id: I5d448c10963d3dd952dd13cb587085ec7b014e69 --- .../keyboard/KeyboardSwitcher.java | 6 +++++ .../keyboard/internal/KeyboardState.java | 25 +++++++++++++++++++ .../android/inputmethod/latin/LatinIME.java | 4 +++ 3 files changed, 35 insertions(+) diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java index 38025e8e4..de8097b55 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java @@ -200,6 +200,12 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { mState.onUpdateShiftState(mLatinIME.getCurrentAutoCapsState()); } + // TODO: Remove this method. Come up with a more comprehensive way to reset the keyboard layout + // when a keyboard layout set doesn't get reloaded in LatinIME.onStartInputViewInternal(). + public void resetKeyboardStateToAlphabet() { + mState.onResetKeyboardStateToAlphabet(); + } + public void onPressKey(int code) { if (isVibrateAndSoundFeedbackRequired()) { mLatinIME.hapticAndAudioFeedback(code); diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java index 58cc8972a..5e111fb9a 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java @@ -254,6 +254,22 @@ public final class KeyboardState { } } + // TODO: Remove this method. Come up with a more comprehensive way to reset the keyboard layout + // when a keyboard layout set doesn't get reloaded in LatinIME.onStartInputViewInternal(). + private void resetKeyboardStateToAlphabet() { + if (DEBUG_ACTION) { + Log.d(TAG, "resetKeyboardStateToAlphabet: " + this); + } + if (mIsAlphabetMode) return; + + mPrevSymbolsKeyboardWasShifted = mIsSymbolShifted; + setAlphabetKeyboard(); + if (mPrevMainKeyboardWasShiftLocked) { + setShiftLocked(true); + } + mPrevMainKeyboardWasShiftLocked = false; + } + private void toggleShiftInSymbols() { if (mIsSymbolShifted) { setSymbolsKeyboard(); @@ -380,6 +396,15 @@ public final class KeyboardState { updateAlphabetShiftState(autoCaps); } + // TODO: Remove this method. Come up with a more comprehensive way to reset the keyboard layout + // when a keyboard layout set doesn't get reloaded in LatinIME.onStartInputViewInternal(). + public void onResetKeyboardStateToAlphabet() { + if (DEBUG_EVENT) { + Log.d(TAG, "onResetKeyboardStateToAlphabet: " + this); + } + resetKeyboardStateToAlphabet(); + } + private void updateAlphabetShiftState(int autoCaps) { if (!mIsAlphabetMode) return; if (!mShiftKeyState.isReleasing()) { diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 8ac0cd4ca..cf7eea70b 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -732,6 +732,10 @@ public final class LatinIME extends InputMethodService implements KeyboardAction } switcher.loadKeyboard(editorInfo, mCurrentSettings); + } else if (restarting) { + // TODO: Come up with a more comprehensive way to reset the keyboard layout when + // a keyboard layout set doesn't get reloaded in this method. + switcher.resetKeyboardStateToAlphabet(); } setSuggestionStripShownInternal( isSuggestionsStripVisible(), /* needsInputViewShown */ false);