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

Commit b6326496 authored by Vladimir Komsiyski's avatar Vladimir Komsiyski
Browse files

Fix device-aware permissions inconsistencies

 - PackageManager#checkPermission should be in sync with
   Context#checkPermission - now they potentially use different
   deviceIds for non-device-aware permissions

Bug: 401540899
Test: atest
Flag: EXEMPT bugfix
Change-Id: I12af4db683c43575116cbef03133163a561f1045
parent bb7f1622
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -2473,11 +2473,9 @@ class ContextImpl extends Context {
    @Override
    public int getPermissionRequestState(String permission) {
        Objects.requireNonNull(permission, "Permission name can't be null");
        int deviceId = PermissionManager.resolveDeviceIdForPermissionCheck(this, getDeviceId(),
                permission);
        PermissionManager permissionManager = getSystemService(PermissionManager.class);
        return permissionManager.getPermissionRequestState(getOpPackageName(), permission,
                deviceId);
                getDeviceId());
    }

    @Override
+4 −2
Original line number Diff line number Diff line
@@ -1907,8 +1907,9 @@ public final class PermissionManager {
    @Context.PermissionRequestState
    public int getPermissionRequestState(@NonNull String packageName, @NonNull String permission,
            int deviceId) {
        int actualDeviceId = resolveDeviceIdForPermissionCheck(mContext, deviceId, permission);
        return sPermissionRequestStateCache.query(
                new PermissionRequestStateQuery(packageName, permission, deviceId));
                new PermissionRequestStateQuery(packageName, permission, actualDeviceId));
    }

    /**
@@ -2035,7 +2036,8 @@ public final class PermissionManager {
     */
    public int checkPackageNamePermission(String permName, String pkgName,
            int deviceId, @UserIdInt int userId) {
        String persistentDeviceId = getPersistentDeviceId(deviceId);
        int actualDeviceId = resolveDeviceIdForPermissionCheck(mContext, deviceId, permName);
        String persistentDeviceId = getPersistentDeviceId(actualDeviceId);
        return sPackageNamePermissionCache.query(
                new PackageNamePermissionQuery(permName, pkgName, persistentDeviceId, userId));
    }