diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java index bba8667e0c0ea..fdadc8de717fd 100644 --- a/services/core/java/com/android/server/vr/VrManagerService.java +++ b/services/core/java/com/android/server/vr/VrManagerService.java @@ -219,6 +219,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC String packageName = mNotificationAccessPackageToUserId.keyAt(i); revokeNotificationListenerAccess(packageName, grantUserId); revokeNotificationPolicyAccess(packageName); + revokeCoarseLocationPermissionIfNeeded(packageName, grantUserId); mNotificationAccessPackageToUserId.removeAt(i); } } @@ -227,6 +228,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC if (!packageNames.contains(pkg)) { revokeNotificationListenerAccess(pkg, currentUserId); revokeNotificationPolicyAccess(pkg); + revokeCoarseLocationPermissionIfNeeded(pkg, currentUserId); mNotificationAccessPackageToUserId.remove(pkg); } } @@ -234,6 +236,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC if (!allowed.contains(pkg)) { grantNotificationPolicyAccess(pkg); grantNotificationListenerAccess(pkg, currentUserId); + grantCoarseLocationPermissionIfNeeded(pkg, currentUserId); mNotificationAccessPackageToUserId.put(pkg, currentUserId); } } @@ -657,6 +660,22 @@ public class VrManagerService extends SystemService implements EnabledComponentC flatSettings, userId); } + private void grantCoarseLocationPermissionIfNeeded(String pkg, int userId) { + // Don't clobber the user if permission set in current state explicitly + if (!isPermissionUserUpdated(Manifest.permission.ACCESS_COARSE_LOCATION, pkg, userId)) { + mContext.getPackageManager().grantRuntimePermission(pkg, + Manifest.permission.ACCESS_COARSE_LOCATION, new UserHandle(userId)); + } + } + + private void revokeCoarseLocationPermissionIfNeeded(String pkg, int userId) { + // Don't clobber the user if permission set in current state explicitly + if (!isPermissionUserUpdated(Manifest.permission.ACCESS_COARSE_LOCATION, pkg, userId)) { + mContext.getPackageManager().revokeRuntimePermission(pkg, + Manifest.permission.ACCESS_COARSE_LOCATION, new UserHandle(userId)); + } + } + private boolean isPermissionUserUpdated(String permission, String pkg, int userId) { final int flags = mContext.getPackageManager().getPermissionFlags( permission, pkg, new UserHandle(userId));