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

Commit ad8a6652 authored by Tarandeep Singh's avatar Tarandeep Singh Committed by Android (Google) Code Review
Browse files

Merge "Fix: Allow system IME to be disabled when another IME is available" into qt-dev

parents f1abb757 3daa9f56
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -419,8 +419,8 @@ public class InputMethodAndSubtypeUtil {
        return configurationLocale;
    }

    public static boolean isValidSystemNonAuxAsciiCapableIme(InputMethodInfo imi) {
        if (imi.isAuxiliaryIme() || !imi.isSystem()) {
    public static boolean isValidNonAuxAsciiCapableIme(InputMethodInfo imi) {
        if (imi.isAuxiliaryIme()) {
            return false;
        }
        final int subtypeCount = imi.getSubtypeCount();
+1 −1
Original line number Diff line number Diff line
@@ -125,7 +125,7 @@ public class InputMethodPreference extends RestrictedSwitchPreference implements
        }
        mInputMethodSettingValues = InputMethodSettingValuesWrapper.getInstance(context);
        mHasPriorityInSorting = imi.isSystem()
                && InputMethodAndSubtypeUtil.isValidSystemNonAuxAsciiCapableIme(imi);
                && InputMethodAndSubtypeUtil.isValidNonAuxAsciiCapableIme(imi);
        setOnPreferenceClickListener(this);
        setOnPreferenceChangeListener(this);
    }
+8 −8
Original line number Diff line number Diff line
@@ -77,25 +77,25 @@ public class InputMethodSettingValuesWrapper {
            return true;
        }

        final int enabledValidSystemNonAuxAsciiCapableImeCount =
                getEnabledValidSystemNonAuxAsciiCapableImeCount();
        final int enabledValidNonAuxAsciiCapableImeCount =
                getEnabledValidNonAuxAsciiCapableImeCount();

        return enabledValidSystemNonAuxAsciiCapableImeCount <= 1
                && !(enabledValidSystemNonAuxAsciiCapableImeCount == 1 && !isEnabled)
        return enabledValidNonAuxAsciiCapableImeCount <= 1
                && !(enabledValidNonAuxAsciiCapableImeCount == 1 && !isEnabled)
                && imi.isSystem()
                && InputMethodAndSubtypeUtil.isValidSystemNonAuxAsciiCapableIme(imi);
                && InputMethodAndSubtypeUtil.isValidNonAuxAsciiCapableIme(imi);
    }

    private int getEnabledValidSystemNonAuxAsciiCapableImeCount() {
    private int getEnabledValidNonAuxAsciiCapableImeCount() {
        int count = 0;
        final List<InputMethodInfo> enabledImis = getEnabledInputMethodList();
        for (final InputMethodInfo imi : enabledImis) {
            if (InputMethodAndSubtypeUtil.isValidSystemNonAuxAsciiCapableIme(imi)) {
            if (InputMethodAndSubtypeUtil.isValidNonAuxAsciiCapableIme(imi)) {
                ++count;
            }
        }
        if (count == 0) {
            Log.w(TAG, "No \"enabledValidSystemNonAuxAsciiCapableIme\"s found.");
            Log.w(TAG, "No \"enabledValidNonAuxAsciiCapableIme\"s found.");
        }
        return count;
    }
+20 −26
Original line number Diff line number Diff line
@@ -192,53 +192,47 @@ public class InputMethodAndSubtypeUtilTest {
    }

    @Test
    public void isValidSystemNonAuxAsciiCapableIme() {
        // System IME w/ no subtype
        assertThat(InputMethodAndSubtypeUtil.isValidSystemNonAuxAsciiCapableIme(
                createDummyIme(true, false)))
    public void isValidNonAuxAsciiCapableIme() {
        // IME w/ no subtype
        assertThat(InputMethodAndSubtypeUtil.isValidNonAuxAsciiCapableIme(
                createDummyIme(false)))
                .isFalse();

        // System IME w/ non-Aux and non-ASCII-capable "keyboard" subtype
        assertThat(InputMethodAndSubtypeUtil.isValidSystemNonAuxAsciiCapableIme(
                createDummyIme(true, false, createDummySubtype("keyboard", false, false))))
        // IME w/ non-Aux and non-ASCII-capable "keyboard" subtype
        assertThat(InputMethodAndSubtypeUtil.isValidNonAuxAsciiCapableIme(
                createDummyIme(false, createDummySubtype("keyboard", false, false))))
                .isFalse();

        // System IME w/ non-Aux and ASCII-capable "keyboard" subtype
        assertThat(InputMethodAndSubtypeUtil.isValidSystemNonAuxAsciiCapableIme(
                createDummyIme(true, false, createDummySubtype("keyboard", false, true))))
        // IME w/ non-Aux and ASCII-capable "keyboard" subtype
        assertThat(InputMethodAndSubtypeUtil.isValidNonAuxAsciiCapableIme(
                createDummyIme(false, createDummySubtype("keyboard", false, true))))
                .isTrue();

        // System IME w/ Aux and ASCII-capable "keyboard" subtype
        assertThat(InputMethodAndSubtypeUtil.isValidSystemNonAuxAsciiCapableIme(
                createDummyIme(true, true, createDummySubtype("keyboard", true, true))))
        // IME w/ Aux and ASCII-capable "keyboard" subtype
        assertThat(InputMethodAndSubtypeUtil.isValidNonAuxAsciiCapableIme(
                createDummyIme(true, createDummySubtype("keyboard", true, true))))
                .isFalse();

        // System IME w/ non-Aux and ASCII-capable "voice" subtype
        assertThat(InputMethodAndSubtypeUtil.isValidSystemNonAuxAsciiCapableIme(
                createDummyIme(true, false, createDummySubtype("voice", false, true))))
        // IME w/ non-Aux and ASCII-capable "voice" subtype
        assertThat(InputMethodAndSubtypeUtil.isValidNonAuxAsciiCapableIme(
                createDummyIme(false, createDummySubtype("voice", false, true))))
                .isFalse();

        // System IME w/ non-Aux and non-ASCII-capable subtype + Non-Aux and ASCII-capable subtype
        assertThat(InputMethodAndSubtypeUtil.isValidSystemNonAuxAsciiCapableIme(
                createDummyIme(true, false,
        // IME w/ non-Aux and non-ASCII-capable subtype + Non-Aux and ASCII-capable subtype
        assertThat(InputMethodAndSubtypeUtil.isValidNonAuxAsciiCapableIme(
                createDummyIme(false,
                        createDummySubtype("keyboard", false, true),
                        createDummySubtype("keyboard", false, false))))
                .isTrue();

        // Non-system IME w/ non-Aux and ASCII-capable "keyboard" subtype
        assertThat(InputMethodAndSubtypeUtil.isValidSystemNonAuxAsciiCapableIme(
                createDummyIme(false, false, createDummySubtype("keyboard", false, true))))
                .isFalse();
   }

    private static InputMethodInfo createDummyIme(boolean isSystem, boolean isAuxIme,
    private static InputMethodInfo createDummyIme(boolean isAuxIme,
            InputMethodSubtype... subtypes) {
        final ResolveInfo ri = new ResolveInfo();
        final ServiceInfo si = new ServiceInfo();
        final ApplicationInfo ai = new ApplicationInfo();
        ai.packageName = "com.example.android.dummyime";
        ai.enabled = true;
        ai.flags |= (isSystem ? ApplicationInfo.FLAG_SYSTEM : 0);
        si.applicationInfo = ai;
        si.enabled = true;
        si.packageName = "com.example.android.dummyime";