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

Commit 0e44239d authored by Daniel Norman's avatar Daniel Norman
Browse files

Never restricts Accessibility Activities based on ECM/admin.

Keeps accessibility activity preference as inheriting from
RestrictedPreference since it shares lots of behavior with the
accessibility service perference (same base class), but always
calls setEnabled(true) for activities.

Fix: 331990900
Flag: com.android.settings.accessibility.never_restrict_accessibility_activity
Test: atest RestrictedPreferenceHelperTest
Change-Id: I39971bc3f65aa630fa62a0e31132f177fd21b635
parent cadfc018
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -61,6 +61,16 @@ flag {
  }
}

flag {
  name: "never_restrict_accessibility_activity"
  namespace: "accessibility"
  description: "Stops possibly restricting AccessibilityActivityPreferences"
  bug: "331990900"
  metadata {
    purpose: PURPOSE_BUGFIX
  }
}

flag {
  name: "remove_qs_tooltip_in_suw"
  namespace: "accessibility"
+7 −1
Original line number Diff line number Diff line
@@ -128,7 +128,13 @@ public class RestrictedPreferenceHelper {
            AccessibilityActivityPreference preference = new AccessibilityActivityPreference(
                    mContext, componentName.getPackageName(), activityInfo.applicationInfo.uid,
                    info);
            if (Flags.neverRestrictAccessibilityActivity()) {
                // Accessibility Activities do not have elevated privileges so restricting
                // them based on ECM or device admin does not give any value.
                preference.setEnabled(true);
            } else {
                setRestrictedPreferenceEnabled(preference, permittedServices, serviceEnabled);
            }
            preferenceList.add(preference);
        }
        return preferenceList;
+38 −7
Original line number Diff line number Diff line
@@ -31,9 +31,8 @@ import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;

import androidx.test.core.app.ApplicationProvider;
@@ -83,8 +82,6 @@ public class RestrictedPreferenceHelperTest {

    @Rule
    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
    @Rule
    public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();

    @Test
    public void createAccessibilityServicePreferenceList_hasOneInfo_containsSameKey() {
@@ -100,7 +97,7 @@ public class RestrictedPreferenceHelperTest {
    }

    @Test
    @RequiresFlagsEnabled(value = {android.security.Flags.FLAG_EXTEND_ECM_TO_ALL_SETTINGS,
    @EnableFlags(value = {android.security.Flags.FLAG_EXTEND_ECM_TO_ALL_SETTINGS,
            android.permission.flags.Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED})
    public void createAccessibilityServicePreferenceList_ecmRestricted_prefIsEcmRestricted() {
        ShadowRestrictedLockUtilsInternal.setEcmRestrictedPkgs(
@@ -116,7 +113,7 @@ public class RestrictedPreferenceHelperTest {
    }

    @Test
    @RequiresFlagsEnabled(value = {android.security.Flags.FLAG_EXTEND_ECM_TO_ALL_SETTINGS,
    @EnableFlags(value = {android.security.Flags.FLAG_EXTEND_ECM_TO_ALL_SETTINGS,
            android.permission.flags.Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED})
    public void createAccessibilityServicePreferenceList_ecmNotRestricted_prefIsNotEcmRestricted() {
        ShadowRestrictedLockUtilsInternal.setEcmRestrictedPkgs();
@@ -144,6 +141,40 @@ public class RestrictedPreferenceHelperTest {
        assertThat(preference.getKey()).isEqualTo(key);
    }

    @Test
    @EnableFlags(value = {android.security.Flags.FLAG_EXTEND_ECM_TO_ALL_SETTINGS,
            android.permission.flags.Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED})
    @DisableFlags(Flags.FLAG_NEVER_RESTRICT_ACCESSIBILITY_ACTIVITY)
    public void createAccessibilityActivityPreference_ecmRestricted_prefIsEcmRestricted() {
        setMockAccessibilityShortcutInfo(mShortcutInfo);
        ShadowRestrictedLockUtilsInternal.setEcmRestrictedPkgs(PACKAGE_NAME);

        final List<AccessibilityActivityPreference> preferenceList =
                mHelper.createAccessibilityActivityPreferenceList(List.of(mShortcutInfo));
        assertThat(preferenceList).hasSize(1);
        final RestrictedPreference preference = preferenceList.get(0);

        assertThat(preference.isDisabledByEcm()).isTrue();
    }

    @Test
    @EnableFlags(value = {
            android.security.Flags.FLAG_EXTEND_ECM_TO_ALL_SETTINGS,
            android.permission.flags.Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED,
            Flags.FLAG_NEVER_RESTRICT_ACCESSIBILITY_ACTIVITY,
    })
    public void createAccessibilityActivityPreference_ecmRestricted_prefIsNotEcmRestricted() {
        setMockAccessibilityShortcutInfo(mShortcutInfo);
        ShadowRestrictedLockUtilsInternal.setEcmRestrictedPkgs(PACKAGE_NAME);

        final List<AccessibilityActivityPreference> preferenceList =
                mHelper.createAccessibilityActivityPreferenceList(List.of(mShortcutInfo));
        assertThat(preferenceList).hasSize(1);
        final RestrictedPreference preference = preferenceList.get(0);

        assertThat(preference.isDisabledByEcm()).isFalse();
    }

    private AccessibilityServiceInfo getMockAccessibilityServiceInfo(String packageName,
            String className) {
        final ApplicationInfo applicationInfo = new ApplicationInfo();