Add KeyboardState.SwitchActions.setAlphabetShiftLockShifted

Change-Id: I6c49d8eb0a8272840ff03e0940d88a31c3d20bd9
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index 1398bae..5a59cc1 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -240,6 +240,7 @@
     private static final int ALPHABET_MANUAL_SHIFTED = 1;
     private static final int ALPHABET_AUTOMATIC_SHIFTED = 2;
     private static final int ALPHABET_SHIFT_LOCKED = 3;
+    private static final int ALPHABET_SHIFT_LOCK_SHIFTED = 4;
 
     // TODO: Remove this method.
     private void updateAlphabetKeyboardShiftState(int shiftMode) {
@@ -260,6 +261,10 @@
         case ALPHABET_SHIFT_LOCKED:
             keyboard.setShiftLocked(true);
             break;
+        case ALPHABET_SHIFT_LOCK_SHIFTED:
+            keyboard.setShiftLocked(true);
+            keyboard.setShifted(true);
+            break;
         }
         mKeyboardView.invalidateAllKeys();
         if (shiftMode != ALPHABET_SHIFT_LOCKED) {
@@ -300,6 +305,13 @@
 
     // Implements {@link KeyboardState.SwitchActions}.
     @Override
+    public void setAlphabetShiftLockShiftedKeyboard() {
+        setKeyboard(mKeyboardSet.getMainKeyboard());
+        updateAlphabetKeyboardShiftState(ALPHABET_SHIFT_LOCK_SHIFTED);
+    }
+
+    // Implements {@link KeyboardState.SwitchActions}.
+    @Override
     public void setSymbolsKeyboard() {
         setKeyboard(mKeyboardSet.getSymbolsKeyboard());
     }
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
index 38c31ad..a89356c 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
@@ -43,8 +43,7 @@
         public void setAlphabetManualShiftedKeyboard();
         public void setAlphabetAutomaticShiftedKeyboard();
         public void setAlphabetShiftLockedKeyboard();
-        // TODO: Add this.
-        //public void setAlphabetShiftLockShiftedKeyboard();
+        public void setAlphabetShiftLockShiftedKeyboard();
         public void setSymbolsKeyboard();
         public void setSymbolsShiftedKeyboard();
 
@@ -157,14 +156,10 @@
         }
     }
 
-    // TODO: Remove this method.
-    public boolean isShiftLocked() {
-        return mAlphabetShiftState.isShiftLocked();
-    }
-
     private static final int UNSHIFT = 0;
     private static final int MANUAL_SHIFT = 1;
     private static final int AUTOMATIC_SHIFT = 2;
+    private static final int SHIFT_LOCK_SHIFTED = 3;
 
     private void setShifted(int shiftMode) {
         if (DEBUG_ACTION) {
@@ -198,6 +193,10 @@
                 mSwitchActions.setAlphabetKeyboard();
             }
             break;
+        case SHIFT_LOCK_SHIFTED:
+            mAlphabetShiftState.setShifted(true);
+            mSwitchActions.setAlphabetShiftLockShiftedKeyboard();
+            break;
         }
     }
 
@@ -349,7 +348,7 @@
             if (mAlphabetShiftState.isShiftLocked()) {
                 // Shift key is pressed while caps lock state, we will treat this state as shifted
                 // caps lock state and mark as if shift key pressed while normal state.
-                setShifted(MANUAL_SHIFT);
+                setShifted(SHIFT_LOCK_SHIFTED);
                 mShiftKeyState.onPress();
             } else if (mAlphabetShiftState.isAutomaticTemporaryUpperCase()) {
                 // Shift key is pressed while automatic temporary upper case, we have to move to
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
index bce6336..d1887a1 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
@@ -40,9 +40,9 @@
         longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
 
         // Press shift key and hold, enter into choring shift state.
-        pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+        pressKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED);
         // Press/release letter key.
-        chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+        chordingPressAndReleaseKey('Z', ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCK_SHIFTED);
         // Release shift key, switch back to alphabet shift locked.
         releaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED);
 
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java
index 2204fca..a1f28dc 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java
@@ -246,13 +246,13 @@
         pressAndReleaseKey(CODE_SPACE, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
 
         // Press/release shift key, back to alphabet.
-        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+        pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
 
         // Long press shift key, enter alphabet shift locked.
         longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
 
         // Long press shift key, back to alphabet.
-        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+        longPressShiftKey(ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
     }
 
     // Double tap shift key.
@@ -265,7 +265,7 @@
         secondTapShiftKey(ALPHABET_SHIFT_LOCKED);
 
         // First shift key tap.
-        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+        pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
         // Second shift key tap.
         // Second tap is ignored in LatinKeyboardView.KeyTimerHandler.
     }
@@ -289,7 +289,7 @@
         // Update shift state, remained in alphabet shift locked.
         updateShiftState(ALPHABET_SHIFT_LOCKED);
         // Long press shift key, back to alphabet.
-        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+        longPressShiftKey(ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
 
         // Press/release "?123" key, enter into symbols.
         pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
@@ -320,7 +320,7 @@
         // Update shift state, remained in alphabet shift locked (not automatic shifted).
         updateShiftState(ALPHABET_SHIFT_LOCKED);
         // Long press shift key, back to alphabet.
-        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+        longPressShiftKey(ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
 
         // Load keyboard, should be in automatic shifted.
         loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
@@ -375,7 +375,7 @@
 
         // Alphabet shift locked -> "?123" key + letter -> alphabet shift locked.
         // Press and slide from shift key, enter alphabet shifted.
-        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCKED);
         // Enter/release letter key, switch back to shift locked.
         pressAndReleaseKey('Z', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
     }
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java b/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java
index fce698a..f17b452 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java
@@ -40,8 +40,9 @@
         public static final int ALPHABET_MANUAL_SHIFTED = 1;
         public static final int ALPHABET_AUTOMATIC_SHIFTED = 2;
         public static final int ALPHABET_SHIFT_LOCKED = 3;
-        public static final int SYMBOLS_UNSHIFTED = 4;
-        public static final int SYMBOLS_SHIFTED = 5;
+        public static final int ALPHABET_SHIFT_LOCK_SHIFTED = 4;
+        public static final int SYMBOLS_UNSHIFTED = 5;
+        public static final int SYMBOLS_SHIFTED = 6;
     }
 
     private int mLayout = Constants.ALPHABET_UNSHIFTED;
@@ -62,6 +63,7 @@
         case Constants.ALPHABET_MANUAL_SHIFTED: return "ALPHABET_MANUAL_SHIFTED";
         case Constants.ALPHABET_AUTOMATIC_SHIFTED: return "ALPHABET_AUTOMATIC_SHIFTED";
         case Constants.ALPHABET_SHIFT_LOCKED: return "ALPHABET_SHIFT_LOCKED";
+        case Constants.ALPHABET_SHIFT_LOCK_SHIFTED: return "ALPHABET_SHIFT_LOCK_SHIFTED";
         case Constants.SYMBOLS_UNSHIFTED: return "SYMBOLS_UNSHIFTED";
         case Constants.SYMBOLS_SHIFTED: return "SYMBOLS_SHIFTED";
         default: return "UNKNOWN<" + layoutId + ">";
@@ -93,6 +95,11 @@
     }
 
     @Override
+    public void setAlphabetShiftLockShiftedKeyboard() {
+        mLayout = Constants.ALPHABET_SHIFT_LOCK_SHIFTED;
+    }
+
+    @Override
     public void setSymbolsKeyboard() {
         mLayout = Constants.SYMBOLS_UNSHIFTED;
     }