From 18ba146b72c5ff645d57e72fd1861ac59c3b7257 Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Thu, 20 Mar 2014 18:06:06 +0900 Subject: [PATCH] Stop apply Completion for DicNodes without any proximity chars. Bug: 13538127 Change-Id: Ifffc0cde1ea8a0ceb13e4e4e57c151b3ea33a522 --- native/jni/src/suggest/core/dicnode/dic_node.h | 7 ++++--- .../core/dicnode/internal/dic_node_state_scoring.h | 12 +++++++++++- .../src/suggest/core/dictionary/error_type_utils.h | 4 ++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/native/jni/src/suggest/core/dicnode/dic_node.h b/native/jni/src/suggest/core/dicnode/dic_node.h index 65dad5677..82b738d36 100644 --- a/native/jni/src/suggest/core/dicnode/dic_node.h +++ b/native/jni/src/suggest/core/dicnode/dic_node.h @@ -270,9 +270,10 @@ class DicNode { bool hasMatchedOrProximityCodePoints() const { // This DicNode does not have matched or proximity code points when all code points have - // been handled as edit corrections so far. - return mDicNodeState.mDicNodeStateScoring.getEditCorrectionCount() - < getNodeCodePointCount(); + // been handled as edit corrections or completion so far. + const int editCorrectionCount = mDicNodeState.mDicNodeStateScoring.getEditCorrectionCount(); + const int completionCount = mDicNodeState.mDicNodeStateScoring.getCompletionCount(); + return (editCorrectionCount + completionCount) < getNodeCodePointCount(); } bool isTotalInputSizeExceedingLimit() const { diff --git a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_scoring.h b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_scoring.h index 458eac81b..b0db55fc1 100644 --- a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_scoring.h +++ b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_scoring.h @@ -31,7 +31,7 @@ class DicNodeStateScoring { AK_FORCE_INLINE DicNodeStateScoring() : mDoubleLetterLevel(NOT_A_DOUBLE_LETTER), mDigraphIndex(DigraphUtils::NOT_A_DIGRAPH_INDEX), - mEditCorrectionCount(0), mProximityCorrectionCount(0), + mEditCorrectionCount(0), mProximityCorrectionCount(0), mCompletionCount(0), mNormalizedCompoundDistance(0.0f), mSpatialDistance(0.0f), mLanguageDistance(0.0f), mRawLength(0.0f), mContainedErrorTypes(ErrorTypeUtils::NOT_AN_ERROR), mNormalizedCompoundDistanceAfterFirstWord(MAX_VALUE_FOR_WEIGHTING) { @@ -42,6 +42,7 @@ class DicNodeStateScoring { void init() { mEditCorrectionCount = 0; mProximityCorrectionCount = 0; + mCompletionCount = 0; mNormalizedCompoundDistance = 0.0f; mSpatialDistance = 0.0f; mLanguageDistance = 0.0f; @@ -55,6 +56,7 @@ class DicNodeStateScoring { AK_FORCE_INLINE void init(const DicNodeStateScoring *const scoring) { mEditCorrectionCount = scoring->mEditCorrectionCount; mProximityCorrectionCount = scoring->mProximityCorrectionCount; + mCompletionCount = scoring->mCompletionCount; mNormalizedCompoundDistance = scoring->mNormalizedCompoundDistance; mSpatialDistance = scoring->mSpatialDistance; mLanguageDistance = scoring->mLanguageDistance; @@ -77,6 +79,9 @@ class DicNodeStateScoring { if (ErrorTypeUtils::isProximityCorrectionError(errorType)) { ++mProximityCorrectionCount; } + if (ErrorTypeUtils::isCompletion(errorType)) { + ++mCompletionCount; + } } // Saves the current normalized distance for space-aware gestures. @@ -129,6 +134,10 @@ class DicNodeStateScoring { return mProximityCorrectionCount; } + int16_t getCompletionCount() const { + return mCompletionCount; + } + float getRawLength() const { return mRawLength; } @@ -182,6 +191,7 @@ class DicNodeStateScoring { int16_t mEditCorrectionCount; int16_t mProximityCorrectionCount; + int16_t mCompletionCount; float mNormalizedCompoundDistance; float mSpatialDistance; diff --git a/native/jni/src/suggest/core/dictionary/error_type_utils.h b/native/jni/src/suggest/core/dictionary/error_type_utils.h index 1122291a6..cc7786765 100644 --- a/native/jni/src/suggest/core/dictionary/error_type_utils.h +++ b/native/jni/src/suggest/core/dictionary/error_type_utils.h @@ -59,6 +59,10 @@ class ErrorTypeUtils { return (errorType & PROXIMITY_CORRECTION) != 0; } + static bool isCompletion(const ErrorType errorType) { + return (errorType & COMPLETION) != 0; + } + private: DISALLOW_IMPLICIT_CONSTRUCTORS(ErrorTypeUtils);