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

Commit ca2a2785 authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

Simplify getImplicitlyApplicableSubtypesLocked

This is a mechanical refactoring CL. There must be no behavior change.

Bug: 309837937
Test: atest FrameworksServicesTests:InputMethodUtilsTest
Change-Id: Iaebf7c4c1612cfd7113c01834fae266f31d4f0b6
parent 86eb36c9
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) {