Merge "Handle user dict as an ExpandableBinaryDictionary."
commit
a9f0a96377
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue