Calculate isContinuationPossible for typing

Change-Id: I11edb1e5155e5048a6c95f84b36e2ef34572178c
diff --git a/native/jni/src/defines.h b/native/jni/src/defines.h
index a6dd2fd..3d7ba4f 100644
--- a/native/jni/src/defines.h
+++ b/native/jni/src/defines.h
@@ -376,6 +376,7 @@
 #define MIN_USER_TYPED_LENGTH_FOR_EXCESSIVE_CHARACTER_SUGGESTION 3
 
 // TODO: Remove
+#define MAX_POINTER_COUNT 1
 #define MAX_POINTER_COUNT_FOR_G 2
 
 // Size, in bytes, of the bloom filter index for bigrams
diff --git a/native/jni/src/proximity_info_state.cpp b/native/jni/src/proximity_info_state.cpp
index 39d53fb..31938a2 100644
--- a/native/jni/src/proximity_info_state.cpp
+++ b/native/jni/src/proximity_info_state.cpp
@@ -39,12 +39,8 @@
         const ProximityInfo *proximityInfo, const int *const inputCodes, const int inputSize,
         const int *const xCoordinates, const int *const yCoordinates, const int *const times,
         const int *const pointerIds, const bool isGeometric) {
-    if (isGeometric) {
-        mIsContinuationPossible = checkAndReturnIsContinuationPossible(
-                inputSize, xCoordinates, yCoordinates, times);
-    } else {
-        mIsContinuationPossible = false;
-    }
+    mIsContinuationPossible = checkAndReturnIsContinuationPossible(
+            inputSize, xCoordinates, yCoordinates, times, isGeometric);
 
     mProximityInfo = proximityInfo;
     mHasTouchPositionCorrectionData = proximityInfo->hasTouchPositionCorrectionData();
@@ -466,13 +462,27 @@
 }
 
 bool ProximityInfoState::checkAndReturnIsContinuationPossible(const int inputSize,
-        const int *const xCoordinates, const int *const yCoordinates, const int *const times) {
-    for (int i = 0; i < mSampledInputSize; ++i) {
-        const int index = mInputIndice[i];
-        if (index > inputSize || xCoordinates[index] != mSampledInputXs[i] ||
-                yCoordinates[index] != mSampledInputYs[i] || times[index] != mTimes[i]) {
+        const int *const xCoordinates, const int *const yCoordinates, const int *const times,
+        const bool isGeometric) const {
+    if (isGeometric) {
+        for (int i = 0; i < mSampledInputSize; ++i) {
+            const int index = mInputIndice[i];
+            if (index > inputSize || xCoordinates[index] != mSampledInputXs[i] ||
+                    yCoordinates[index] != mSampledInputYs[i] || times[index] != mTimes[i]) {
+                return false;
+            }
+        }
+    } else {
+        if (inputSize < mSampledInputSize) {
+            // Assuming the cache is invalid if the previous input size is larger than the new one.
             return false;
         }
+        for (int i = 0; i < mSampledInputSize && i < MAX_WORD_LENGTH_INTERNAL; ++i) {
+            if (xCoordinates[i] != mSampledInputXs[i]
+                    || yCoordinates[i] != mSampledInputYs[i]) {
+                return false;
+            }
+        }
     }
     return true;
 }
diff --git a/native/jni/src/proximity_info_state.h b/native/jni/src/proximity_info_state.h
index d3b4062..dd97965 100644
--- a/native/jni/src/proximity_info_state.h
+++ b/native/jni/src/proximity_info_state.h
@@ -242,7 +242,7 @@
             const NearKeysDistanceMap *const prevNearKeysDistances,
             const NearKeysDistanceMap *const prevPrevNearKeysDistances) const;
     bool checkAndReturnIsContinuationPossible(const int inputSize, const int *const xCoordinates,
-            const int *const yCoordinates, const int *const times);
+            const int *const yCoordinates, const int *const times, const bool isGeometric) const;
     void popInputData();
     void updateAlignPointProbabilities(const int start);
     bool suppressCharProbabilities(const int index1, const int index2);