summaryrefslogtreecommitdiffstats
path: root/services/devicepolicy
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2015-05-22 13:00:51 -0700
committerAmith Yamasani <yamasani@google.com>2015-05-22 13:55:57 -0700
commit184b3753de54241c67799089f5bc59a1ede4438a (patch)
tree974f857c7e0e88ef2236a71c9b2c0bdf688ba402 /services/devicepolicy
parentb0eb08b521d2b76531df3946cece002ed72fa363 (diff)
downloadframeworks_base-184b3753de54241c67799089f5bc59a1ede4438a.zip
frameworks_base-184b3753de54241c67799089f5bc59a1ede4438a.tar.gz
frameworks_base-184b3753de54241c67799089f5bc59a1ede4438a.tar.bz2
Add getPermissionGrantState method in device policy
This is to have a way to query what permission state was set by the profile owner. Bug: 21356830 Change-Id: Ie396e946b4285267c1d95f82b9d9765b43697d3c
Diffstat (limited to 'services/devicepolicy')
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java30
1 files changed, 30 insertions, 0 deletions
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index a9e76d8..fc09db3 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -6429,4 +6429,34 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
}
}
}
+
+ @Override
+ public int getPermissionGrantState(ComponentName admin, String packageName,
+ String permission) throws RemoteException {
+ PackageManager packageManager = mContext.getPackageManager();
+
+ // Do this before clearing the caller's identity
+ int granted = packageManager.checkPermission(permission, packageName);
+
+ UserHandle user = Binder.getCallingUserHandle();
+ synchronized (this) {
+ getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+ long ident = Binder.clearCallingIdentity();
+ try {
+ int permFlags = packageManager.getPermissionFlags(permission, packageName, user);
+ if ((permFlags & PackageManager.FLAG_PERMISSION_POLICY_FIXED)
+ != PackageManager.FLAG_PERMISSION_POLICY_FIXED) {
+ // Not controlled by policy
+ return DevicePolicyManager.PERMISSION_GRANT_STATE_DEFAULT;
+ } else {
+ // Policy controlled so return result based on permission grant state
+ return granted == PackageManager.PERMISSION_GRANTED
+ ? DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED
+ : DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED;
+ }
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+ }
}