diff options
author | Amith Yamasani <yamasani@google.com> | 2014-07-18 15:19:22 -0700 |
---|---|---|
committer | Amith Yamasani <yamasani@google.com> | 2014-07-22 00:03:39 +0000 |
commit | 9c44933958bc03b93eac2452b26dd75567581b86 (patch) | |
tree | 4e00f58d12fb315453de38e4254f1428d3cd8dde /services/restrictions | |
parent | 79bf7284b9e4467cab87fd80fc2638f73a26f873 (diff) |
API Review: Improvements to RestrictionsManager API
Use an activity intent for local approval instead of a type.
Use PeristableBundle instead of Bundle.
Pass requestId as an explicit argument in cases where it's required.
Bug: 16400892
Change-Id: Id882033f17c39aa9cd63a7eeb73bb7b51f98cf5b
Diffstat (limited to 'services/restrictions')
-rw-r--r-- | services/restrictions/java/com/android/server/restrictions/RestrictionsManagerService.java | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/services/restrictions/java/com/android/server/restrictions/RestrictionsManagerService.java b/services/restrictions/java/com/android/server/restrictions/RestrictionsManagerService.java index 4fe30e675cd4..fb29b6ae3e5e 100644 --- a/services/restrictions/java/com/android/server/restrictions/RestrictionsManagerService.java +++ b/services/restrictions/java/com/android/server/restrictions/RestrictionsManagerService.java @@ -40,6 +40,7 @@ import android.os.Binder; import android.os.Bundle; import android.os.IBinder; import android.os.IUserManager; +import android.os.PersistableBundle; import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; @@ -103,7 +104,8 @@ public final class RestrictionsManagerService extends SystemService { @Override public void requestPermission(final String packageName, final String requestType, - final Bundle requestData) throws RemoteException { + final String requestId, + final PersistableBundle requestData) throws RemoteException { if (DEBUG) { Log.i(LOG_TAG, "requestPermission"); } @@ -127,6 +129,7 @@ public final class RestrictionsManagerService extends SystemService { intent.setComponent(restrictionsProvider); intent.putExtra(RestrictionsManager.EXTRA_PACKAGE_NAME, packageName); intent.putExtra(RestrictionsManager.EXTRA_REQUEST_TYPE, requestType); + intent.putExtra(RestrictionsManager.EXTRA_REQUEST_ID, requestId); intent.putExtra(RestrictionsManager.EXTRA_REQUEST_BUNDLE, requestData); mContext.sendBroadcastAsUser(intent, new UserHandle(userHandle)); } finally { @@ -136,7 +139,40 @@ public final class RestrictionsManagerService extends SystemService { } @Override - public void notifyPermissionResponse(String packageName, Bundle response) + public Intent getLocalApprovalIntent() throws RemoteException { + if (DEBUG) { + Log.i(LOG_TAG, "requestPermission"); + } + final int userHandle = UserHandle.getCallingUserId(); + if (mDpm != null) { + long ident = Binder.clearCallingIdentity(); + try { + ComponentName restrictionsProvider = + mDpm.getRestrictionsProvider(userHandle); + // Check if there is a restrictions provider + if (restrictionsProvider == null) { + throw new IllegalStateException( + "Cannot request permission without a restrictions provider registered"); + } + String providerPackageName = restrictionsProvider.getPackageName(); + Intent intent = new Intent(RestrictionsManager.ACTION_REQUEST_LOCAL_APPROVAL); + intent.setPackage(providerPackageName); + ResolveInfo ri = AppGlobals.getPackageManager().resolveIntent(intent, + null /* resolvedType */, 0 /* flags */, userHandle); + if (ri != null && ri.activityInfo != null && ri.activityInfo.exported) { + intent.setComponent(new ComponentName(ri.activityInfo.packageName, + ri.activityInfo.name)); + return intent; + } + } finally { + Binder.restoreCallingIdentity(ident); + } + } + return null; + } + + @Override + public void notifyPermissionResponse(String packageName, PersistableBundle response) throws RemoteException { // Check caller int callingUid = Binder.getCallingUid(); |