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

Commit a47f5c1a authored by Alex Johnston's avatar Alex Johnston
Browse files

Allow enabled IMEs to be disabled in Settings

* If an IME is not in the permitted IME list and is enabled,
  the user should be able to disable it.
* This prevents the IME from being stuck in a state where the
  user cannot disable it and as a result the user's device
  becomes uncompliant with their IT admin's policy.

Manual testing steps:
* Install TestDPC
* Set up work profile using TestDPC
* Install swiftkey in the work profile
* set permitted input methods (in TestDPC) to only system
* Use adb to enable Swiftkey
* Go to Settings and verify Swiftkey can be disabled
* Once disabled, verify Swiftkey cannot be re-enabled.

Bug: 180517539
Test: manual testing
Change-Id: I7bdd3a0c4fed4d16006445b7774fd1006cc2b569
parent fcdd955d
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -91,11 +91,19 @@ public final class AvailableVirtualKeyboardFragment extends SettingsPreferenceFr
        List<String> permittedList = mDpm.getPermittedInputMethodsForCurrentUser();
        final Context context = getPrefContext();
        final List<InputMethodInfo> imis = mInputMethodSettingValues.getInputMethodList();
        final List<InputMethodInfo> enabledImis = mImm.getEnabledInputMethodList();
        final int numImis = (imis == null ? 0 : imis.size());
        for (int i = 0; i < numImis; ++i) {
            final InputMethodInfo imi = imis.get(i);
            // TODO (b/182876800): Move this logic out of isAllowedByOrganization and
            // into a new boolean.
            // If an input method is enabled but not included in the permitted list, then set it as
            // allowed by organization. Doing so will allow the user to disable the input method and
            // remain complaint with the organization's policy. Once disabled, the input method
            // cannot be re-enabled because it is not in the permitted list.
            final boolean isAllowedByOrganization = permittedList == null
                    || permittedList.contains(imi.getPackageName());
                    || permittedList.contains(imi.getPackageName())
                    || enabledImis.contains(imi);
            final InputMethodPreference pref = new InputMethodPreference(
                    context, imi, true, isAllowedByOrganization, this);
            pref.setIcon(imi.loadIcon(context.getPackageManager()));