Loading java/src/com/android/inputmethod/latin/SynchronouslyLoadedContactsBinaryDictionary.java +10 −18 Original line number Diff line number Diff line Loading @@ -25,34 +25,26 @@ import java.util.ArrayList; import java.util.Locale; public final class SynchronouslyLoadedContactsBinaryDictionary extends ContactsBinaryDictionary { private boolean mClosed; private final Object mLock = new Object(); public SynchronouslyLoadedContactsBinaryDictionary(final Context context, final Locale locale) { super(context, locale); } @Override public synchronized ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer codes, public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer codes, final String prevWordForBigrams, final ProximityInfo proximityInfo, final boolean blockOffensiveWords, final int[] additionalFeaturesOptions) { reloadDictionaryIfRequired(); return super.getSuggestions(codes, prevWordForBigrams, proximityInfo, blockOffensiveWords, additionalFeaturesOptions); synchronized (mLock) { return super.getSuggestions(codes, prevWordForBigrams, proximityInfo, blockOffensiveWords, additionalFeaturesOptions); } @Override public synchronized boolean isValidWord(final String word) { reloadDictionaryIfRequired(); return isValidWordInner(word); } // Protect against multiple closing @Override public synchronized void close() { // Actually with the current implementation of ContactsDictionary it's safe to close // several times, so the following protection is really only for foolproofing if (mClosed) return; mClosed = true; super.close(); public boolean isValidWord(final String word) { synchronized (mLock) { return super.isValidWord(word); } } } java/src/com/android/inputmethod/latin/SynchronouslyLoadedUserBinaryDictionary.java +10 −7 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.Locale; public final class SynchronouslyLoadedUserBinaryDictionary extends UserBinaryDictionary { private final Object mLock = new Object(); public SynchronouslyLoadedUserBinaryDictionary(final Context context, final Locale locale) { this(context, locale, false); Loading @@ -36,17 +37,19 @@ public final class SynchronouslyLoadedUserBinaryDictionary extends UserBinaryDic } @Override public synchronized ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer codes, public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer codes, final String prevWordForBigrams, final ProximityInfo proximityInfo, final boolean blockOffensiveWords, final int[] additionalFeaturesOptions) { reloadDictionaryIfRequired(); return super.getSuggestions(codes, prevWordForBigrams, proximityInfo, blockOffensiveWords, additionalFeaturesOptions); synchronized (mLock) { return super.getSuggestions(codes, prevWordForBigrams, proximityInfo, blockOffensiveWords, additionalFeaturesOptions); } } @Override public synchronized boolean isValidWord(final String word) { reloadDictionaryIfRequired(); return isValidWordInner(word); public boolean isValidWord(final String word) { synchronized (mLock) { return super.isValidWord(word); } } } java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java +2 −0 Original line number Diff line number Diff line Loading @@ -383,6 +383,8 @@ public final class AndroidSpellCheckerService extends SpellCheckerService new Thread("spellchecker_close_dicts") { @Override public void run() { // Contacts dictionary can be closed multiple times here. If the dictionary is // already closed, extra closings are no-ops, so it's safe. for (DictionaryPool pool : oldPools.values()) { pool.close(); } Loading Loading
java/src/com/android/inputmethod/latin/SynchronouslyLoadedContactsBinaryDictionary.java +10 −18 Original line number Diff line number Diff line Loading @@ -25,34 +25,26 @@ import java.util.ArrayList; import java.util.Locale; public final class SynchronouslyLoadedContactsBinaryDictionary extends ContactsBinaryDictionary { private boolean mClosed; private final Object mLock = new Object(); public SynchronouslyLoadedContactsBinaryDictionary(final Context context, final Locale locale) { super(context, locale); } @Override public synchronized ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer codes, public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer codes, final String prevWordForBigrams, final ProximityInfo proximityInfo, final boolean blockOffensiveWords, final int[] additionalFeaturesOptions) { reloadDictionaryIfRequired(); return super.getSuggestions(codes, prevWordForBigrams, proximityInfo, blockOffensiveWords, additionalFeaturesOptions); synchronized (mLock) { return super.getSuggestions(codes, prevWordForBigrams, proximityInfo, blockOffensiveWords, additionalFeaturesOptions); } @Override public synchronized boolean isValidWord(final String word) { reloadDictionaryIfRequired(); return isValidWordInner(word); } // Protect against multiple closing @Override public synchronized void close() { // Actually with the current implementation of ContactsDictionary it's safe to close // several times, so the following protection is really only for foolproofing if (mClosed) return; mClosed = true; super.close(); public boolean isValidWord(final String word) { synchronized (mLock) { return super.isValidWord(word); } } }
java/src/com/android/inputmethod/latin/SynchronouslyLoadedUserBinaryDictionary.java +10 −7 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.Locale; public final class SynchronouslyLoadedUserBinaryDictionary extends UserBinaryDictionary { private final Object mLock = new Object(); public SynchronouslyLoadedUserBinaryDictionary(final Context context, final Locale locale) { this(context, locale, false); Loading @@ -36,17 +37,19 @@ public final class SynchronouslyLoadedUserBinaryDictionary extends UserBinaryDic } @Override public synchronized ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer codes, public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer codes, final String prevWordForBigrams, final ProximityInfo proximityInfo, final boolean blockOffensiveWords, final int[] additionalFeaturesOptions) { reloadDictionaryIfRequired(); return super.getSuggestions(codes, prevWordForBigrams, proximityInfo, blockOffensiveWords, additionalFeaturesOptions); synchronized (mLock) { return super.getSuggestions(codes, prevWordForBigrams, proximityInfo, blockOffensiveWords, additionalFeaturesOptions); } } @Override public synchronized boolean isValidWord(final String word) { reloadDictionaryIfRequired(); return isValidWordInner(word); public boolean isValidWord(final String word) { synchronized (mLock) { return super.isValidWord(word); } } }
java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java +2 −0 Original line number Diff line number Diff line Loading @@ -383,6 +383,8 @@ public final class AndroidSpellCheckerService extends SpellCheckerService new Thread("spellchecker_close_dicts") { @Override public void run() { // Contacts dictionary can be closed multiple times here. If the dictionary is // already closed, extra closings are no-ops, so it's safe. for (DictionaryPool pool : oldPools.values()) { pool.close(); } Loading