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

Commit 95993cde authored by Nate Myren's avatar Nate Myren Committed by Android (Google) Code Review
Browse files

Merge "Remove ECM check from isAccessibilityTargetAllowed" into main

parents c7397d65 fdb06bda
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() {