diff options
author | Amith Yamasani <yamasani@google.com> | 2015-05-22 13:00:51 -0700 |
---|---|---|
committer | Amith Yamasani <yamasani@google.com> | 2015-05-22 13:55:57 -0700 |
commit | 184b3753de54241c67799089f5bc59a1ede4438a (patch) | |
tree | 974f857c7e0e88ef2236a71c9b2c0bdf688ba402 /services/devicepolicy | |
parent | b0eb08b521d2b76531df3946cece002ed72fa363 (diff) | |
download | frameworks_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.java | 30 |
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); + } + } + } } |