From db9f5e553fc8fc1bd683aac053be70c33eb7d273 Mon Sep 17 00:00:00 2001 From: Vladimir Komsiyski Date: Tue, 11 Mar 2025 00:21:47 -0700 Subject: Exhaustive multi-device permission CTS - Fix GrantPermissionsActivity for non-device-aware permissions. Such requests should not be ignored, but should fallback to the default device. - Fix the permission check for passing grant results. When requesting default device aware permission from virtual device, the call to checkPermission uses the wrong context. It can simply use mPackageManager, which is always associated with the target device. Fix: 401540899 Test: atest Relnote: n/a Flag: EXEMPT bugfix Change-Id: Ib5de5ce0cf09f6ad1e445b01ca2443bf102ab598 --- .../permission/ui/GrantPermissionsActivity.java | 33 +++------------------- 1 file changed, 4 insertions(+), 29 deletions(-) (limited to 'PermissionController') diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java index 7573b571d..0dd07ffd0 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java @@ -311,10 +311,8 @@ public class GrantPermissionsActivity extends SettingsActivity PackageManager.EXTRA_REQUEST_PERMISSIONS_DEVICE_ID, ContextCompat.DEVICE_ID_DEFAULT); - if (mTargetDeviceId != ContextCompat.DEVICE_ID_DEFAULT) { - mPackageManager = ContextCompat.createDeviceContext(this, mTargetDeviceId) - .getPackageManager(); - } + mPackageManager = ContextCompat.createDeviceContext(this, mTargetDeviceId) + .getPackageManager(); // When the permission grant dialog is streamed to a virtual device, and when requested // permissions include both device-aware permissions and non-device aware permissions, @@ -337,21 +335,6 @@ public class GrantPermissionsActivity extends SettingsActivity new Intent(this, PermissionDialogStreamingBlockedActivity.class)); return; } - } else if (mTargetDeviceId != ContextCompat.DEVICE_ID_DEFAULT) { - // On the default device, when requested permissions are for a remote device, - // filter out non-device aware permissions. - for (int i = mRequestedPermissions.size() - 1; i >= 0; i--) { - if (!MultiDeviceUtils.isPermissionDeviceAware( - getApplicationContext(), - mTargetDeviceId, - mRequestedPermissions.get(i))) { - Log.e( - LOG_TAG, - "non-device aware permission is requested for a remote device: " - + mRequestedPermissions.get(i)); - mRequestedPermissions.remove(i); - } - } } } @@ -740,7 +723,7 @@ public class GrantPermissionsActivity extends SettingsActivity int dialogDisplayDeviceId = ContextCompat.getDeviceId(this); boolean isMessageDeviceAware = dialogDisplayDeviceId != ContextCompat.DEVICE_ID_DEFAULT - || dialogDisplayDeviceId != mTargetDeviceId; + || dialogDisplayDeviceId != info.getDeviceId(); int messageId = getMessageId(info.getGroupName(), info.getPrompt(), isMessageDeviceAware); CharSequence message = @@ -1132,17 +1115,9 @@ public class GrantPermissionsActivity extends SettingsActivity if ((mDelegated || (mViewModel != null && mViewModel.shouldReturnPermissionState())) && mTargetPackage != null) { - PackageManager defaultDevicePackageManager = SdkLevel.isAtLeastV() - && mTargetDeviceId != ContextCompat.DEVICE_ID_DEFAULT - ? createDeviceContext(ContextCompat.DEVICE_ID_DEFAULT).getPackageManager() - : mPackageManager; - PackageManager targetDevicePackageManager = mPackageManager; for (int i = 0; i < resultPermissions.length; i++) { String permission = resultPermissions[i]; - PackageManager pm = MultiDeviceUtils.isPermissionDeviceAware( - getApplicationContext(), mTargetDeviceId, permission) - ? targetDevicePackageManager : defaultDevicePackageManager; - grantResults[i] = pm.checkPermission(resultPermissions[i], mTargetPackage); + grantResults[i] = mPackageManager.checkPermission(permission, mTargetPackage); } } else { grantResults = new int[0]; -- cgit v1.2.3-59-g8ed1b