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

Commit a2a4ee27 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android (Google) Code Review
Browse files

Merge "Check isInDictionary() before the distracter test."

parents 79e2e9fa bdf745da
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());
    }