Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9f0a963 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android (Google) Code Review
Browse files

Merge "Handle user dict as an ExpandableBinaryDictionary."

parents 6d54f9f5 9ed7e475
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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);
+12 −17
Original line number Diff line number Diff line
@@ -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,
+2 −1
Original line number Diff line number Diff line
@@ -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
+7 −13
Original line number Diff line number Diff line
@@ -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);
    }