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

Commit 644a709a authored by Dan Zivkovic's avatar Dan Zivkovic
Browse files

Remove distracter filter from client.

Bug 19296201.

Change-Id: Ic834e5956347cd86a96bd14024c42ad8ee258659
parent aadfef6f
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.inputmethod.latin;

import android.content.Context;

/**
 * Factory for instantiating DictionaryFacilitator objects.
 */
@@ -25,8 +23,4 @@ public class DictionaryFacilitatorProvider {
    public static DictionaryFacilitator newDictionaryFacilitator() {
        return new DictionaryFacilitatorImpl();
    }

    public static DictionaryFacilitator newDictionaryFacilitator(final Context context) {
        return new DictionaryFacilitatorImpl(context);
    }
}
+0 −4
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.inputmethod.latin;

import android.content.Context;
import android.util.Pair;
import android.view.inputmethod.InputMethodSubtype;

import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.keyboard.KeyboardLayout;
@@ -28,7 +27,6 @@ import com.android.inputmethod.latin.utils.SuggestionResults;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@@ -90,8 +88,6 @@ public interface DictionaryFacilitator {
        void onUpdateMainDictionaryAvailability(boolean isMainDictionaryAvailable);
    }

    void updateEnabledSubtypes(final List<InputMethodSubtype> enabledSubtypes);

    // TODO: remove this, it's confusing with seamless multiple language switching
    void setIsMonolingualUser(final boolean isMonolingualUser);

+1 −19
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;
import android.view.inputmethod.InputMethodSubtype;

import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.keyboard.KeyboardLayout;
@@ -29,9 +28,6 @@ import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.common.Constants;
import com.android.inputmethod.latin.personalization.UserHistoryDictionary;
import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion;
import com.android.inputmethod.latin.utils.DistracterFilter;
import com.android.inputmethod.latin.utils.DistracterFilterCheckingExactMatchesAndSuggestions;
import com.android.inputmethod.latin.utils.DistracterFilterCheckingIsInDictionary;
import com.android.inputmethod.latin.utils.ExecutorUtils;
import com.android.inputmethod.latin.utils.SuggestionResults;

@@ -42,7 +38,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -76,7 +71,6 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator {
    private volatile CountDownLatch mLatchForWaitingLoadingMainDictionaries = new CountDownLatch(0);
    // To synchronize assigning mDictionaryGroup to ensure closing dictionaries.
    private final Object mLock = new Object();
    private final DistracterFilter mDistracterFilter;

    public static final Map<String, Class<? extends ExpandableBinaryDictionary>>
            DICT_TYPE_TO_CLASS = new HashMap<>();
@@ -233,15 +227,6 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator {
    }

    public DictionaryFacilitatorImpl() {
        mDistracterFilter = DistracterFilter.EMPTY_DISTRACTER_FILTER;
    }

    public DictionaryFacilitatorImpl(final Context context) {
        mDistracterFilter = new DistracterFilterCheckingExactMatchesAndSuggestions(context);
    }

    public void updateEnabledSubtypes(final List<InputMethodSubtype> enabledSubtypes) {
        mDistracterFilter.updateEnabledSubtypes(enabledSubtypes);
    }

    // TODO: remove this, it's confusing with seamless multiple language switching
@@ -545,7 +530,6 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator {
                dictionaryGroup.closeDict(dictType);
            }
        }
        mDistracterFilter.close();
    }

    @UsedForTesting
@@ -659,9 +643,7 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator {
        // We don't add words with 0-frequency (assuming they would be profanity etc.).
        final boolean isValid = maxFreq > 0;
        UserHistoryDictionary.addToDictionary(userHistoryDictionary, ngramContext, secondWord,
                isValid, timeStampInSeconds,
                new DistracterFilterCheckingIsInDictionary(
                        mDistracterFilter, userHistoryDictionary));
                isValid, timeStampInSeconds);
    }

    private void removeWord(final String dictName, final String word) {
+12 −50
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ import com.android.inputmethod.latin.makedict.WordProperty;
import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion;
import com.android.inputmethod.latin.utils.AsyncResultHolder;
import com.android.inputmethod.latin.utils.CombinedFormatUtils;
import com.android.inputmethod.latin.utils.DistracterFilter;
import com.android.inputmethod.latin.utils.ExecutorUtils;
import com.android.inputmethod.latin.utils.WordInputEventForPersonalization;

@@ -40,7 +39,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -57,7 +55,6 @@ import javax.annotation.Nullable;
 *
 * A class that extends this abstract class must have a static factory method named
 *   getDictionary(Context context, Locale locale, File dictFile, String dictNamePrefix)
 * @see DictionaryFacilitator#getSubDict(String,Context,Locale,File,String)
 */
abstract public class ExpandableBinaryDictionary extends Dictionary {
    private static final boolean DEBUG = false;
@@ -172,33 +169,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {

    private static void asyncExecuteTaskWithLock(final Lock lock, final String executorName,
            final Runnable task) {
        asyncPreCheckAndExecuteTaskWithLock(lock, null /* preCheckTask */, executorName, task);
    }

    private void asyncPreCheckAndExecuteTaskWithWriteLock(
            final Callable<Boolean> preCheckTask, final Runnable task) {
        asyncPreCheckAndExecuteTaskWithLock(mLock.writeLock(), preCheckTask,
                mDictName /* executorName */, task);

    }

    // Execute task with lock when the result of preCheckTask is true or preCheckTask is null.
    private static void asyncPreCheckAndExecuteTaskWithLock(final Lock lock,
            final Callable<Boolean> preCheckTask, final String executorName, final Runnable task) {
        final String tag = TAG;
        ExecutorUtils.getExecutor(executorName).execute(new Runnable() {
            @Override
            public void run() {
                if (preCheckTask != null) {
                    try {
                        if (!preCheckTask.call().booleanValue()) {
                            return;
                        }
                    } catch (final Exception e) {
                        Log.e(tag, "The pre check task throws an exception.", e);
                        return;
                    }
                }
                lock.lock();
                try {
                    task.run();
@@ -305,17 +278,8 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
        }
    }

    private void updateDictionaryWithWriteLockIfWordIsNotADistracter(
            @Nonnull final Runnable updateTask,
            @Nonnull final String word, @Nonnull final DistracterFilter distracterFilter) {
    private void updateDictionaryWithWriteLock(@Nonnull final Runnable updateTask) {
        reloadDictionaryIfRequired();
        final Callable<Boolean> preCheckTask = new Callable<Boolean>() {
            @Override
            public Boolean call() throws Exception {
                return !distracterFilter.isDistracterToWordsInDictionaries(
                        NgramContext.EMPTY_PREV_WORDS_INFO, word, mLocale);
            }
        };
        final Runnable task = new Runnable() {
            @Override
            public void run() {
@@ -326,23 +290,22 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
                updateTask.run();
            }
        };
        asyncPreCheckAndExecuteTaskWithWriteLock(preCheckTask, task);
        asyncExecuteTaskWithWriteLock(task);
    }

    /**
     * Adds unigram information of a word to the dictionary. May overwrite an existing entry.
     */
    public void addUnigramEntryWithCheckingDistracter(final String word, final int frequency,
    public void addUnigramEntry(final String word, final int frequency,
            final String shortcutTarget, final int shortcutFreq, final boolean isNotAWord,
            final boolean isPossiblyOffensive, final int timestamp,
            @Nonnull final DistracterFilter distracterFilter) {
        updateDictionaryWithWriteLockIfWordIsNotADistracter(new Runnable() {
            final boolean isPossiblyOffensive, final int timestamp) {
        updateDictionaryWithWriteLock(new Runnable() {
            @Override
            public void run() {
                addUnigramLocked(word, frequency, shortcutTarget, shortcutFreq,
                        isNotAWord, isPossiblyOffensive, timestamp);
            }
        }, word, distracterFilter);
        });
    }

    protected void addUnigramLocked(final String word, final int frequency,
@@ -430,12 +393,11 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
    }

    /**
     * Update dictionary for the word with the ngramContext if the word is not a distracter.
     * Update dictionary for the word with the ngramContext.
     */
    public void updateEntriesForWordWithCheckingDistracter(@Nonnull final NgramContext ngramContext,
            final String word, final boolean isValidWord, final int count, final int timestamp,
            @Nonnull final DistracterFilter distracterFilter) {
        updateDictionaryWithWriteLockIfWordIsNotADistracter(new Runnable() {
    public void updateEntriesForWord(@Nonnull final NgramContext ngramContext,
            final String word, final boolean isValidWord, final int count, final int timestamp) {
        updateDictionaryWithWriteLock(new Runnable() {
            @Override
            public void run() {
                final BinaryDictionary binaryDictionary = getBinaryDictionary();
@@ -450,7 +412,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
                    }
                }
            }
        }, word, distracterFilter);
        });
    }

    public interface UpdateEntriesForInputEventsCallback {
@@ -653,7 +615,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
    /**
     * Reloads the dictionary. Access is controlled on a per dictionary file basis.
     */
    private final void asyncReloadDictionary() {
    private void asyncReloadDictionary() {
        final AtomicBoolean isReloading = mIsReloading;
        if (!isReloading.compareAndSet(false, true)) {
            return;
+1 −3
Original line number Diff line number Diff line
@@ -128,7 +128,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen

    final Settings mSettings;
    private final DictionaryFacilitator mDictionaryFacilitator =
            DictionaryFacilitatorProvider.newDictionaryFacilitator(this /* context */);
            DictionaryFacilitatorProvider.newDictionaryFacilitator();
    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.
@@ -608,8 +608,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        if (!mHandler.hasPendingReopenDictionaries()) {
            resetDictionaryFacilitator(locales);
        }
        mDictionaryFacilitator.updateEnabledSubtypes(mRichImm.getMyEnabledInputMethodSubtypeList(
                true /* allowsImplicitlySelectedSubtypes */));
        refreshPersonalizationDictionarySession(currentSettingsValues);
        resetDictionaryFacilitatorIfNecessary();
        mStatsUtilsManager.onLoadSettings(this /* context */, currentSettingsValues,
Loading