Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit db096d68 authored by satok's avatar satok Committed by Android (Google) Code Review
Browse files

Merge "Add a flag to demote completed suggestions"

parents a45c6f24 40a5f6fa
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -61,6 +61,8 @@ public class BinaryDictionary extends Dictionary {
    public static final Flag FLAG_REQUIRES_GERMAN_UMLAUT_PROCESSING =
            new Flag(R.bool.config_require_umlaut_processing, 0x1);

    public static final Flag FLAG_USE_FULL_EDIT_DISTANCE = new Flag(0x2);

    // Can create a new flag from extravalue :
    // public static final Flag FLAG_MYFLAG =
    //         new Flag("my_flag", 0x02);
+13 −2
Original line number Diff line number Diff line
@@ -25,8 +25,9 @@ public class Flag {
    public final int mMask;
    public final int mSource;

    static private final int SOURCE_CONFIG = 1;
    static private final int SOURCE_EXTRAVALUE = 2;
    private static final int SOURCE_CONFIG = 1;
    private static final int SOURCE_EXTRAVALUE = 2;
    private static final int SOURCE_PARAM = 3;

    public Flag(int resourceId, int mask) {
        mName = null;
@@ -42,6 +43,13 @@ public class Flag {
        mMask = mask;
    }

    public Flag(int mask) {
        mName = null;
        mResource = 0;
        mSource = SOURCE_PARAM;
        mMask = mask;
    }

    // If context/switcher are null, set all related flags in flagArray to on.
    public static int initFlags(Flag[] flagArray, Context context, SubtypeSwitcher switcher) {
        int flags = 0;
@@ -57,6 +65,9 @@ public class Flag {
                            switcher.currentSubtypeContainsExtraValueKey(entry.mName))
                        flags |= entry.mMask;
                    break;
                case Flag.SOURCE_PARAM:
                    flags |= entry.mMask;
                    break;
            }
        }
        return flags;
+12 −2
Original line number Diff line number Diff line
@@ -62,7 +62,8 @@ void Correction::initCorrectionState(
}

void Correction::setCorrectionParams(const int skipPos, const int excessivePos,
        const int transposedPos, const int spaceProximityPos, const int missingSpacePos) {
        const int transposedPos, const int spaceProximityPos, const int missingSpacePos,
        const bool useFullEditDistance) {
    // TODO: remove
    mTransposedPos = transposedPos;
    mExcessivePos = excessivePos;
@@ -74,6 +75,7 @@ void Correction::setCorrectionParams(const int skipPos, const int excessivePos,

    mSpaceProximityPos = spaceProximityPos;
    mMissingSpacePos = missingSpacePos;
    mUseFullEditDistance = useFullEditDistance;
}

void Correction::checkState() {
@@ -439,7 +441,7 @@ inline static void multiplyIntCapped(const int multiplier, int *base) {
}

inline static int powerIntCapped(const int base, const int n) {
    if (n == 0) return 1;
    if (n <= 0) return 1;
    if (base == 2) {
        return n < 31 ? 1 << n : S_INT_MAX;
    } else {
@@ -529,6 +531,8 @@ int Correction::RankingAlgorithm::calculateFinalFreq(const int inputIndex, const
    const int excessiveCount = correction->mExcessiveCount + correction->mTransposedCount % 2;
    const int proximityMatchedCount = correction->mProximityCount;
    const bool lastCharExceeded = correction->mLastCharExceeded;
    const bool useFullEditDistance = correction->mUseFullEditDistance;
    const int outputLength = outputIndex + 1;
    if (skippedCount >= inputLength || inputLength == 0) {
        return -1;
    }
@@ -682,6 +686,12 @@ int Correction::RankingAlgorithm::calculateFinalFreq(const int inputIndex, const
        multiplyIntCapped(fullWordMultiplier, &finalFreq);
    }

    if (useFullEditDistance && outputLength > inputLength + 1) {
        const int diff = outputLength - inputLength - 1;
        const int divider = diff < 31 ? 1 << diff : S_INT_MAX;
        finalFreq = divider > finalFreq ? 1 : finalFreq / divider;
    }

    if (DEBUG_DICT_FULL) {
        LOGI("calc: %d, %d", outputIndex, sameLength);
    }
+2 −1
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ public:

    // TODO: remove
    void setCorrectionParams(const int skipPos, const int excessivePos, const int transposedPos,
            const int spaceProximityPos, const int missingSpacePos);
            const int spaceProximityPos, const int missingSpacePos, const bool useFullEditDistance);
    void checkState();
    bool initProcessState(const int index);

@@ -111,6 +111,7 @@ private:
    const int FULL_WORD_MULTIPLIER;
    const ProximityInfo *mProximityInfo;

    bool mUseFullEditDistance;
    int mMaxEditDistance;
    int mMaxDepth;
    int mInputLength;
+18 −12
Original line number Diff line number Diff line
@@ -132,7 +132,8 @@ void UnigramDictionary::getWordWithDigraphSuggestionsRec(ProximityInfo *proximit
        memcpy(codesDest, codesSrc, remainingBytes);

    getWordSuggestions(proximityInfo, xcoordinates, ycoordinates, codesBuffer,
            (codesDest - codesBuffer) / MAX_PROXIMITY_CHARS + codesRemain, outWords, frequencies);
            (codesDest - codesBuffer) / MAX_PROXIMITY_CHARS + codesRemain, outWords, frequencies,
            flags);
}

int UnigramDictionary::getSuggestions(ProximityInfo *proximityInfo, const int *xcoordinates,
@@ -146,7 +147,7 @@ int UnigramDictionary::getSuggestions(ProximityInfo *proximityInfo, const int *x
                codesSize, flags, codes, codesSize, 0, codesBuffer, outWords, frequencies);
    } else { // Normal processing
        getWordSuggestions(proximityInfo, xcoordinates, ycoordinates, codes, codesSize,
                outWords, frequencies);
                outWords, frequencies, flags);
    }

    PROF_START(20);
@@ -175,7 +176,7 @@ int UnigramDictionary::getSuggestions(ProximityInfo *proximityInfo, const int *x

void UnigramDictionary::getWordSuggestions(ProximityInfo *proximityInfo,
        const int *xcoordinates, const int *ycoordinates, const int *codes, const int codesSize,
        unsigned short *outWords, int *frequencies) {
        unsigned short *outWords, int *frequencies, const int flags) {

    PROF_OPEN;
    PROF_START(0);
@@ -187,9 +188,10 @@ void UnigramDictionary::getWordSuggestions(ProximityInfo *proximityInfo,
    mCorrection->initCorrection(mProximityInfo, mInputLength, maxDepth);
    PROF_END(0);

    const bool useFullEditDistance = USE_FULL_EDIT_DISTANCE & flags;
    // TODO: remove
    PROF_START(1);
    getSuggestionCandidates();
    getSuggestionCandidates(useFullEditDistance);
    PROF_END(1);

    PROF_START(2);
@@ -212,7 +214,7 @@ void UnigramDictionary::getWordSuggestions(ProximityInfo *proximityInfo,
            if (DEBUG_DICT) {
                LOGI("--- Suggest missing space characters %d", i);
            }
            getMissingSpaceWords(mInputLength, i, mCorrection);
            getMissingSpaceWords(mInputLength, i, mCorrection, useFullEditDistance);
        }
    }
    PROF_END(5);
@@ -231,7 +233,7 @@ void UnigramDictionary::getWordSuggestions(ProximityInfo *proximityInfo,
                        i, x, y, proximityInfo->hasSpaceProximity(x, y));
            }
            if (proximityInfo->hasSpaceProximity(x, y)) {
                getMistypedSpaceWords(mInputLength, i, mCorrection);
                getMistypedSpaceWords(mInputLength, i, mCorrection, useFullEditDistance);
            }
        }
    }
@@ -315,10 +317,10 @@ bool UnigramDictionary::addWord(unsigned short *word, int length, int frequency)
static const char QUOTE = '\'';
static const char SPACE = ' ';

void UnigramDictionary::getSuggestionCandidates() {
void UnigramDictionary::getSuggestionCandidates(const bool useFullEditDistance) {
    // TODO: Remove setCorrectionParams
    mCorrection->setCorrectionParams(0, 0, 0,
            -1 /* spaceProximityPos */, -1 /* missingSpacePos */);
            -1 /* spaceProximityPos */, -1 /* missingSpacePos */, useFullEditDistance);
    int rootPosition = ROOT_POS;
    // Get the number of children of root, then increment the position
    int childCount = Dictionary::getCount(DICT_ROOT, &rootPosition);
@@ -349,16 +351,20 @@ void UnigramDictionary::getSuggestionCandidates() {
}

void UnigramDictionary::getMissingSpaceWords(
        const int inputLength, const int missingSpacePos, Correction *correction) {
        const int inputLength, const int missingSpacePos, Correction *correction,
        const bool useFullEditDistance) {
    correction->setCorrectionParams(-1 /* skipPos */, -1 /* excessivePos */,
            -1 /* transposedPos */, -1 /* spaceProximityPos */, missingSpacePos);
            -1 /* transposedPos */, -1 /* spaceProximityPos */, missingSpacePos,
            useFullEditDistance);
    getSplitTwoWordsSuggestion(inputLength, correction);
}

void UnigramDictionary::getMistypedSpaceWords(
        const int inputLength, const int spaceProximityPos, Correction *correction) {
        const int inputLength, const int spaceProximityPos, Correction *correction,
        const bool useFullEditDistance) {
    correction->setCorrectionParams(-1 /* skipPos */, -1 /* excessivePos */,
            -1 /* transposedPos */, spaceProximityPos, -1 /* missingSpacePos */);
            -1 /* transposedPos */, spaceProximityPos, -1 /* missingSpacePos */,
            useFullEditDistance);
    getSplitTwoWordsSuggestion(inputLength, correction);
}

Loading