Fix issue #2300232: Bugs in resolving conflicting pointers

Change-Id: I7b9328c7a1c4f6b731e64cdca2ed9de71b84587f
diff --git a/services/java/com/android/server/InputDevice.java b/services/java/com/android/server/InputDevice.java
index 7c19f24..6f207e0 100644
--- a/services/java/com/android/server/InputDevice.java
+++ b/services/java/com/android/server/InputDevice.java
@@ -313,14 +313,17 @@
             long bestDistance = -1;
             int bestIndex = -1;
             for (int j=0; j<lastNumPointers; j++) {
-                if (!allowOverlap && last2Next[j] < 0) {
+                // If we are not allowing multiple new points to be assigned
+                // to the same old pointer, then skip this one if it is already
+                // detected as a conflict (-2).
+                if (!allowOverlap && last2Next[j] < -1) {
                     continue;
                 }
                 final int jd = j * MotionEvent.NUM_SAMPLE_DATA;
                 final int xd = lastData[jd + MotionEvent.SAMPLE_X] - x1;
                 final int yd = lastData[jd + MotionEvent.SAMPLE_Y] - y1;
                 final long distance = xd*(long)xd + yd*(long)yd;
-                if (j == 0 || distance < bestDistance) {
+                if (bestDistance == -1 || distance < bestDistance) {
                     bestDistance = distance;
                     bestIndex = j;
                 }