Merge "Enabling "in test harness" flag with a direct call" into ub-launcher3-master
diff --git a/src/com/android/launcher3/touch/TouchEventTranslator.java b/src/com/android/launcher3/touch/TouchEventTranslator.java
index 8333d32..bf0c84c 100644
--- a/src/com/android/launcher3/touch/TouchEventTranslator.java
+++ b/src/com/android/launcher3/touch/TouchEventTranslator.java
@@ -82,7 +82,7 @@
     public void dispatchDownEvents(MotionEvent ev) {
         for(int i = 0; i < ev.getPointerCount() && i < mDownEvents.size(); i++) {
             int pid = ev.getPointerId(i);
-            put(pid, ev.getX(i), 0, mDownEvents.get(i).timeStamp, ev);
+            put(pid, i, ev.getX(i), 0, mDownEvents.get(i).timeStamp, ev);
         }
     }
 
@@ -103,7 +103,7 @@
                     }
                     generateEvent(ev.getAction(), ev);
                 } else {
-                    put(pid, x, y, ev);
+                    put(pid, index, x, y, ev);
                 }
                 break;
             case MotionEvent.ACTION_MOVE:
@@ -128,11 +128,11 @@
         }
     }
 
-    private TouchEventTranslator put(int id, float x, float y, MotionEvent ev) {
-        return put(id, x, y, ev.getEventTime(), ev);
+    private TouchEventTranslator put(int id, int index, float x, float y, MotionEvent ev) {
+        return put(id, index, x, y, ev.getEventTime(), ev);
     }
 
-    private TouchEventTranslator put(int id, float x, float y, long ms, MotionEvent ev) {
+    private TouchEventTranslator put(int id, int index, float x, float y, long ms, MotionEvent ev) {
         checkFingerExistence(id, false);
         boolean isInitialDown = (mFingers.size() == 0);
 
@@ -155,7 +155,7 @@
         } else {
             action = MotionEvent.ACTION_POINTER_DOWN;
             // Set the id of the changed pointer.
-            action |= id << MotionEvent.ACTION_POINTER_INDEX_SHIFT;
+            action |= index << MotionEvent.ACTION_POINTER_INDEX_SHIFT;
         }
         generateEvent(action, ms, ev);
         return this;
@@ -209,7 +209,7 @@
     public void printSamples(String msg, MotionEvent ev) {
         System.out.printf("%s %s", msg, MotionEvent.actionToString(ev.getActionMasked()));
         final int pointerCount = ev.getPointerCount();
-        System.out.printf("#%d/%d", ev.getPointerId(ev.getActionIndex()), pointerCount);
+        System.out.printf("#%d/%d", ev.getActionIndex(), pointerCount);
         System.out.printf(" t=%d:", ev.getEventTime());
         for (int p = 0; p < pointerCount; p++) {
             System.out.printf("  id=%d: (%f,%f)",
@@ -242,6 +242,10 @@
         if (DEBUG) {
             printSamples(TAG + " generateEvent", event);
         }
+        if (event.getPointerId(event.getActionIndex()) < 0) {
+            printSamples(TAG + "generateEvent", event);
+            throw new IllegalStateException(event.getActionIndex() + " not found in MotionEvent");
+        }
         mListener.accept(event);
         event.recycle();
     }