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

Commit ba18f6e6 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android Git Automerger
Browse files

am e44c4d25: am b6665d95: Merge "Use DistracterFilterCheckingIsInDictionary...

am e44c4d25: am b6665d95: Merge "Use DistracterFilterCheckingIsInDictionary for User History" into lmp-dev

* commit 'e44c4d25':
  Use DistracterFilterCheckingIsInDictionary for User History
parents ca0368c0 e44c4d25
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -468,7 +468,9 @@ public class DictionaryFacilitator {
        // We don't add words with 0-frequency (assuming they would be profanity etc.).
        final boolean isValid = maxFreq > 0;
        UserHistoryDictionary.addToDictionary(userHistoryDictionary, prevWordsInfo, secondWord,
                isValid, timeStampInSeconds, mDistracterFilter);
                isValid, timeStampInSeconds,
                new DistracterFilterCheckingIsInDictionary(
                        mDistracterFilter, userHistoryDictionary));
    }

    private void removeWord(final String dictName, final String word) {
+42 −16
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ 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;
@@ -163,9 +164,31 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
    }

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

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

    }

    // Execute task with lock when the result of preCheckTask is true or preCheckTask is null.
    private void asyncPreCheckAndExecuteTaskWithLock(final Lock lock,
            final Callable<Boolean> preCheckTask, final Runnable task) {
        ExecutorUtils.getExecutor(mDictName).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();
@@ -278,17 +301,20 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
            final boolean isBlacklisted, final int timestamp,
            final DistracterFilter distracterFilter) {
        reloadDictionaryIfRequired();
        asyncExecuteTaskWithWriteLock(new Runnable() {
        asyncPreCheckAndExecuteTaskWithWriteLock(
                new Callable<Boolean>() {
                    @Override
                    public Boolean call() throws Exception {
                        return !distracterFilter.isDistracterToWordsInDictionaries(
                                PrevWordsInfo.EMPTY_PREV_WORDS_INFO, word, mLocale);
                    }
                },
                new Runnable() {
                    @Override
                    public void run() {
                        if (mBinaryDictionary == null) {
                            return;
                        }
                if (distracterFilter.isDistracterToWordsInDictionaries(
                        PrevWordsInfo.EMPTY_PREV_WORDS_INFO, word, mLocale)) {
                    // The word is a distracter.
                    return;
                }
                        runGCIfRequiredLocked(true /* mindsBlockByGC */);
                        addUnigramLocked(word, frequency, shortcutTarget, shortcutFreq,
                                isNotAWord, isBlacklisted, timestamp);