From 0d0a46da0393c6dd73cccf5e22cb0dd70c99e15a Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Mon, 22 Nov 2010 17:20:48 -0800
Subject: [PATCH] Fix caps lock release in non-distinct multi touch device

Bug: 3221869
Change-Id: I7c5d407c465f22945cba37e42683345913b43acc
---
 .../inputmethod/latin/KeyboardSwitcher.java   | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
index 08ff41b6f4..f1f8dc27d6 100644
--- a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
@@ -412,8 +412,17 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
 
     private void setManualTemporaryUpperCase(boolean shifted) {
         LatinKeyboard latinKeyboard = getLatinKeyboard();
-        if (latinKeyboard != null && latinKeyboard.setShifted(shifted)) {
-            mInputView.invalidateAllKeys();
+        if (latinKeyboard != null) {
+            // On non-distinct multi touch panel device, we should also turn off the shift locked
+            // state when shift key is pressed to go to normal mode.
+            // On the other hand, on distinct multi touch panel device, turning off the shift locked
+            // state with shift key pressing is handled by onReleaseShift().
+            if (!hasDistinctMultitouch() && !shifted && latinKeyboard.isShiftLocked()) {
+                latinKeyboard.setShiftLocked(false);
+            }
+            if (latinKeyboard.setShifted(shifted)) {
+                mInputView.invalidateAllKeys();
+            }
         }
     }
 
@@ -424,6 +433,9 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
         }
     }
 
+    /**
+     * Toggle keyboard shift state triggered by user touch event.
+     */
     public void toggleShift() {
         mInputMethodService.mHandler.cancelUpdateShiftState();
         if (DEBUG_STATE)
@@ -463,6 +475,9 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
         }
     }
 
+    /**
+     * Update keyboard shift state triggered by connected EditText status change.
+     */
     public void updateShiftState() {
         final ShiftKeyState shiftKeyState = mShiftKeyState;
         if (DEBUG_STATE)
-- 
GitLab