diff --git a/native/jni/src/defines.h b/native/jni/src/defines.h
index a6dd2fd84063a981fd75c9e395ad3c0deb23a44d..3d7ba4f36efe081d2b287b87abc895aad9de336a 100644
--- a/native/jni/src/defines.h
+++ b/native/jni/src/defines.h
@@ -376,6 +376,7 @@ static inline void prof_out(void) {
 #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 39d53fb52301800a9137a6cb902476f631ca26a6..31938a20cd9e0cd98b64f67b03296fc863f6c13b 100644
--- a/native/jni/src/proximity_info_state.cpp
+++ b/native/jni/src/proximity_info_state.cpp
@@ -39,12 +39,8 @@ void ProximityInfoState::initInputParams(const int pointerId, const float maxPoi
         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 @@ float ProximityInfoState::calculateBeelineSpeedRate(
 }
 
 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 d3b4062c870b549da5f8c26fcb3587b959f7cda6..dd979653fe79db94162c992de904c7a5ad16a5d9 100644
--- a/native/jni/src/proximity_info_state.h
+++ b/native/jni/src/proximity_info_state.h
@@ -242,7 +242,7 @@ class ProximityInfoState {
             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);