From f735117d36237f08fd7512789f922f18c6b1aa53 Mon Sep 17 00:00:00 2001 From: Jean Chalard Date: Wed, 2 Oct 2013 15:58:21 +0900 Subject: [PATCH] Fix a pernicious bug with caps. What's happening here is, setAlphabetKeyboard sets the keyboard to AUTOMATIC_SHIFTED and updates the keyboard, then restoring the keyboard old state sets it back to UNSHIFTED without updating it. When we finally know what the correct value is, we try to set it to UNSHIFTED, but since that's already the currently recorded state, it skips updating the keyboard forever. The solution is to avoid setting the shift state without updating the keyboard. Bug: 10948582 Change-Id: Ic8670401e378f8284e851281f91a9ad93eac8e90 --- .../android/inputmethod/keyboard/internal/KeyboardState.java | 2 ++ java/src/com/android/inputmethod/latin/LatinIME.java | 1 + 2 files changed, 3 insertions(+) diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java index 9f9fdaa6f..506dfa751 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java @@ -178,6 +178,8 @@ public final class KeyboardState { if (!state.mIsAlphabetShiftLocked) { setShifted(state.mShiftMode); } + // TODO: is this the right place to do this? Should we do this in setShift* instead? + mSwitchActions.requestUpdatingShiftState(); } else { mPrevMainKeyboardWasShiftLocked = state.mIsAlphabetShiftLocked; } diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 96e16de0d..003dcfb5c 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -2929,6 +2929,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen return; } tryFixLyingCursorPosition(); + mKeyboardSwitcher.updateShiftState(); if (tryResumeSuggestions) mHandler.postResumeSuggestions(); }