Handle user dict as an ExpandableBinaryDictionary.

Bug: 13755213
Change-Id: I2d242a3332e9633d4e41e08c0bbfafcefd814ecd
This commit is contained in:
Keisuke Kuroyanagi 2014-04-30 20:35:08 +09:00
parent b451f270f3
commit 9ed7e47539
4 changed files with 23 additions and 33 deletions

View file

@ -29,8 +29,8 @@ public final class UserDictionaryCompatUtils {
Context.class, String.class, Integer.TYPE, String.class, Locale.class);
@SuppressWarnings("deprecation")
public static void addWord(final Context context, final String word, final int freq,
final String shortcut, final Locale locale) {
public static void addWord(final Context context, final String word,
final int freq, final String shortcut, final Locale locale) {
if (hasNewerAddWord()) {
CompatUtils.invoke(Words.class, null, METHOD_addWord, context, word, freq, shortcut,
locale);

View file

@ -49,6 +49,7 @@ public class DictionaryFacilitatorForSuggest {
private static final int CAPITALIZED_FORM_MAX_PROBABILITY_FOR_INSERT = 140;
private Dictionaries mDictionaries = new Dictionaries();
private boolean mIsUserDictEnabled = false;
private volatile CountDownLatch mLatchForWaitingLoadingMainDictionary = new CountDownLatch(0);
// To synchronize assigning mDictionaries to ensure closing dictionaries.
private Object mLock = new Object();
@ -71,24 +72,21 @@ public class DictionaryFacilitatorForSuggest {
CollectionUtils.newConcurrentHashMap();
public final ConcurrentHashMap<String, ExpandableBinaryDictionary> mSubDictMap =
CollectionUtils.newConcurrentHashMap();
// TODO: Remove sub dictionary members and use mSubDictMap.
public final UserBinaryDictionary mUserDictionary;
public Dictionaries() {
mLocale = null;
mUserDictionary = null;
}
public Dictionaries(final Locale locale, final Dictionary mainDict,
final ExpandableBinaryDictionary contactsDict, final UserBinaryDictionary userDict,
final ExpandableBinaryDictionary contactsDict,
final ExpandableBinaryDictionary userDict,
final ExpandableBinaryDictionary userHistoryDict,
final ExpandableBinaryDictionary personalizationDict) {
mLocale = locale;
// Main dictionary can be asynchronously loaded.
setMainDict(mainDict);
setSubDict(Dictionary.TYPE_CONTACTS, contactsDict);
mUserDictionary = userDict;
setSubDict(Dictionary.TYPE_USER, mUserDictionary);
setSubDict(Dictionary.TYPE_USER, userDict);
setSubDict(Dictionary.TYPE_USER_HISTORY, userHistoryDict);
setSubDict(Dictionary.TYPE_PERSONALIZATION, personalizationDict);
}
@ -176,11 +174,12 @@ public class DictionaryFacilitatorForSuggest {
}
// Open or move user dictionary.
final UserBinaryDictionary newUserDictionary;
final ExpandableBinaryDictionary newUserDictionary;
if (!closeUserDictionary && mDictionaries.hasDict(Dictionary.TYPE_USER)) {
newUserDictionary = mDictionaries.mUserDictionary;
newUserDictionary = mDictionaries.getSubDict(Dictionary.TYPE_USER);
} else {
newUserDictionary = new UserBinaryDictionary(context, newLocale);
mIsUserDictEnabled = UserBinaryDictionary.isEnabled(context);
}
// Open or move user history dictionary.
@ -364,19 +363,15 @@ public class DictionaryFacilitatorForSuggest {
}
public boolean isUserDictionaryEnabled() {
final UserBinaryDictionary userDictionary = mDictionaries.mUserDictionary;
if (userDictionary == null) {
return false;
}
return userDictionary.mEnabled;
return mIsUserDictEnabled;
}
public void addWordToUserDictionary(String word) {
final UserBinaryDictionary userDictionary = mDictionaries.mUserDictionary;
if (userDictionary == null) {
public void addWordToUserDictionary(final Context context, final String word) {
final Locale locale = getLocale();
if (locale == null) {
return;
}
userDictionary.addWordToUserDictionary(word);
UserBinaryDictionary.addWordToUserDictionary(context, locale, word);
}
public void addToUserHistory(final String suggestion, final boolean wasAutoCapitalized,

View file

@ -1179,7 +1179,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
} else {
wordToEdit = word;
}
mInputLogic.mSuggest.mDictionaryFacilitator.addWordToUserDictionary(wordToEdit);
mInputLogic.mSuggest.mDictionaryFacilitator.addWordToUserDictionary(
this /* context */, wordToEdit);
}
// Callback for the {@link SuggestionStripView}, to call when the important notice strip is

View file

@ -29,7 +29,6 @@ import android.text.TextUtils;
import android.util.Log;
import com.android.inputmethod.compat.UserDictionaryCompatUtils;
import com.android.inputmethod.latin.utils.LocaleUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
import java.io.File;
@ -74,7 +73,6 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary {
private ContentObserver mObserver;
final private String mLocale;
final private boolean mAlsoUseMoreRestrictiveLocales;
final public boolean mEnabled;
public UserBinaryDictionary(final Context context, final Locale locale) {
this(context, locale, false /* alsoUseMoreRestrictiveLocales */, null /* dictFile */);
@ -120,7 +118,6 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary {
}
};
cres.registerContentObserver(Words.CONTENT_URI, true, mObserver);
mEnabled = readIsEnabled();
reloadDictionaryIfRequired();
}
@ -198,8 +195,8 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary {
}
}
private boolean readIsEnabled() {
final ContentResolver cr = mContext.getContentResolver();
public static boolean isEnabled(final Context context) {
final ContentResolver cr = context.getContentResolver();
final ContentProviderClient client = cr.acquireContentProviderClient(Words.CONTENT_URI);
if (client != null) {
client.release();
@ -212,18 +209,15 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary {
/**
* Adds a word to the user dictionary and makes it persistent.
*
* @param context the context
* @param locale the locale
* @param word the word to add. If the word is capitalized, then the dictionary will
* recognize it as a capitalized word when searched.
*/
public synchronized void addWordToUserDictionary(final String word) {
public static void addWordToUserDictionary(final Context context, final Locale locale,
final String word) {
// Update the user dictionary provider
final Locale locale;
if (USER_DICTIONARY_ALL_LANGUAGES == mLocale) {
locale = null;
} else {
locale = LocaleUtils.constructLocaleFromString(mLocale);
}
UserDictionaryCompatUtils.addWord(mContext, word,
UserDictionaryCompatUtils.addWord(context, word,
HISTORICAL_DEFAULT_USER_DICTIONARY_FREQUENCY, null, locale);
}