summaryrefslogtreecommitdiff
path: root/services/restrictions
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2014-07-18 15:19:22 -0700
committerAmith Yamasani <yamasani@google.com>2014-07-22 00:03:39 +0000
commit9c44933958bc03b93eac2452b26dd75567581b86 (patch)
tree4e00f58d12fb315453de38e4254f1428d3cd8dde /services/restrictions
parent79bf7284b9e4467cab87fd80fc2638f73a26f873 (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.java40
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();