diff options
| author | Eugene Susla <eugenesusla@google.com> | 2019-05-14 13:22:19 -0700 |
|---|---|---|
| committer | Eugene Susla <eugenesusla@google.com> | 2019-05-16 12:46:09 -0700 |
| commit | e7daff9fa385c2d455d3542a970d76e7316a44c5 (patch) | |
| tree | bd069dbe38e19bd32b078fe3a63c9586da74551b /core/java/android/permission/PermissionControllerService.java | |
| parent | 1d3f600dc0ac79988bab14bd92478c0c101ff204 (diff) | |
Replace RemoteCallback with AndroidFuture in PermControler
- saves ~3 allocation per ipc
- no longer need to [un]bundleize result
- will become typesafe down the road (b/132732312)
Test: atest android.permission.cts.PermissionControllerTest
Change-Id: I6cd9ec5ae31179474536f22f557afb0d9db6a4b9
Diffstat (limited to 'core/java/android/permission/PermissionControllerService.java')
| -rw-r--r-- | core/java/android/permission/PermissionControllerService.java | 82 |
1 files changed, 20 insertions, 62 deletions
diff --git a/core/java/android/permission/PermissionControllerService.java b/core/java/android/permission/PermissionControllerService.java index 8ae93a7f4cea..c9a1c38448c6 100644 --- a/core/java/android/permission/PermissionControllerService.java +++ b/core/java/android/permission/PermissionControllerService.java @@ -41,12 +41,13 @@ import android.content.pm.PackageManager; import android.os.Bundle; import android.os.IBinder; import android.os.ParcelFileDescriptor; -import android.os.RemoteCallback; import android.os.UserHandle; import android.permission.PermissionControllerManager.CountPermissionAppsFlag; import android.util.ArrayMap; import android.util.Log; +import com.android.internal.infra.AndroidFuture; +import com.android.internal.util.CollectionUtils; import com.android.internal.util.Preconditions; import java.io.IOException; @@ -209,7 +210,7 @@ public abstract class PermissionControllerService extends Service { @Override public void revokeRuntimePermissions( Bundle bundleizedRequest, boolean doDryRun, int reason, - String callerPackageName, RemoteCallback callback) { + String callerPackageName, AndroidFuture callback) { checkNotNull(bundleizedRequest, "bundleizedRequest"); checkNotNull(callerPackageName); checkNotNull(callback); @@ -237,22 +238,11 @@ public abstract class PermissionControllerService extends Service { onRevokeRuntimePermissions(request, doDryRun, reason, callerPackageName, revoked -> { - checkNotNull(revoked); - Bundle bundledizedRevoked = new Bundle(); - for (Map.Entry<String, List<String>> appRevocation : - revoked.entrySet()) { - checkNotNull(appRevocation.getKey()); - checkCollectionElementsNotNull(appRevocation.getValue(), - "permissions"); - - bundledizedRevoked.putStringArrayList(appRevocation.getKey(), - new ArrayList<>(appRevocation.getValue())); - } - - Bundle result = new Bundle(); - result.putBundle(PermissionControllerManager.KEY_RESULT, - bundledizedRevoked); - callback.sendResult(result); + CollectionUtils.forEach(revoked, (pkg, perms) -> { + Preconditions.checkNotNull(pkg); + Preconditions.checkCollectionElementsNotNull(perms, "permissions"); + }); + callback.complete(revoked); }); } @@ -294,40 +284,24 @@ public abstract class PermissionControllerService extends Service { @Override public void restoreDelayedRuntimePermissionBackup(String packageName, UserHandle user, - RemoteCallback callback) { + AndroidFuture callback) { checkNotNull(packageName); checkNotNull(user); checkNotNull(callback); enforceCallingPermission(Manifest.permission.GRANT_RUNTIME_PERMISSIONS, null); - onRestoreDelayedRuntimePermissionsBackup(packageName, user, - hasMoreBackup -> { - Bundle result = new Bundle(); - result.putBoolean(PermissionControllerManager.KEY_RESULT, - hasMoreBackup); - callback.sendResult(result); - }); + onRestoreDelayedRuntimePermissionsBackup(packageName, user, callback::complete); } @Override - public void getAppPermissions(String packageName, RemoteCallback callback) { + public void getAppPermissions(String packageName, AndroidFuture callback) { checkNotNull(packageName, "packageName"); checkNotNull(callback, "callback"); enforceCallingPermission(Manifest.permission.GET_RUNTIME_PERMISSIONS, null); - onGetAppPermissions(packageName, - permissions -> { - if (permissions != null && !permissions.isEmpty()) { - Bundle result = new Bundle(); - result.putParcelableList(PermissionControllerManager.KEY_RESULT, - permissions); - callback.sendResult(result); - } else { - callback.sendResult(null); - } - }); + onGetAppPermissions(packageName, callback::complete); } @Override @@ -349,43 +323,31 @@ public abstract class PermissionControllerService extends Service { @Override public void countPermissionApps(List<String> permissionNames, int flags, - RemoteCallback callback) { + AndroidFuture callback) { checkCollectionElementsNotNull(permissionNames, "permissionNames"); checkFlagsArgument(flags, COUNT_WHEN_SYSTEM | COUNT_ONLY_WHEN_GRANTED); checkNotNull(callback, "callback"); enforceCallingPermission(Manifest.permission.GET_RUNTIME_PERMISSIONS, null); - onCountPermissionApps(permissionNames, flags, numApps -> { - Bundle result = new Bundle(); - result.putInt(PermissionControllerManager.KEY_RESULT, numApps); - callback.sendResult(result); - }); + onCountPermissionApps(permissionNames, flags, callback::complete); } @Override public void getPermissionUsages(boolean countSystem, long numMillis, - RemoteCallback callback) { + AndroidFuture callback) { checkArgumentNonnegative(numMillis); checkNotNull(callback, "callback"); enforceCallingPermission(Manifest.permission.GET_RUNTIME_PERMISSIONS, null); - onGetPermissionUsages(countSystem, numMillis, users -> { - if (users != null && !users.isEmpty()) { - Bundle result = new Bundle(); - result.putParcelableList(PermissionControllerManager.KEY_RESULT, users); - callback.sendResult(result); - } else { - callback.sendResult(null); - } - }); + onGetPermissionUsages(countSystem, numMillis, callback::complete); } @Override public void setRuntimePermissionGrantStateByDeviceAdmin(String callerPackageName, String packageName, String permission, int grantState, - RemoteCallback callback) { + AndroidFuture callback) { checkStringNotEmpty(callerPackageName); checkStringNotEmpty(packageName); checkStringNotEmpty(permission); @@ -406,21 +368,17 @@ public abstract class PermissionControllerService extends Service { null); onSetRuntimePermissionGrantStateByDeviceAdmin(callerPackageName, - packageName, permission, grantState, wasSet -> { - Bundle result = new Bundle(); - result.putBoolean(PermissionControllerManager.KEY_RESULT, wasSet); - callback.sendResult(result); - }); + packageName, permission, grantState, callback::complete); } @Override - public void grantOrUpgradeDefaultRuntimePermissions(@NonNull RemoteCallback callback) { + public void grantOrUpgradeDefaultRuntimePermissions(@NonNull AndroidFuture callback) { checkNotNull(callback, "callback"); enforceCallingPermission(Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, null); - onGrantOrUpgradeDefaultRuntimePermissions(() -> callback.sendResult(Bundle.EMPTY)); + onGrantOrUpgradeDefaultRuntimePermissions(() -> callback.complete(null)); } }; } |
