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

Commit bdf745da authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Check isInDictionary() before the distracter test.

Bug: 13142176
Bug: 15428247
Change-Id: I7ce2c09ebbef6ca8c056807c2a35f2f987fd436e
parent 1910392e
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.inputmethod.latin.personalization.PersonalizationDictionary;
import com.android.inputmethod.latin.personalization.UserHistoryDictionary;
import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
import com.android.inputmethod.latin.utils.DistracterFilter;
import com.android.inputmethod.latin.utils.DistracterFilterCheckingIsInDictionary;
import com.android.inputmethod.latin.utils.ExecutorUtils;
import com.android.inputmethod.latin.utils.LanguageModelParam;
import com.android.inputmethod.latin.utils.SuggestionResults;
@@ -571,14 +572,15 @@ public class DictionaryFacilitator {
            final PersonalizationDataChunk personalizationDataChunk,
            final SpacingAndPunctuations spacingAndPunctuations,
            final ExpandableBinaryDictionary.AddMultipleDictionaryEntriesCallback callback) {
        final ExpandableBinaryDictionary personalizationDict =
                mDictionaries.getSubDict(Dictionary.TYPE_PERSONALIZATION);
        final ArrayList<LanguageModelParam> languageModelParams =
                LanguageModelParam.createLanguageModelParamsFrom(
                        personalizationDataChunk.mTokens,
                        personalizationDataChunk.mTimestampInSeconds,
                        this /* dictionaryFacilitator */, spacingAndPunctuations,
                        mDistracterFilter);
        final ExpandableBinaryDictionary personalizationDict =
                mDictionaries.getSubDict(Dictionary.TYPE_PERSONALIZATION);
                        new DistracterFilterCheckingIsInDictionary(
                                mDistracterFilter, personalizationDict));
        if (personalizationDict == null || languageModelParams == null
                || languageModelParams.isEmpty()) {
            if (callback != null) {
+2 −2
Original line number Diff line number Diff line
@@ -81,7 +81,7 @@ import com.android.inputmethod.latin.utils.ApplicationUtils;
import com.android.inputmethod.latin.utils.CapsModeUtils;
import com.android.inputmethod.latin.utils.CoordinateUtils;
import com.android.inputmethod.latin.utils.DialogUtils;
import com.android.inputmethod.latin.utils.DistracterFilterUsingSuggestion;
import com.android.inputmethod.latin.utils.DistracterFilterCheckingExactMatches;
import com.android.inputmethod.latin.utils.ImportantNoticeUtils;
import com.android.inputmethod.latin.utils.IntentUtils;
import com.android.inputmethod.latin.utils.JniUtils;
@@ -121,7 +121,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen

    private final Settings mSettings;
    private final DictionaryFacilitator mDictionaryFacilitator =
            new DictionaryFacilitator(new DistracterFilterUsingSuggestion(this /* context */));
            new DictionaryFacilitator(new DistracterFilterCheckingExactMatches(this /* context */));
    private final InputLogic mInputLogic = new InputLogic(this /* LatinIME */,
            this /* SuggestionStripViewAccessor */, mDictionaryFacilitator);
    // We expect to have only one decoder in almost all cases, hence the default capacity of 1.
+3 −4
Original line number Diff line number Diff line
@@ -31,9 +31,8 @@ import com.android.inputmethod.latin.PrevWordsInfo;
 * This class is used to prevent distracters being added to personalization
 * or user history dictionaries
 */
// TODO: Rename.
public class DistracterFilterUsingSuggestion implements DistracterFilter {
    private static final String TAG = DistracterFilterUsingSuggestion.class.getSimpleName();
public class DistracterFilterCheckingExactMatches implements DistracterFilter {
    private static final String TAG = DistracterFilterCheckingExactMatches.class.getSimpleName();
    private static final boolean DEBUG = false;

    private static final long TIMEOUT_TO_WAIT_LOADING_DICTIONARIES_IN_SECONDS = 120;
@@ -47,7 +46,7 @@ public class DistracterFilterUsingSuggestion implements DistracterFilter {
     *
     * @param context the context.
     */
    public DistracterFilterUsingSuggestion(final Context context) {
    public DistracterFilterCheckingExactMatches(final Context context) {
        mContext = context;
        mDictionaryFacilitator = new DictionaryFacilitator();
    }
+59 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.inputmethod.latin.utils;

import java.util.List;
import java.util.Locale;

import android.view.inputmethod.InputMethodSubtype;

import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.latin.PrevWordsInfo;

public class DistracterFilterCheckingIsInDictionary implements DistracterFilter {
    private final DistracterFilter mDistracterFilter;
    private final Dictionary mDictionary;

    public DistracterFilterCheckingIsInDictionary(final DistracterFilter distracterFilter,
            final Dictionary dictionary) {
        mDistracterFilter = distracterFilter;
        mDictionary = dictionary;
    }

    @Override
    public boolean isDistracterToWordsInDictionaries(PrevWordsInfo prevWordsInfo,
            String testedWord, Locale locale) {
        if (mDictionary.isInDictionary(testedWord)) {
            // This filter treats entries that are already in the dictionary as non-distracters
            // because they have passed the filtering in the past.
            return false;
        } else {
            return mDistracterFilter.isDistracterToWordsInDictionaries(
                    prevWordsInfo, testedWord, locale);
        }
    }

    @Override
    public void updateEnabledSubtypes(List<InputMethodSubtype> enabledSubtypes) {
        // Do nothing.
    }

    @Override
    public void close() {
        // Do nothing.
    }
}
+3 −3
Original line number Diff line number Diff line
@@ -20,19 +20,19 @@ import java.util.Locale;

import android.test.suitebuilder.annotation.LargeTest;

import com.android.inputmethod.latin.utils.DistracterFilterUsingSuggestion;
import com.android.inputmethod.latin.utils.DistracterFilterCheckingExactMatches;

/**
 * Unit test for DistracterFilter
 */
@LargeTest
public class DistracterFilterTest extends InputTestsBase {
    private DistracterFilterUsingSuggestion mDistracterFilter;
    private DistracterFilterCheckingExactMatches mDistracterFilter;

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        mDistracterFilter = new DistracterFilterUsingSuggestion(getContext());
        mDistracterFilter = new DistracterFilterCheckingExactMatches(getContext());
        mDistracterFilter.updateEnabledSubtypes(mLatinIME.getEnabledSubtypesForTest());
    }