From c902dfeb8f8b889e885565a000556419e0d8307f Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Thu, 26 Jul 2012 13:04:31 +0900
Subject: [PATCH] Fix gesture detection when sliding key input is disabled

Bug: 6867837
Change-Id: Icbfa69928c436343db545860a7d63171f52266b6
---
 .../inputmethod/keyboard/PointerTracker.java       | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 67857d1118..bd896517b3 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -794,13 +794,16 @@ public class PointerTracker {
                     final int dx = x - lastX;
                     final int dy = y - lastY;
                     final int lastMoveSquared = dx * dx + dy * dy;
+                    // TODO: Should find a way to balance gesture detection and this hack.
                     if (sNeedsPhantomSuddenMoveEventHack
-                            && lastMoveSquared >= mKeyQuarterWidthSquared) {
+                            && lastMoveSquared >= mKeyQuarterWidthSquared
+                            && !mIsPossibleGesture) {
                         if (DEBUG_MODE) {
                             Log.w(TAG, String.format("onMoveEvent:"
                                     + " phantom sudden move event is translated to "
                                     + "up[%d,%d]/down[%d,%d] events", lastX, lastY, x, y));
                         }
+                        // TODO: This should be moved to outside of this nested if-clause?
                         if (ProductionFlag.IS_EXPERIMENTAL) {
                             ResearchLogger.pointerTracker_onMoveEvent(x, y, lastX, lastY);
                         }
@@ -816,7 +819,9 @@ public class PointerTracker {
                                 && !sPointerTrackerQueue.hasModifierKeyOlderThan(this)) {
                             onUpEventInternal(x, y, eventTime);
                         }
-                        mKeyAlreadyProcessed = true;
+                        if (!mIsPossibleGesture) {
+                            mKeyAlreadyProcessed = true;
+                        }
                         setReleasedKeyGraphics(oldKey);
                     }
                 }
@@ -832,7 +837,9 @@ public class PointerTracker {
                 if (mIsAllowedSlidingKeyInput) {
                     onMoveToNewKey(key, x, y);
                 } else {
-                    mKeyAlreadyProcessed = true;
+                    if (!mIsPossibleGesture) {
+                        mKeyAlreadyProcessed = true;
+                    }
                 }
             }
         }
@@ -871,6 +878,7 @@ public class PointerTracker {
     private void onUpEventInternal(int x, int y, long eventTime) {
         mTimerProxy.cancelKeyTimers();
         mIsInSlidingKeyInput = false;
+        mIsPossibleGesture = false;
         // Release the last pressed key.
         setReleasedKeyGraphics(mCurrentKey);
         if (mIsShowingMoreKeysPanel) {
-- 
GitLab