Loading java-overridable/src/com/android/inputmethod/latin/DictionaryFacilitatorProvider.java +0 −6 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.inputmethod.latin; import android.content.Context; /** * Factory for instantiating DictionaryFacilitator objects. */ Loading @@ -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); } } java/src/com/android/inputmethod/latin/DictionaryFacilitator.java +0 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java +1 −19 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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<>(); Loading Loading @@ -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 Loading Loading @@ -545,7 +530,6 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator { dictionaryGroup.closeDict(dictType); } } mDistracterFilter.close(); } @UsedForTesting Loading Loading @@ -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) { Loading java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java +12 −50 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading Loading @@ -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() { Loading @@ -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, Loading Loading @@ -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(); Loading @@ -450,7 +412,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { } } } }, word, distracterFilter); }); } public interface UpdateEntriesForInputEventsCallback { Loading Loading @@ -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; Loading java/src/com/android/inputmethod/latin/LatinIME.java +1 −3 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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 Loading
java-overridable/src/com/android/inputmethod/latin/DictionaryFacilitatorProvider.java +0 −6 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.inputmethod.latin; import android.content.Context; /** * Factory for instantiating DictionaryFacilitator objects. */ Loading @@ -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); } }
java/src/com/android/inputmethod/latin/DictionaryFacilitator.java +0 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading
java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java +1 −19 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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<>(); Loading Loading @@ -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 Loading Loading @@ -545,7 +530,6 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator { dictionaryGroup.closeDict(dictType); } } mDistracterFilter.close(); } @UsedForTesting Loading Loading @@ -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) { Loading
java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java +12 −50 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading Loading @@ -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() { Loading @@ -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, Loading Loading @@ -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(); Loading @@ -450,7 +412,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { } } } }, word, distracterFilter); }); } public interface UpdateEntriesForInputEventsCallback { Loading Loading @@ -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; Loading
java/src/com/android/inputmethod/latin/LatinIME.java +1 −3 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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