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

Commit 6b23749d authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Check all enabled IME's subtypes to enable personalization.

Bug: 13067743

Change-Id: I6fc68b5151430a5ab51777f4c381e20f5a657924
parent bb173540
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -541,7 +541,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
            shouldKeepUserHistoryDictionaries = true;
            // TODO: Eliminate this restriction
            shouldKeepPersonalizationDictionaries =
                    mSubtypeSwitcher.isSystemLocaleSameAsLocaleOfAllEnabledSubtypes();
                    mSubtypeSwitcher.isSystemLocaleSameAsLocaleOfAllEnabledSubtypesOfEnabledImes();
        } else {
            shouldKeepUserHistoryDictionaries = false;
            shouldKeepPersonalizationDictionaries = false;
+21 −5
Original line number Diff line number Diff line
@@ -37,9 +37,11 @@ import com.android.inputmethod.keyboard.KeyboardSwitcher;
import com.android.inputmethod.latin.utils.LocaleUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;

import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;

public final class SubtypeSwitcher {
    private static boolean DBG = LatinImeLogger.sDBG;
@@ -273,12 +275,26 @@ public final class SubtypeSwitcher {
        return mNeedsToDisplayLanguage.getValue();
    }

    public boolean isSystemLocaleSameAsLocaleOfAllEnabledSubtypes() {
    public boolean isSystemLocaleSameAsLocaleOfAllEnabledSubtypesOfEnabledImes() {
        final Locale systemLocale = mResources.getConfiguration().locale;
        final List<InputMethodSubtype> enabledSubtypesOfThisIme =
                mRichImm.getMyEnabledInputMethodSubtypeList(true);
        for (final InputMethodSubtype subtype : enabledSubtypesOfThisIme) {
            if (!systemLocale.equals(SubtypeLocaleUtils.getSubtypeLocale(subtype))) {
        final Set<InputMethodSubtype> enabledSubtypesOfEnabledImes =
                new HashSet<InputMethodSubtype>();
        final InputMethodManager inputMethodManager = mRichImm.getInputMethodManager();
        final List<InputMethodInfo> enabledInputMethodInfoList =
                inputMethodManager.getEnabledInputMethodList();
        for (final InputMethodInfo info : enabledInputMethodInfoList) {
            final List<InputMethodSubtype> enabledSubtypes =
                    inputMethodManager.getEnabledInputMethodSubtypeList(
                            info, true /* allowsImplicitlySelectedSubtypes */);
            if (enabledSubtypes.isEmpty()) {
                // An IME with no subtypes is found.
                return false;
            }
            enabledSubtypesOfEnabledImes.addAll(enabledSubtypes);
        }
        for (final InputMethodSubtype subtype : enabledSubtypesOfEnabledImes) {
            if (!subtype.isAuxiliary() && !subtype.getLocale().isEmpty()
                    && !systemLocale.equals(SubtypeLocaleUtils.getSubtypeLocale(subtype))) {
                return false;
            }
        }