From 3fb13a1f826c4d0194fca63cae36259de24f8f4c Mon Sep 17 00:00:00 2001 From: Nate Myren Date: Wed, 11 Dec 2019 12:30:39 -0800 Subject: [PATCH] Send correct UID on perm flag update Ensure that the correct per-user UID (not the appId) is used when notifying permission change listeners of a permission flag update. Fixes: 145945426 Test: In a secondary user, navigate to the permission groups page of a pre-M application, and grant or revoke a permission. The permission UI should update upon backing out of the App Permission Screen. Change-Id: If540a5e87f915a7cc6aa400b33aa178c2e30f5b9 --- .../server/pm/permission/PermissionManagerService.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 5adb64876ad40..8ce1a52afd0c4 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -321,7 +321,10 @@ public class PermissionManagerService extends IPermissionManager.Stub { public void onPermissionUpdatedNotifyListener(@UserIdInt int[] updatedUserIds, boolean sync, int uid) { onPermissionUpdated(updatedUserIds, sync); - mOnPermissionChangeListeners.onPermissionsChanged(uid); + for (int i = 0; i < updatedUserIds.length; i++) { + int userUid = UserHandle.getUid(updatedUserIds[i], UserHandle.getAppId(uid)); + mOnPermissionChangeListeners.onPermissionsChanged(userUid); + } } public void onInstallPermissionUpdatedNotifyListener(int uid) { onInstallPermissionUpdated(); @@ -733,7 +736,8 @@ public class PermissionManagerService extends IPermissionManager.Stub { // Install and runtime permissions are stored in different places, // so figure out what permission changed and persist the change. if (permissionsState.getInstallPermissionState(permName) != null) { - callback.onInstallPermissionUpdatedNotifyListener(pkg.getUid()); + int userUid = UserHandle.getUid(userId, UserHandle.getAppId(pkg.getUid())); + callback.onInstallPermissionUpdatedNotifyListener(userUid); } else if (permissionsState.getRuntimePermissionState(permName, userId) != null || hadState) { callback.onPermissionUpdatedNotifyListener(new int[]{userId}, false,