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

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

Merge "Enable personalization for multilingual users."

parents 53da06b8 af1a06d7
Loading
Loading
Loading
Loading
+1 −8
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.inputmethod.latin.personalization;

import java.util.Locale;

import android.content.Context;

import com.android.inputmethod.latin.DictionaryFacilitator;
@@ -33,12 +31,7 @@ public class PersonalizationDictionaryUpdater {
        mDictionaryFacilitator = dictionaryFacilitator;
    }

    public Locale getLocale() {
        return null;
    }

    public void onLoadSettings(final boolean usePersonalizedDicts,
            final boolean isSystemLocaleSameAsLocaleOfAllEnabledSubtypesOfEnabledImes) {
    public void onLoadSettings(final boolean usePersonalizedDicts) {
        if (!mDictCleared) {
            // Clear and never update the personalization dictionary.
            PersonalizationHelper.removeAllPersonalizationDictionaries(mContext);
+5 −1
Original line number Diff line number Diff line
@@ -189,6 +189,10 @@ public class DictionaryFacilitator {
        mPersonalizationDictionaryFacilitator.updateEnabledSubtypes(enabledSubtypes);
    }

    public void setIsMonolingualUser(final boolean isMonolingualUser) {
        mPersonalizationDictionaryFacilitator.setIsMonolingualUser(isMonolingualUser);
    }

    public Locale getLocale() {
        return mDictionaryGroup.mLocale;
    }
@@ -600,7 +604,7 @@ public class DictionaryFacilitator {
            final SpacingAndPunctuations spacingAndPunctuations,
            final AddMultipleDictionaryEntriesCallback callback) {
        mPersonalizationDictionaryFacilitator.addEntriesToPersonalizationDictionariesToUpdate(
                personalizationDataChunk, spacingAndPunctuations, callback);
                getLocale(), personalizationDataChunk, spacingAndPunctuations, callback);
    }

    public void addPhraseToContextualDictionary(final String[] phrase, final int probability,
+3 −6
Original line number Diff line number Diff line
@@ -614,9 +614,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen

    private void refreshPersonalizationDictionarySession(
            final SettingsValues currentSettingsValues) {
        mPersonalizationDictionaryUpdater.onLoadSettings(
                currentSettingsValues.mUsePersonalizedDicts,
        mDictionaryFacilitator.setIsMonolingualUser(
                mSubtypeSwitcher.isSystemLocaleSameAsLocaleOfAllEnabledSubtypesOfEnabledImes());
        mPersonalizationDictionaryUpdater.onLoadSettings(
                currentSettingsValues.mUsePersonalizedDicts);
        mContextualDictionaryUpdater.onLoadSettings(currentSettingsValues.mUsePersonalizedDicts);
        final boolean shouldKeepUserHistoryDictionaries;
        if (currentSettingsValues.mUsePersonalizedDicts) {
@@ -734,10 +735,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
                cleanupInternalStateForFinishInput();
            }
        }
        // TODO: Remove this test.
        if (!conf.locale.equals(mPersonalizationDictionaryUpdater.getLocale())) {
            refreshPersonalizationDictionarySession(settingsValues);
        }
        super.onConfigurationChanged(conf);
    }

+14 −3
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ public class PersonalizationDictionaryFacilitator {
    private final HashMap<String, HashSet<Locale>> mLangToLocalesMap = new HashMap<>();
    private final HashMap<Locale, ExpandableBinaryDictionary> mPersonalizationDictsToUpdate =
            new HashMap<>();
    private boolean mIsMonolingualUser = false;;

    PersonalizationDictionaryFacilitator(final Context context,
            final DistracterFilter distracterFilter) {
@@ -81,6 +82,10 @@ public class PersonalizationDictionaryFacilitator {
        }
    }

    public void setIsMonolingualUser(final boolean isMonolingualUser) {
        mIsMonolingualUser = isMonolingualUser;
    }

    /**
     * Flush personalization dictionaries to dictionary files. Close dictionaries after writing
     * files except the dictionary that is used for generating suggestions.
@@ -141,12 +146,18 @@ public class PersonalizationDictionaryFacilitator {
        personalizationDict.addMultipleDictionaryEntriesDynamically(languageModelParams, callback);
    }

    public void addEntriesToPersonalizationDictionariesToUpdate(
    public void addEntriesToPersonalizationDictionariesToUpdate(final Locale defaultLocale,
            final PersonalizationDataChunk personalizationDataChunk,
            final SpacingAndPunctuations spacingAndPunctuations,
            final AddMultipleDictionaryEntriesCallback callback) {
        final HashSet<Locale> locales =
                mLangToLocalesMap.get(personalizationDataChunk.mDetectedLanguage);
        final String language = personalizationDataChunk.mDetectedLanguage;
        final HashSet<Locale> locales;
        if (mIsMonolingualUser && PersonalizationDataChunk.LANGUAGE_UNKNOWN.equals(language)
                && mLangToLocalesMap.size() == 1) {
            locales = mLangToLocalesMap.get(defaultLocale.getLanguage());
        } else {
            locales = mLangToLocalesMap.get(language);
        }
        if (locales == null || locales.isEmpty()) {
            if (callback != null) {
                callback.onFinished();
+2 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import java.util.Collections;
import java.util.List;

public class PersonalizationDataChunk {
    public static final String LANGUAGE_UNKNOWN = "";

    public final boolean mInputByUser;
    public final List<String> mTokens;
    public final int mTimestampInSeconds;