Show gesture floating preview text at oldest finger

Bug: 7119032
Change-Id: Iddb26ba1a595e472fde0982d744b5652d5fbda3e
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index 27c3cc3..cf89567 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -855,9 +855,10 @@
     }
 
     @Override
-    public void showGesturePreviewTrail(final PointerTracker tracker) {
+    public void showGesturePreviewTrail(final PointerTracker tracker,
+            final boolean isOldestTracker) {
         locatePreviewPlacerView();
-        mPreviewPlacerView.invalidatePointer(tracker);
+        mPreviewPlacerView.invalidatePointer(tracker, isOldestTracker);
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 4887ac5..e762b23 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -80,7 +80,7 @@
         public void invalidateKey(Key key);
         public void showKeyPreview(PointerTracker tracker);
         public void dismissKeyPreview(PointerTracker tracker);
-        public void showGesturePreviewTrail(PointerTracker tracker);
+        public void showGesturePreviewTrail(PointerTracker tracker, boolean isOldestTracker);
     }
 
     public interface TimerProxy {
@@ -550,7 +550,7 @@
         }
         sInGesture = true;
         mListener.onStartBatchInput();
-        mDrawingProxy.showGesturePreviewTrail(this);
+        mDrawingProxy.showGesturePreviewTrail(this, true /* isOldestTracker */);
     }
 
     private void updateBatchInput(final long eventTime) {
@@ -567,7 +567,8 @@
                 mListener.onUpdateBatchInput(sAggregratedPointers);
             }
         }
-        mDrawingProxy.showGesturePreviewTrail(this);
+        final boolean isOldestTracker = sPointerTrackerQueue.getOldestElement() == this;
+        mDrawingProxy.showGesturePreviewTrail(this, isOldestTracker);
     }
 
     private void endBatchInput() {
@@ -584,7 +585,7 @@
                 clearBatchInputPointsOfAllPointerTrackers();
             }
         }
-        mDrawingProxy.showGesturePreviewTrail(this);
+        mDrawingProxy.showGesturePreviewTrail(this,  true /* isOldestTracker */);
     }
 
     private static void abortBatchInput() {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
index e0858c0..c1a5cbe 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
@@ -73,6 +73,10 @@
         mArraySize = newSize;
     }
 
+    public synchronized Element getOldestElement() {
+        return (mArraySize == 0) ? null : mExpandableArrayOfActivePointers.get(0);
+    }
+
     public synchronized void releaseAllPointersOlderThan(final Element pointer,
             final long eventTime) {
         if (DEBUG) {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/PreviewPlacerView.java b/java/src/com/android/inputmethod/keyboard/internal/PreviewPlacerView.java
index 7104e3a..3a85009 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/PreviewPlacerView.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/PreviewPlacerView.java
@@ -188,7 +188,7 @@
         mDrawsGestureFloatingPreviewText = drawsGestureFloatingPreviewText;
     }
 
-    public void invalidatePointer(final PointerTracker tracker) {
+    public void invalidatePointer(final PointerTracker tracker, final boolean isOldestTracker) {
         GesturePreviewTrail trail;
         synchronized (mGesturePreviewTrails) {
             trail = mGesturePreviewTrails.get(tracker.mPointerId);
@@ -199,8 +199,10 @@
         }
         trail.addStroke(tracker.getGestureStrokeWithPreviewTrail(), tracker.getDownTime());
 
-        mLastPointerX = tracker.getLastX();
-        mLastPointerY = tracker.getLastY();
+        if (isOldestTracker) {
+            mLastPointerX = tracker.getLastX();
+            mLastPointerY = tracker.getLastY();
+        }
         // TODO: Should narrow the invalidate region.
         invalidate();
     }