From cae8cdf91a740b38a708f330ff5c63921ac85450 Mon Sep 17 00:00:00 2001 From: Craig Donner Date: Thu, 28 Jul 2016 22:39:05 +0000 Subject: [PATCH] Revert "Remove coarse location pre-grant for preinstalled VrListenerServices." Bug: 30480340 This reverts commit d430f1a0be42bbf85fe75578a871d920ff922770. Change-Id: I97cbc7cef715aca92dbe8a590177f74a98bb04f7 --- .../android/server/vr/VrManagerService.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java index 7d209318c0862..95c5033843b97 100644 --- a/services/core/java/com/android/server/vr/VrManagerService.java +++ b/services/core/java/com/android/server/vr/VrManagerService.java @@ -218,6 +218,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC String packageName = mNotificationAccessPackageToUserId.keyAt(i); revokeNotificationListenerAccess(packageName, grantUserId); revokeNotificationPolicyAccess(packageName); + revokeCoarseLocationPermissionIfNeeded(packageName, grantUserId); mNotificationAccessPackageToUserId.removeAt(i); } } @@ -226,6 +227,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC if (!packageNames.contains(pkg)) { revokeNotificationListenerAccess(pkg, currentUserId); revokeNotificationPolicyAccess(pkg); + revokeCoarseLocationPermissionIfNeeded(pkg, currentUserId); mNotificationAccessPackageToUserId.remove(pkg); } } @@ -233,6 +235,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC if (!allowed.contains(pkg)) { grantNotificationPolicyAccess(pkg); grantNotificationListenerAccess(pkg, currentUserId); + grantCoarseLocationPermissionIfNeeded(pkg, currentUserId); mNotificationAccessPackageToUserId.put(pkg, currentUserId); } } @@ -656,6 +659,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));