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

Commit fdb06bda authored by Nate Myren's avatar Nate Myren
Browse files

Remove ECM check from isAccessibilityTargetAllowed

This check is redundant, as we already check ECM at enable time, and it
is causing issues with the new in-call ECM restricted state

Fixes: 389147067
Test: atest AccessibilityManagerServiceTest, AccessibilityManagerTest
Flag: EXEMPT beta 2 cherry pick
Change-Id: I3945d94138200a7d0be4af7a1cdd7f6b7da600e0
parent bba20c69
Loading
Loading
Loading
Loading
+1 −33
Original line number Diff line number Diff line
@@ -5084,39 +5084,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
            final List<String> permittedServices = dpm.getPermittedAccessibilityServices(userId);

            // permittedServices null means all accessibility services are allowed.
            boolean allowed = permittedServices == null || permittedServices.contains(packageName);
            if (allowed) {
                if (android.permission.flags.Flags.enhancedConfirmationModeApisEnabled()
                        && android.security.Flags.extendEcmToAllSettings()) {
                    try {
                        final EnhancedConfirmationManager userContextEcm =
                                mContext.createContextAsUser(UserHandle.of(userId), /* flags = */ 0)
                                        .getSystemService(EnhancedConfirmationManager.class);
                        if (userContextEcm != null) {
                            return !userContextEcm.isRestricted(packageName,
                                    AppOpsManager.OPSTR_BIND_ACCESSIBILITY_SERVICE);
                        }
                        return false;
                    } catch (PackageManager.NameNotFoundException e) {
                        Log.e(LOG_TAG, "Exception when retrieving package:" + packageName, e);
                        return false;
                    }
                } else {
                    try {
                        final int mode = mContext.getSystemService(AppOpsManager.class)
                                .noteOpNoThrow(AppOpsManager.OP_ACCESS_RESTRICTED_SETTINGS,
                                        uid, packageName);
                        final boolean ecmEnabled = mContext.getResources().getBoolean(
                                com.android.internal.R.bool.config_enhancedConfirmationModeEnabled);
                        return !ecmEnabled || mode == AppOpsManager.MODE_ALLOWED
                                || mode == AppOpsManager.MODE_DEFAULT;
                    } catch (Exception e) {
                        // Fallback in case if app ops is not available in testing.
                        return false;
                    }
                }
            }
            return false;
            return permittedServices == null || permittedServices.contains(packageName);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
+0 −18
Original line number Diff line number Diff line
@@ -68,7 +68,6 @@ import android.annotation.UserIdInt;
import android.app.PendingIntent;
import android.app.RemoteAction;
import android.app.admin.DevicePolicyManager;
import android.app.ecm.EnhancedConfirmationManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -2119,23 +2118,6 @@ public class AccessibilityManagerServiceTest {
                .isEqualTo(SOFTWARE);
    }

    @Test
    @EnableFlags({android.permission.flags.Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED,
            android.security.Flags.FLAG_EXTEND_ECM_TO_ALL_SETTINGS})
    public void isAccessibilityTargetAllowed_nonSystemUserId_useEcmWithNonSystemUserId() {
        String fakePackageName = "FAKE_PACKAGE_NAME";
        int uid = 0; // uid is not used in the actual implementation when flags are on
        int userId = mTestableContext.getUserId() + 1234;
        when(mDevicePolicyManager.getPermittedAccessibilityServices(userId)).thenReturn(
                List.of(fakePackageName));
        Context mockUserContext = mock(Context.class);
        mTestableContext.addMockUserContext(userId, mockUserContext);

        mA11yms.isAccessibilityTargetAllowed(fakePackageName, uid, userId);

        verify(mockUserContext).getSystemService(EnhancedConfirmationManager.class);
    }

    @Test
    @EnableFlags(com.android.hardware.input.Flags.FLAG_ENABLE_TALKBACK_AND_MAGNIFIER_KEY_GESTURES)
    public void handleKeyGestureEvent_toggleMagnifier() {