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

Commit e752aab7 authored by Jean Chalard's avatar Jean Chalard
Browse files

Use confidence to fix whitelist

With this the most obvious problem is fixed. However there
are two remaining items : we should still enforce whitelist
when there are no close candidates at all, and we should
start in confident mode when pressing the globe key.

Bug: 18063142
Bug: 18130489
Bug: 18132240
Bug: 18136721
Bug: 18200415
Change-Id: Ibc0571ae35fc28f8d13760aa86b25db1163d3e31
parent 20da4f07
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -63,6 +63,9 @@ public class DictionaryFacilitator {
    // HACK: This threshold is being used when adding a capitalized entry in the User History
    // dictionary.
    private static final int CAPITALIZED_FORM_MAX_PROBABILITY_FOR_INSERT = 140;
    // How many words we need to type in a row ({@see mConfidenceInMostProbableLanguage}) to
    // declare we are confident the user is typing in the most probable language.
    private static final int CONFIDENCE_THRESHOLD = 3;

    private DictionaryGroup[] mDictionaryGroups = new DictionaryGroup[] { new DictionaryGroup() };
    private DictionaryGroup mMostProbableDictionaryGroup = mDictionaryGroups[0];
@@ -293,6 +296,14 @@ public class DictionaryFacilitator {
        }
    }

    public boolean isConfidentAboutCurrentLanguageBeing(final Locale mLocale) {
        final DictionaryGroup mostProbableDictionaryGroup = mMostProbableDictionaryGroup;
        if (!mostProbableDictionaryGroup.mLocale.equals(mLocale)) {
            return false;
        }
        return mostProbableDictionaryGroup.mConfidence >= CONFIDENCE_THRESHOLD;
    }

    @Nullable
    private static ExpandableBinaryDictionary getSubDict(final String dictType,
            final Context context, final Locale locale, final File dictFile,
@@ -634,7 +645,8 @@ public class DictionaryFacilitator {
            final int timeStampInSeconds, final boolean blockPotentiallyOffensive) {
        final ExpandableBinaryDictionary userHistoryDictionary =
                dictionaryGroup.getSubDict(Dictionary.TYPE_USER_HISTORY);
        if (userHistoryDictionary == null) {
        if (userHistoryDictionary == null
                || !isConfidentAboutCurrentLanguageBeing(userHistoryDictionary.mLocale)) {
            return;
        }
        final int maxFreq = getFrequency(word);
+16 −3
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

/**
@@ -117,7 +118,8 @@ public final class Suggest {
        return suggestionsContainer;
    }

    private static String getWhitelistedWordOrNull(final ArrayList<SuggestedWordInfo> suggestions) {
    private static SuggestedWordInfo getWhitelistedWordInfoOrNull(
            @Nonnull final ArrayList<SuggestedWordInfo> suggestions) {
        if (suggestions.isEmpty()) {
            return null;
        }
@@ -125,7 +127,7 @@ public final class Suggest {
        if (!firstSuggestedWordInfo.isKindOf(SuggestedWordInfo.KIND_WHITELIST)) {
            return null;
        }
        return firstSuggestedWordInfo.mWord;
        return firstSuggestedWordInfo;
    }

    // Retrieves suggestions for non-batch input (typing, recorrection, predictions...)
@@ -156,7 +158,18 @@ public final class Suggest {
                SuggestedWordInfo.removeDupsAndReturnSourceOfTypedWord(wordComposer.getTypedWord(),
                        mostProbableLocale /* preferredLocale */, suggestionsContainer);

        final String whitelistedWord = getWhitelistedWordOrNull(suggestionsContainer);
        final SuggestedWordInfo whitelistedWordInfo =
                getWhitelistedWordInfoOrNull(suggestionsContainer);
        final String whitelistedWord;
        if (null != whitelistedWordInfo &&
                mDictionaryFacilitator.isConfidentAboutCurrentLanguageBeing(
                        whitelistedWordInfo.mSourceDict.mLocale)) {
            whitelistedWord = whitelistedWordInfo.mWord;
        } else {
            // Even if we have a whitelist candidate, we don't use it unless we are confident
            // the user is typing in the language this whitelist candidate comes from.
            whitelistedWord = null;
        }
        final boolean resultsArePredictions = !wordComposer.isComposingWord();

        // We allow auto-correction if we have a whitelisted word, or if the word had more than