aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdateSession.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdateSession.java')
-rw-r--r--java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdateSession.java84
1 files changed, 63 insertions, 21 deletions
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdateSession.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdateSession.java
index 61354762b..a86f6e584 100644
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdateSession.java
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdateSession.java
@@ -18,37 +18,61 @@ package com.android.inputmethod.latin.personalization;
import android.content.Context;
-import com.android.inputmethod.latin.BinaryDictionary.LanguageModelParam;
-import com.android.inputmethod.latin.ExpandableBinaryDictionary;
-
import java.lang.ref.WeakReference;
import java.util.ArrayList;
-import java.util.Locale;
/**
* This class is a session where a data provider can communicate with a personalization
* dictionary.
*/
public abstract class PersonalizationDictionaryUpdateSession {
- public WeakReference<PersonalizationDictionary> mDictionary;
- public final Locale mSystemLocale;
+ /**
+ * This class is a parameter for a new unigram or bigram word which will be added
+ * to the personalization dictionary.
+ */
+ public static class PersonalizationLanguageModelParam {
+ public final String mWord0;
+ public final String mWord1;
+ public final boolean mIsValid;
+ public final int mFrequency;
+ public PersonalizationLanguageModelParam(String word0, String word1, boolean isValid,
+ int frequency) {
+ mWord0 = word0;
+ mWord1 = word1;
+ mIsValid = isValid;
+ mFrequency = frequency;
+ }
+ }
- public PersonalizationDictionaryUpdateSession(final Locale locale) {
+ // TODO: Use a dynamic binary dictionary instead
+ public WeakReference<PersonalizationDictionary> mDictionary;
+ public WeakReference<DecayingExpandableBinaryDictionaryBase> mPredictionDictionary;
+ public final String mSystemLocale;
+ public PersonalizationDictionaryUpdateSession(String locale) {
mSystemLocale = locale;
}
public abstract void onDictionaryReady();
- public abstract void onDictionaryClosed(final Context context);
+ public abstract void onDictionaryClosed(Context context);
- public void setPredictionDictionary(final PersonalizationDictionary dictionary) {
+ public void setDictionary(PersonalizationDictionary dictionary) {
mDictionary = new WeakReference<PersonalizationDictionary>(dictionary);
}
+ public void setPredictionDictionary(DecayingExpandableBinaryDictionaryBase dictionary) {
+ mPredictionDictionary =
+ new WeakReference<DecayingExpandableBinaryDictionaryBase>(dictionary);
+ }
+
protected PersonalizationDictionary getDictionary() {
return mDictionary == null ? null : mDictionary.get();
}
+ protected DecayingExpandableBinaryDictionaryBase getPredictionDictionary() {
+ return mPredictionDictionary == null ? null : mPredictionDictionary.get();
+ }
+
private void unsetDictionary() {
final PersonalizationDictionary dictionary = getDictionary();
if (dictionary == null) {
@@ -57,30 +81,48 @@ public abstract class PersonalizationDictionaryUpdateSession {
dictionary.unRegisterUpdateSession(this);
}
- public void clearAndFlushDictionary(final Context context) {
- final PersonalizationDictionary dictionary = getDictionary();
+ private void unsetPredictionDictionary() {
+ final DecayingExpandableBinaryDictionaryBase dictionary = getPredictionDictionary();
+ if (dictionary == null) {
+ return;
+ }
+ dictionary.unRegisterUpdateSession(this);
+ }
+
+ public void clearAndFlushPredictionDictionary(Context context) {
+ final DecayingExpandableBinaryDictionaryBase dictionary = getPredictionDictionary();
if (dictionary == null) {
return;
}
dictionary.clearAndFlushDictionary();
}
- public void closeSession(final Context context) {
+ public void closeSession(Context context) {
unsetDictionary();
+ unsetPredictionDictionary();
onDictionaryClosed(context);
}
- // TODO: Support multi locale.
- public void addMultipleDictionaryEntriesToDictionary(
- final ArrayList<LanguageModelParam> languageModelParams,
- final ExpandableBinaryDictionary.AddMultipleDictionaryEntriesCallback callback) {
- final PersonalizationDictionary dictionary = getDictionary();
+ // TODO: Support multi locale to add bigram
+ public void addBigramToPersonalizationDictionary(String word0, String word1, boolean isValid,
+ int frequency) {
+ final DecayingExpandableBinaryDictionaryBase dictionary = getPredictionDictionary();
if (dictionary == null) {
- if (callback != null) {
- callback.onFinished();
- }
return;
}
- dictionary.addMultipleDictionaryEntriesToDictionary(languageModelParams, callback);
+ dictionary.addToDictionary(word0, word1, isValid);
+ }
+
+ // Bulk import
+ // TODO: Support multi locale to add bigram
+ public void addBigramsToPersonalizationDictionary(
+ final ArrayList<PersonalizationLanguageModelParam> lmParams) {
+ final DecayingExpandableBinaryDictionaryBase dictionary = getPredictionDictionary();
+ if (dictionary == null) {
+ return;
+ }
+ for (final PersonalizationLanguageModelParam lmParam : lmParams) {
+ dictionary.addToDictionary(lmParam.mWord0, lmParam.mWord1, lmParam.mIsValid);
+ }
}
}