From d3002aa8cd5339d59123e0c96174f6701e2c72cc Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Sat, 23 Jul 2011 01:27:49 -0700
Subject: [PATCH] Merge key preview handling into key graphics handling

Change-Id: I7b0ba38d833362817c607f6abffbaf0a07f52832
---
 .../inputmethod/keyboard/KeyboardView.java    |  4 --
 .../inputmethod/keyboard/PointerTracker.java  | 72 +++++++------------
 .../internal/PointerTrackerQueue.java         |  9 ++-
 3 files changed, 30 insertions(+), 55 deletions(-)

diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index 64bdc95910..1010adbe0f 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -171,10 +171,6 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
             sendMessageDelayed(obtainMessage(MSG_DISMISS_KEY_PREVIEW, tracker), delay);
         }
 
-        public void cancelDismissKeyPreview(PointerTracker tracker) {
-            removeMessages(MSG_DISMISS_KEY_PREVIEW, tracker);
-        }
-
         public void cancelAllDismissKeyPreviews() {
             removeMessages(MSG_DISMISS_KEY_PREVIEW);
         }
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 5b03ef4a16..e66ea7b798 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -199,8 +199,7 @@ public class PointerTracker {
 
     public static void dismissAllKeyPreviews() {
         for (final PointerTracker tracker : sTrackers) {
-            tracker.setReleasedKeyGraphics();
-            tracker.dismissKeyPreview();
+            tracker.setReleasedKeyGraphics(tracker.mKeyIndex);
         }
     }
 
@@ -323,11 +322,8 @@ public class PointerTracker {
         return key != null && key.mCode == Keyboard.CODE_SPACE;
     }
 
-    public void setReleasedKeyGraphics() {
-        setReleasedKeyGraphics(mKeyIndex);
-    }
-
     private void setReleasedKeyGraphics(int keyIndex) {
+        mDrawingProxy.dismissKeyPreview(this);
         final Key key = getKey(keyIndex);
         if (key != null) {
             key.onReleased();
@@ -336,6 +332,9 @@ public class PointerTracker {
     }
 
     private void setPressedKeyGraphics(int keyIndex) {
+        if (isKeyPreviewRequired(keyIndex)) {
+            mDrawingProxy.showKeyPreview(keyIndex, this);
+        }
         final Key key = getKey(keyIndex);
         if (key != null && key.isEnabled()) {
             key.onPressed();
@@ -343,6 +342,18 @@ public class PointerTracker {
         }
     }
 
+    // The modifier key, such as shift key, should not show its key preview.
+    private boolean isKeyPreviewRequired(int keyIndex) {
+        final Key key = getKey(keyIndex);
+        if (key == null || !key.isEnabled())
+            return false;
+        final int code = key.mCode;
+        if (isModifierCode(code) || code == Keyboard.CODE_DELETE
+                || code == Keyboard.CODE_ENTER || code == Keyboard.CODE_SPACE)
+            return false;
+        return true;
+    }
+
     public int getLastX() {
         return mLastX;
     }
@@ -438,7 +449,6 @@ public class PointerTracker {
 
             startRepeatKey(keyIndex);
             startLongPressTimer(keyIndex);
-            showKeyPreview(keyIndex);
             setPressedKeyGraphics(keyIndex);
         }
     }
@@ -471,7 +481,6 @@ public class PointerTracker {
                     keyIndex = onMoveKey(x, y);
                 onMoveToNewKey(keyIndex, x, y);
                 startLongPressTimer(keyIndex);
-                showKeyPreview(keyIndex);
                 setPressedKeyGraphics(keyIndex);
             } else if (isMajorEnoughMoveToBeOnNewKey(x, y, keyIndex)) {
                 // The pointer has been slid in to the new key from the previous key, we must call
@@ -491,7 +500,6 @@ public class PointerTracker {
                     onMoveToNewKey(keyIndex, x, y);
                     startLongPressTimer(keyIndex);
                     setPressedKeyGraphics(keyIndex);
-                    showKeyPreview(keyIndex);
                 } else {
                     // HACK: On some devices, quick successive touches may be translated to sudden
                     // move by touch panel firmware. This hack detects the case and translates the
@@ -503,11 +511,10 @@ public class PointerTracker {
                         if (DEBUG_MODE)
                             Log.w(TAG, String.format("onMoveEvent: sudden move is translated to "
                                     + "up[%d,%d]/down[%d,%d] events", lastX, lastY, x, y));
-                        onUpEventInternal(lastX, lastY, eventTime, true);
+                        onUpEventInternal(lastX, lastY, eventTime);
                         onDownEventInternal(x, y, eventTime);
                     } else {
                         mKeyAlreadyProcessed = true;
-                        dismissKeyPreview();
                         setReleasedKeyGraphics(oldKeyIndex);
                     }
                 }
@@ -524,7 +531,6 @@ public class PointerTracker {
                     onMoveToNewKey(keyIndex, x, y);
                 } else {
                     mKeyAlreadyProcessed = true;
-                    dismissKeyPreview();
                 }
             }
         }
@@ -539,27 +545,26 @@ public class PointerTracker {
             if (isModifier()) {
                 // Before processing an up event of modifier key, all pointers already being
                 // tracked should be released.
-                queue.releaseAllPointersExcept(this, eventTime, true);
+                queue.releaseAllPointersExcept(this, eventTime);
             } else {
                 queue.releaseAllPointersOlderThan(this, eventTime);
             }
             queue.remove(this);
         }
-        onUpEventInternal(x, y, eventTime, true);
+        onUpEventInternal(x, y, eventTime);
     }
 
     // Let this pointer tracker know that one of newer-than-this pointer trackers got an up event.
     // This pointer tracker needs to keep the key top graphics "pressed", but needs to get a
     // "virtual" up event.
-    public void onPhantomUpEvent(int x, int y, long eventTime, boolean updateReleasedKeyGraphics) {
+    public void onPhantomUpEvent(int x, int y, long eventTime) {
         if (DEBUG_EVENT)
             printTouchEvent("onPhntEvent:", x, y, eventTime);
-        onUpEventInternal(x, y, eventTime, updateReleasedKeyGraphics);
+        onUpEventInternal(x, y, eventTime);
         mKeyAlreadyProcessed = true;
     }
 
-    private void onUpEventInternal(int x, int y, long eventTime,
-            boolean updateReleasedKeyGraphics) {
+    private void onUpEventInternal(int x, int y, long eventTime) {
         mTimerProxy.cancelKeyTimers();
         mDrawingProxy.cancelShowKeyPreview(this);
         mIsInSlidingKeyInput = false;
@@ -573,9 +578,7 @@ public class PointerTracker {
             keyY = mKeyY;
         }
         final int keyIndex = onUpKey(keyX, keyY, eventTime);
-        dismissKeyPreview();
-        if (updateReleasedKeyGraphics)
-            setReleasedKeyGraphics(keyIndex);
+        setReleasedKeyGraphics(keyIndex);
         if (mKeyAlreadyProcessed)
             return;
         if (!mIsRepeatableKey) {
@@ -585,8 +588,7 @@ public class PointerTracker {
 
     public void onLongPressed() {
         mKeyAlreadyProcessed = true;
-        setReleasedKeyGraphics();
-        dismissKeyPreview();
+        setReleasedKeyGraphics(mKeyIndex);
         final PointerTrackerQueue queue = sPointerTrackerQueue;
         if (queue != null) {
             queue.remove(this);
@@ -599,7 +601,7 @@ public class PointerTracker {
 
         final PointerTrackerQueue queue = sPointerTrackerQueue;
         if (queue != null) {
-            queue.releaseAllPointersExcept(this, eventTime, true);
+            queue.releaseAllPointersExcept(this, eventTime);
             queue.remove(this);
         }
         onCancelEventInternal();
@@ -608,7 +610,6 @@ public class PointerTracker {
     private void onCancelEventInternal() {
         mTimerProxy.cancelKeyTimers();
         mDrawingProxy.cancelShowKeyPreview(this);
-        dismissKeyPreview();
         setReleasedKeyGraphics(mKeyIndex);
         mIsInSlidingKeyInput = false;
     }
@@ -616,7 +617,6 @@ public class PointerTracker {
     private void startRepeatKey(int keyIndex) {
         final Key key = getKey(keyIndex);
         if (key != null && key.mRepeatable) {
-            dismissKeyPreview();
             onRepeatKey(keyIndex);
             mTimerProxy.startKeyRepeatTimer(sDelayBeforeKeyRepeatStart, keyIndex, this);
             mIsRepeatableKey = true;
@@ -646,26 +646,6 @@ public class PointerTracker {
         }
     }
 
-    // The modifier key, such as shift key, should not show its key preview.
-    private boolean isKeyPreviewNotRequired(int keyIndex) {
-        final Key key = getKey(keyIndex);
-        if (key == null || !key.isEnabled())
-            return true;
-        final int code = key.mCode;
-        return isModifierCode(code) || code == Keyboard.CODE_DELETE
-                || code == Keyboard.CODE_ENTER || code == Keyboard.CODE_SPACE;
-    }
-
-    private void showKeyPreview(int keyIndex) {
-        if (isKeyPreviewNotRequired(keyIndex))
-            return;
-        mDrawingProxy.showKeyPreview(keyIndex, this);
-    }
-
-    private void dismissKeyPreview() {
-        mDrawingProxy.dismissKeyPreview(this);
-    }
-
     private void startLongPressTimer(int keyIndex) {
         Key key = getKey(keyIndex);
         if (key.mCode == Keyboard.CODE_SHIFT) {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
index 545b27fdcf..55175e0465 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
@@ -37,22 +37,21 @@ public class PointerTrackerQueue {
             if (t.isModifier()) {
                 oldestPos++;
             } else {
-                t.onPhantomUpEvent(t.getLastX(), t.getLastY(), eventTime, true);
+                t.onPhantomUpEvent(t.getLastX(), t.getLastY(), eventTime);
                 queue.remove(oldestPos);
             }
         }
     }
 
     public void releaseAllPointers(long eventTime) {
-        releaseAllPointersExcept(null, eventTime, true);
+        releaseAllPointersExcept(null, eventTime);
     }
 
-    public void releaseAllPointersExcept(PointerTracker tracker, long eventTime,
-            boolean updateReleasedKeyGraphics) {
+    public void releaseAllPointersExcept(PointerTracker tracker, long eventTime) {
         for (PointerTracker t : mQueue) {
             if (t == tracker)
                 continue;
-            t.onPhantomUpEvent(t.getLastX(), t.getLastY(), eventTime, updateReleasedKeyGraphics);
+            t.onPhantomUpEvent(t.getLastX(), t.getLastY(), eventTime);
         }
         mQueue.clear();
         if (tracker != null)
-- 
GitLab