Merge "Use offscreen bitmap buffer to draw gesture preview trail" into jb-mr1-dev
diff --git a/java/src/com/android/inputmethod/latin/UserHistoryDictIOUtils.java b/java/src/com/android/inputmethod/latin/UserHistoryDictIOUtils.java
index d6fa661..1f5f1f7 100644
--- a/java/src/com/android/inputmethod/latin/UserHistoryDictIOUtils.java
+++ b/java/src/com/android/inputmethod/latin/UserHistoryDictIOUtils.java
@@ -91,6 +91,11 @@
         public void position(int position) {
             mPosition = position;
         }
+
+        @Override
+        public void put(final byte b) {
+            mBuffer[mPosition++] = b;
+        }
     }
 
     /**
diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
index 6775144..fbcb5ea 100644
--- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
+++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
@@ -232,6 +232,7 @@
         public int readInt();
         public int position();
         public void position(int newPosition);
+        public void put(final byte b);
     }
 
     public static final class ByteBufferWrapper implements FusionDictionaryBufferInterface {
@@ -271,6 +272,11 @@
         public void position(int newPos) {
             mBuffer.position(newPos);
         }
+
+        @Override
+        public void put(final byte b) {
+            mBuffer.put(b);
+        }
     }
 
     /**
diff --git a/native/jni/src/proximity_info_state.cpp b/native/jni/src/proximity_info_state.cpp
index f21d00b..208b693 100644
--- a/native/jni/src/proximity_info_state.cpp
+++ b/native/jni/src/proximity_info_state.cpp
@@ -98,6 +98,10 @@
         mDistanceCache.clear();
         mNearKeysVector.clear();
     }
+    if (DEBUG_GEO_FULL) {
+        AKLOGI("Init ProximityInfoState: reused points =  %d, last input size = %d",
+                pushTouchPointStartIndex, lastSavedInputSize);
+    }
     mInputSize = 0;
 
     if (xCoordinates && yCoordinates) {
@@ -109,6 +113,9 @@
                 lastInputIndex = i;
             }
         }
+        if (DEBUG_GEO_FULL) {
+            AKLOGI("Init ProximityInfoState: last input index = %d", lastInputIndex);
+        }
         // Working space to save near keys distances for current, prev and prevprev input point.
         NearKeysDistanceMap nearKeysDistances[3];
         // These pointers are swapped for each inputs points.
@@ -119,6 +126,9 @@
         for (int i = pushTouchPointStartIndex; i <= lastInputIndex; ++i) {
             // Assuming pointerId == 0 if pointerIds is null.
             const int pid = pointerIds ? pointerIds[i] : 0;
+            if (DEBUG_GEO_FULL) {
+                AKLOGI("Init ProximityInfoState: (%d)PID = %d", i, pid);
+            }
             if (pointerId == pid) {
                 const int c = isGeometric ? NOT_A_COORDINATE : getPrimaryCharAt(i);
                 const int x = proximityOnly ? NOT_A_COORDINATE : xCoordinates[i];
@@ -367,6 +377,13 @@
         if (isLastPoint) {
             if (size > 0 && getDistanceFloat(x, y, mInputXs.back(), mInputYs.back())
                     < mProximityInfo->getMostCommonKeyWidth() * LAST_POINT_SKIP_DISTANCE_SCALE) {
+                if (DEBUG_GEO_FULL) {
+                    AKLOGI("p0: size = %zd, x = %d, y = %d, lx = %d, ly = %d, dist = %f, "
+                           "width = %f", size, x, y, mInputXs.back(), mInputYs.back(),
+                           getDistanceFloat(x, y, mInputXs.back(), mInputYs.back()),
+                           mProximityInfo->getMostCommonKeyWidth()
+                                   * LAST_POINT_SKIP_DISTANCE_SCALE);
+                }
                 return popped;
             } else if (size > 1) {
                 int minChar = 0;
@@ -380,6 +397,10 @@
                 }
                 NearKeysDistanceMap::const_iterator itPP =
                         prevNearKeysDistances->find(minChar);
+                if (DEBUG_GEO_FULL) {
+                    AKLOGI("p1: char = %c, minDist = %f, prevNear key minDist = %f",
+                            minChar, itPP->second, minDist);
+                }
                 if (itPP != prevNearKeysDistances->end() && minDist > itPP->second) {
                     return popped;
                 }