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

Commit 9fb00362 authored by Yohei Yukawa's avatar Yohei Yukawa Committed by Android (Google) Code Review
Browse files

Merge "Simplify getImplicitlyApplicableSubtypesLocked" into main

parents c491e9e6 ca2a2785
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.content.pm.PackageManagerInternal;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.os.Build;
import android.os.LocaleList;
import android.os.UserHandle;
import android.provider.Settings;
import android.text.TextUtils;
@@ -397,7 +398,8 @@ final class InputMethodUtils {
            List<InputMethodSubtype> enabledSubtypes =
                    getEnabledInputMethodSubtypeListLocked(imi);
            if (allowsImplicitlyEnabledSubtypes && enabledSubtypes.isEmpty()) {
                enabledSubtypes = SubtypeUtils.getImplicitlyApplicableSubtypesLocked(mRes, imi);
                enabledSubtypes = SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                        mRes.getConfiguration().getLocales(), imi);
            }
            return InputMethodSubtype.sort(imi, enabledSubtypes);
        }
@@ -646,6 +648,7 @@ final class InputMethodUtils {

        private String getEnabledSubtypeHashCodeForInputMethodAndSubtypeLocked(List<Pair<String,
                ArrayList<String>>> enabledImes, String imeId, String subtypeHashCode) {
            final LocaleList localeList = mRes.getConfiguration().getLocales();
            for (Pair<String, ArrayList<String>> enabledIme: enabledImes) {
                if (enabledIme.first.equals(imeId)) {
                    final ArrayList<String> explicitlyEnabledSubtypes = enabledIme.second;
@@ -657,7 +660,8 @@ final class InputMethodUtils {
                        // are enabled implicitly, so needs to treat them to be enabled.
                        if (imi != null && imi.getSubtypeCount() > 0) {
                            List<InputMethodSubtype> implicitlyEnabledSubtypes =
                                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(mRes, imi);
                                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(localeList,
                                            imi);
                            final int numSubtypes = implicitlyEnabledSubtypes.size();
                            for (int i = 0; i < numSubtypes; ++i) {
                                final InputMethodSubtype st = implicitlyEnabledSubtypes.get(i);
+3 −7
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.server.inputmethod;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.res.Resources;
import android.os.LocaleList;
import android.text.TextUtils;
import android.util.ArrayMap;
@@ -125,9 +124,7 @@ final class SubtypeUtils {
    @VisibleForTesting
    @NonNull
    static ArrayList<InputMethodSubtype> getImplicitlyApplicableSubtypesLocked(
            Resources res, InputMethodInfo imi) {
        final LocaleList systemLocales = res.getConfiguration().getLocales();

            @NonNull LocaleList systemLocales, InputMethodInfo imi) {
        synchronized (sCacheLock) {
            // We intentionally do not use InputMethodInfo#equals(InputMethodInfo) here because
            // it does not check if subtypes are also identical.
@@ -140,7 +137,7 @@ final class SubtypeUtils {
        // TODO: Refactor getImplicitlyApplicableSubtypesLockedImpl() so that it can receive
        // LocaleList rather than Resource.
        final ArrayList<InputMethodSubtype> result =
                getImplicitlyApplicableSubtypesLockedImpl(res, imi);
                getImplicitlyApplicableSubtypesLockedImpl(systemLocales, imi);
        synchronized (sCacheLock) {
            // Both LocaleList and InputMethodInfo are immutable. No need to copy them here.
            sCachedSystemLocales = systemLocales;
@@ -151,9 +148,8 @@ final class SubtypeUtils {
    }

    private static ArrayList<InputMethodSubtype> getImplicitlyApplicableSubtypesLockedImpl(
            Resources res, InputMethodInfo imi) {
            @NonNull LocaleList systemLocales, InputMethodInfo imi) {
        final List<InputMethodSubtype> subtypes = getSubtypes(imi);
        final LocaleList systemLocales = res.getConfiguration().getLocales();
        final String systemLocale = systemLocales.get(0).toString();
        if (TextUtils.isEmpty(systemLocale)) return new ArrayList<>();
        final int numSubtypes = subtypes.size();
+19 −23
Original line number Diff line number Diff line
@@ -287,7 +287,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_EN_US), imi);
                            new LocaleList(LOCALE_EN_US), imi);
            assertEquals(1, result.size());
            verifyEquality(autoSubtype, result.get(0));
        }
@@ -311,7 +311,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_EN_US), imi);
                            new LocaleList(LOCALE_EN_US), imi);
            assertEquals(2, result.size());
            verifyEquality(nonAutoEnUS, result.get(0));
            verifyEquality(nonAutoHandwritingEn, result.get(1));
@@ -335,7 +335,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_EN_GB), imi);
                            new LocaleList(LOCALE_EN_GB), imi);
            assertEquals(2, result.size());
            verifyEquality(nonAutoEnGB, result.get(0));
            verifyEquality(nonAutoHandwritingEn, result.get(1));
@@ -360,7 +360,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_FR), imi);
                            new LocaleList(LOCALE_FR), imi);
            assertEquals(2, result.size());
            verifyEquality(nonAutoFrCA, result.get(0));
            verifyEquality(nonAutoHandwritingFr, result.get(1));
@@ -381,7 +381,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_FR_CA), imi);
                            new LocaleList(LOCALE_FR_CA), imi);
            assertEquals(2, result.size());
            verifyEquality(nonAutoFrCA, result.get(0));
            verifyEquality(nonAutoHandwritingFr, result.get(1));
@@ -403,7 +403,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_JA_JP), imi);
                            new LocaleList(LOCALE_JA_JP), imi);
            assertEquals(3, result.size());
            verifyEquality(nonAutoJa, result.get(0));
            verifyEquality(nonAutoEnabledWhenDefaultIsNotAsciiCalableSubtype, result.get(1));
@@ -425,7 +425,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_JA_JP), imi);
                            new LocaleList(LOCALE_JA_JP), imi);
            assertEquals(1, result.size());
            verifyEquality(nonAutoHi, result.get(0));
        }
@@ -442,7 +442,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_JA_JP), imi);
                            new LocaleList(LOCALE_JA_JP), imi);
            assertEquals(1, result.size());
            verifyEquality(nonAutoEnUS, result.get(0));
        }
@@ -459,7 +459,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_JA_JP), imi);
                            new LocaleList(LOCALE_JA_JP), imi);
            assertEquals(1, result.size());
            verifyEquality(nonAutoEnUS, result.get(0));
        }
@@ -481,7 +481,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(Locale.forLanguageTag("sr-Latn-RS")), imi);
                            new LocaleList(Locale.forLanguageTag("sr-Latn-RS")), imi);
            assertEquals(2, result.size());
            assertThat(nonAutoSrLatn, is(in(result)));
            assertThat(nonAutoHandwritingSrLatn, is(in(result)));
@@ -501,7 +501,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(Locale.forLanguageTag("sr-Cyrl-RS")), imi);
                            new LocaleList(Locale.forLanguageTag("sr-Cyrl-RS")), imi);
            assertEquals(2, result.size());
            assertThat(nonAutoSrCyrl, is(in(result)));
            assertThat(nonAutoHandwritingSrCyrl, is(in(result)));
@@ -527,7 +527,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(
                            new LocaleList(
                                    Locale.forLanguageTag("sr-Latn-RS-x-android"),
                                    Locale.forLanguageTag("ja-JP"),
                                    Locale.forLanguageTag("fr-FR"),
@@ -554,7 +554,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_FIL_PH), imi);
                            new LocaleList(LOCALE_FIL_PH), imi);
            assertEquals(1, result.size());
            verifyEquality(nonAutoFil, result.get(0));
        }
@@ -572,7 +572,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_FI), imi);
                            new LocaleList(LOCALE_FI), imi);
            assertEquals(1, result.size());
            verifyEquality(nonAutoJa, result.get(0));
        }
@@ -588,7 +588,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_IN), imi);
                            new LocaleList(LOCALE_IN), imi);
            assertEquals(1, result.size());
            verifyEquality(nonAutoIn, result.get(0));
        }
@@ -602,7 +602,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_ID), imi);
                            new LocaleList(LOCALE_ID), imi);
            assertEquals(1, result.size());
            verifyEquality(nonAutoIn, result.get(0));
        }
@@ -616,7 +616,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_IN), imi);
                            new LocaleList(LOCALE_IN), imi);
            assertEquals(1, result.size());
            verifyEquality(nonAutoId, result.get(0));
        }
@@ -630,7 +630,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_ID), imi);
                            new LocaleList(LOCALE_ID), imi);
            assertEquals(1, result.size());
            verifyEquality(nonAutoId, result.get(0));
        }
@@ -652,7 +652,7 @@ public class InputMethodUtilsTest {
                    subtypes);
            final ArrayList<InputMethodSubtype> result =
                    SubtypeUtils.getImplicitlyApplicableSubtypesLocked(
                            getResourcesForLocales(LOCALE_FR, LOCALE_EN_US, LOCALE_JA_JP), imi);
                            new LocaleList(LOCALE_FR, LOCALE_EN_US, LOCALE_JA_JP), imi);
            assertThat(nonAutoFrCA, is(in(result)));
            assertThat(nonAutoEnUS, is(in(result)));
            assertThat(nonAutoJa, is(in(result)));
@@ -940,10 +940,6 @@ public class InputMethodUtilsTest {
                .createConfigurationContext(resourceConfiguration);
    }

    private Resources getResourcesForLocales(Locale... locales) {
        return createTargetContextWithLocales(new LocaleList(locales)).getResources();
    }

    private String[] getPackageNames(final ArrayList<InputMethodInfo> imis) {
        final String[] packageNames = new String[imis.size()];
        for (int i = 0; i < imis.size(); ++i) {