Request update shift state after shift-chording input
Bug: 7529860
Change-Id: Iec82459348722be358ae2ded15deafac21749dcd
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
index 5e111fb..631e647 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
@@ -487,6 +487,11 @@
// After chording input while normal state.
setShifted(UNSHIFT);
}
+ // After chording input, automatic shift state may have been changed depending on
+ // what characters were input.
+ mShiftKeyState.onRelease();
+ mSwitchActions.requestUpdatingShiftState();
+ return;
} else if (mAlphabetShiftState.isShiftLockShifted() && withSliding) {
// In shift locked state, shift has been pressed and slid out to other key.
setShiftLocked(true);
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
index f5ad723..053bcb5 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
@@ -50,7 +50,7 @@
pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
// Press/release symbol letter key.
chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
- // Release "123?" key, switch back to alphabet shift unshifted.
+ // Release "123?" key, switch back to alphabet unshifted.
releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
}
@@ -330,7 +330,7 @@
releaseKey('X', ALPHABET_MANUAL_SHIFTED);
// Release 'Z' key
releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
- // Release shift key.
+ // Release shift key, switch back to alphabet shifted.
releaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
}
@@ -351,8 +351,24 @@
releaseKey('X', ALPHABET_MANUAL_SHIFTED);
// Release 'Z' key
releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
- // Release shift key.
+ // Release shift key, updated to alphabet unshifted.
releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
+
+ // Update shift state with auto caps enabled.
+ pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Press shift key and hold, switch to alphabet shifted.
+ pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+ // Press 'X' key and hold
+ chordingPressKey('X', ALPHABET_MANUAL_SHIFTED);
+ // Release 'X' key
+ releaseKey('X', ALPHABET_MANUAL_SHIFTED);
+ // Press key and hold, stays in alphabet shifted.
+ chordingPressKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_MANUAL_SHIFTED);
+ // Release 'Z' key
+ releaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_MANUAL_SHIFTED);
+ // Release shift key, updated to alphabet automatic shifted.
+ releaseKey(CODE_SHIFT, ALPHABET_AUTOMATIC_SHIFTED);
}
// Multi touch shift chording input in capitalize character mode.
@@ -372,8 +388,8 @@
releaseKey('X', ALPHABET_MANUAL_SHIFTED);
// Release 'Z' key
releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
- // Release shift key.
- releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
+ // Release shift key, updated to alphabet automatic shifted.
+ releaseKey(CODE_SHIFT, ALPHABET_AUTOMATIC_SHIFTED);
}
public void testLongPressShiftAndChording() {