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);