From 5ef421b58afa7bc58be40ed9331ce04998efbf56 Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Sun, 19 Dec 2010 20:27:11 +0900
Subject: [PATCH] Cancel long press timer when sliding key input is not allowed

This change also fixes auto snap back behavior of key which has output
text, such as smiley key.

Bug: 3297825
Change-Id: Ia06e1abc0fbdff2a26504ddcce1dc7f933b45453
---
 .../android/inputmethod/keyboard/KeyboardSwitcher.java   | 2 +-
 .../com/android/inputmethod/keyboard/PointerTracker.java | 9 +++++----
 java/src/com/android/inputmethod/latin/LatinIME.java     | 1 +
 3 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index 31d98a6769..0fb90143dc 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -576,7 +576,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
             }
             break;
         case AUTO_MODE_SWITCH_STATE_SYMBOL_BEGIN:
-            if (key != Keyboard.CODE_SPACE && key != Keyboard.CODE_ENTER && key > 0) {
+            if (key != Keyboard.CODE_SPACE && key != Keyboard.CODE_ENTER && key >= 0) {
                 mAutoModeSwitchState = AUTO_MODE_SWITCH_STATE_SYMBOL;
             }
             break;
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index ffaf3db6a4..15eab8fed4 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -296,6 +296,7 @@ public class PointerTracker {
                 // onRelease() first to notify that the previous key has been released, then call
                 // onPress() to notify that the new key is being pressed.
                 callListenerOnRelease(oldKey.mCodes[0]);
+                mHandler.cancelLongPressTimers();
                 if (mIsAllowedSlidingKeyInput) {
                     resetMultiTap();
                     callListenerOnPress(getKey(keyIndex).mCodes[0]);
@@ -312,10 +313,10 @@ public class PointerTracker {
                 // The pointer has been slid out from the previous key, we must call onRelease() to
                 // notify that the previous key has been released.
                 callListenerOnRelease(oldKey.mCodes[0]);
+                mHandler.cancelLongPressTimers();
                 if (mIsAllowedSlidingKeyInput) {
                     resetMultiTap();
                     keyState.onMoveToNewKey(keyIndex, x ,y);
-                    mHandler.cancelLongPressTimers();
                 } else {
                     setAlreadyProcessed();
                     showKeyPreviewAndUpdateKeyGraphics(NOT_A_KEY);
@@ -332,10 +333,10 @@ public class PointerTracker {
         if (DEBUG_EVENT)
             printTouchEvent("onUpEvent  :", x, y, eventTime);
         showKeyPreviewAndUpdateKeyGraphics(NOT_A_KEY);
-        if (mKeyAlreadyProcessed)
-            return;
         mHandler.cancelKeyTimers();
         mHandler.cancelPopupPreview();
+        if (mKeyAlreadyProcessed)
+            return;
         final PointerTrackerKeyState keyState = mKeyState;
         int keyIndex = keyState.onUpKey(x, y);
         if (isMinorMoveBounce(x, y, keyIndex)) {
@@ -438,7 +439,7 @@ public class PointerTracker {
         }
         if (key.mOutputText != null) {
             callListenerOnText(key.mOutputText);
-            callListenerOnRelease(NOT_A_KEY);
+            callListenerOnRelease(key.mCodes[0]);
         } else {
             int code = key.mCodes[0];
             final int[] codes = mKeyDetector.newCodeArray();
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 12a24e87ae..3a3a000de3 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1128,6 +1128,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
         ic.commitText(text, 1);
         ic.endBatchEdit();
         mKeyboardSwitcher.updateShiftState();
+        mKeyboardSwitcher.onKey(0); // dummy key code.
         mJustReverted = false;
         mJustAddedAutoSpace = false;
         mEnteredText = text;
-- 
GitLab