From 0519fdd18ac4414b8298d3338db1c8ccce032170 Mon Sep 17 00:00:00 2001
From: Satoshi Kataoka <satok@google.com>
Date: Wed, 12 Dec 2012 20:19:18 +0900
Subject: [PATCH] Fix typing incremental decoder

Change-Id: Ia55d5c0200738c81f93530b3680bc3f37c0b2e28
---
 native/jni/src/proximity_info_state.cpp | 24 ++++++++++++++++++++----
 native/jni/src/proximity_info_state.h   |  4 +++-
 2 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/native/jni/src/proximity_info_state.cpp b/native/jni/src/proximity_info_state.cpp
index 31938a20cd..549ac35444 100644
--- a/native/jni/src/proximity_info_state.cpp
+++ b/native/jni/src/proximity_info_state.cpp
@@ -668,11 +668,15 @@ int ProximityInfoState::getDuration(const int index) const {
     return 0;
 }
 
-float ProximityInfoState::getPointToKeyLength(const int inputIndex, const int codePoint) const {
+// TODO: Remove the "scale" parameter
+// This function basically converts from a length to an edit distance. Accordingly, it's obviously
+// wrong to compare with mMaxPointToKeyLength.
+float ProximityInfoState::getPointToKeyLength(
+        const int inputIndex, const int codePoint, const float scale) const {
     const int keyId = mProximityInfo->getKeyIndexOf(codePoint);
     if (keyId != NOT_AN_INDEX) {
         const int index = inputIndex * mProximityInfo->getKeyCount() + keyId;
-        return min(mDistanceCache[index], mMaxPointToKeyLength);
+        return min(mDistanceCache[index] * scale, mMaxPointToKeyLength);
     }
     if (isSkippableCodePoint(codePoint)) {
         return 0.0f;
@@ -681,15 +685,27 @@ float ProximityInfoState::getPointToKeyLength(const int inputIndex, const int co
     return MAX_POINT_TO_KEY_LENGTH;
 }
 
-float ProximityInfoState::getPointToKeyByIdLength(const int inputIndex, const int keyId) const {
+float ProximityInfoState::getPointToKeyLength(const int inputIndex, const int codePoint) const {
+    return getPointToKeyLength(inputIndex, codePoint, 1.0f);
+}
+
+// TODO: Remove the "scale" parameter
+// This function basically converts from a length to an edit distance. Accordingly, it's obviously
+// wrong to compare with mMaxPointToKeyLength.
+float ProximityInfoState::getPointToKeyByIdLength(
+        const int inputIndex, const int keyId, const float scale) const {
     if (keyId != NOT_AN_INDEX) {
         const int index = inputIndex * mProximityInfo->getKeyCount() + keyId;
-        return min(mDistanceCache[index], mMaxPointToKeyLength);
+        return min(mDistanceCache[index] * scale, mMaxPointToKeyLength);
     }
     // If the char is not a key on the keyboard then return the max length.
     return static_cast<float>(MAX_POINT_TO_KEY_LENGTH);
 }
 
+float ProximityInfoState::getPointToKeyByIdLength(const int inputIndex, const int keyId) const {
+    return getPointToKeyByIdLength(inputIndex, keyId, 1.0f);
+}
+
 // In the following function, c is the current character of the dictionary word currently examined.
 // currentChars is an array containing the keys close to the character the user actually typed at
 // the same position. We want to see if c is in it: if so, then the word contains at that position
diff --git a/native/jni/src/proximity_info_state.h b/native/jni/src/proximity_info_state.h
index dd979653fe..b1ad3731e5 100644
--- a/native/jni/src/proximity_info_state.h
+++ b/native/jni/src/proximity_info_state.h
@@ -155,8 +155,10 @@ class ProximityInfoState {
         return mIsContinuationPossible;
     }
 
-    float getPointToKeyLength(const int inputIndex, const int charCode) const;
+    float getPointToKeyByIdLength(const int inputIndex, const int keyId, const float scale) const;
     float getPointToKeyByIdLength(const int inputIndex, const int keyId) const;
+    float getPointToKeyLength(const int inputIndex, const int codePoint, const float scale) const;
+    float getPointToKeyLength(const int inputIndex, const int codePoint) const;
 
     ProximityType getMatchedProximityId(const int index, const int c,
             const bool checkProximityChars, int *proximityIndex = 0) const;
-- 
GitLab