diff options
Diffstat (limited to 'java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java | 52 |
1 files changed, 43 insertions, 9 deletions
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java index b92283c5b..740b86d86 100644 --- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java @@ -24,6 +24,7 @@ import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.personalization.DynamicPersonalizationDictionaryWriter; +import com.android.inputmethod.latin.personalization.DynamicPredictionDictionaryBase; import com.android.inputmethod.latin.utils.CollectionUtils; import java.io.File; @@ -72,7 +73,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { private BinaryDictionary mBinaryDictionary; /** The in-memory dictionary used to generate the binary dictionary. */ - private AbstractDictionaryWriter mDictionaryWriter; + protected AbstractDictionaryWriter mDictionaryWriter; /** * The name of this dictionary, used as the filename for storing the binary dictionary. Multiple @@ -84,9 +85,11 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { /** Whether to support dynamically updating the dictionary */ private final boolean mIsUpdatable; + // TODO: remove, once dynamic operations is serialized /** Controls access to the shared binary dictionary file across multiple instances. */ private final DictionaryController mSharedDictionaryController; + // TODO: remove, once dynamic operations is serialized /** Controls access to the local binary dictionary for this instance. */ private final DictionaryController mLocalDictionaryController = new DictionaryController(); @@ -446,9 +449,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { private final void syncReloadDictionaryInternal() { // Ensure that only one thread attempts to read or write to the shared binary dictionary // file at the same time. - mLocalDictionaryController.writeLock().lock(); + mSharedDictionaryController.writeLock().lock(); try { - mSharedDictionaryController.writeLock().lock(); + mLocalDictionaryController.writeLock().lock(); try { final long time = SystemClock.uptimeMillis(); final boolean dictionaryFileExists = dictionaryFileExists(); @@ -483,10 +486,10 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { } mLocalDictionaryController.mLastUpdateTime = time; } finally { - mSharedDictionaryController.writeLock().unlock(); + mLocalDictionaryController.writeLock().unlock(); } } finally { - mLocalDictionaryController.writeLock().unlock(); + mSharedDictionaryController.writeLock().unlock(); } } @@ -519,16 +522,16 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { private class AsyncLoadDictionaryToMemoryTask extends Thread { @Override public void run() { - mLocalDictionaryController.writeLock().lock(); + mSharedDictionaryController.readLock().lock(); try { - mSharedDictionaryController.readLock().lock(); + mLocalDictionaryController.writeLock().lock(); try { loadDictionaryAsync(); } finally { - mSharedDictionaryController.readLock().unlock(); + mLocalDictionaryController.writeLock().unlock(); } } finally { - mLocalDictionaryController.writeLock().unlock(); + mSharedDictionaryController.readLock().unlock(); } } } @@ -622,4 +625,35 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { mLocalDictionaryController.writeLock().unlock(); } } + + // TODO: Implement native binary methods once the dynamic dictionary implementation is done. + @UsedForTesting + public boolean isInDictionaryForTests(final String word) { + mLocalDictionaryController.writeLock().lock(); + try { + if (mDictType == Dictionary.TYPE_USER_HISTORY) { + return ((DynamicPersonalizationDictionaryWriter) mDictionaryWriter) + .isInDictionaryForTests(word); + } + } finally { + mLocalDictionaryController.writeLock().unlock(); + } + return false; + } + + // TODO: Remove and use addToPersonalizationPredictionDictionary instead!!!!!!!!!!!!!!!! + @UsedForTesting + public void forceAddWordForTest( + final String word0, final String word1, final boolean isValid) { + mLocalDictionaryController.writeLock().lock(); + try { + mDictionaryWriter.addUnigramWord(word1, null /* the "shortcut" parameter is null */, + DynamicPredictionDictionaryBase.FREQUENCY_FOR_TYPED, false /* isNotAWord */); + mDictionaryWriter.addBigramWords(word0, word1, + DynamicPredictionDictionaryBase.FREQUENCY_FOR_TYPED, isValid, + 0 /* lastTouchedTime */); + } finally { + mLocalDictionaryController.writeLock().unlock(); + } + } } |