diff options
| author | Nate Myren <ntmyren@google.com> | 2021-04-26 17:02:47 -0700 |
|---|---|---|
| committer | Nate Myren <ntmyren@google.com> | 2021-04-26 17:51:11 -0700 |
| commit | 599d4db0bda72950c79ac8077fc0d0f6be0aff02 (patch) | |
| tree | eb83625b8dc10a9e97c1fd50c26b7cf6c9c3e680 /core/java | |
| parent | c72ac760e1e3133689e6a62611f9ccf6a5cf4f13 (diff) | |
Add Executor to Permission Group methods in PermissionControllerManager
Test: atest GetPermissionGroupInfoTest
Fixes: 185177089
Change-Id: I6b3ff9c02d013ee48dc2f7f39d556cc6da0edac4
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/permission/PermissionControllerManager.java | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/core/java/android/permission/PermissionControllerManager.java b/core/java/android/permission/PermissionControllerManager.java index a56e821889e0..ca132e975e85 100644 --- a/core/java/android/permission/PermissionControllerManager.java +++ b/core/java/android/permission/PermissionControllerManager.java @@ -725,12 +725,14 @@ public final class PermissionControllerManager { * Get the platform permissions which belong to a particular permission group. * * @param permissionGroupName The permission group whose permissions are desired + * @param executor Executor on which to invoke the callback * @param callback A callback which will receive a list of the platform permissions in the * group, or empty if the group is not a valid platform group, or there * was an exception. */ @RequiresPermission(Manifest.permission.GET_RUNTIME_PERMISSION_GROUP_MAPPING) public void getPlatformPermissionsForGroup(@NonNull String permissionGroupName, + @NonNull @CallbackExecutor Executor executor, @NonNull Consumer<List<String>> callback) { enforceSomePermissionsGrantedToSelf( Manifest.permission.GET_RUNTIME_PERMISSION_GROUP_MAPPING); @@ -738,14 +740,19 @@ public final class PermissionControllerManager { AndroidFuture<List<String>> future = new AndroidFuture<>(); service.getPlatformPermissionsForGroup(permissionGroupName, future); return future; - }).whenComplete((result, err) -> { - if (err != null) { - Log.e(TAG, "Failed to get permissions of " + permissionGroupName, err); - callback.accept(new ArrayList<>()); - } else { - callback.accept(result); + }).whenCompleteAsync((result, err) -> { + final long token = Binder.clearCallingIdentity(); + try { + if (err != null) { + Log.e(TAG, "Failed to get permissions of " + permissionGroupName, err); + callback.accept(new ArrayList<>()); + } else { + callback.accept(result); + } + } finally { + Binder.restoreCallingIdentity(token); } - }); + }, executor); } /** @@ -753,26 +760,32 @@ public final class PermissionControllerManager { * permission. * * @param permissionName The permission name whose group is desired + * @param executor Executor on which to invoke the callback * @param callback A callback which will receive the name of the permission group this * permission belongs to, or null if it has no group, is not a platform * permission, or there was an exception. */ @RequiresPermission(Manifest.permission.GET_RUNTIME_PERMISSION_GROUP_MAPPING) public void getGroupOfPlatformPermission(@NonNull String permissionName, - @NonNull Consumer<String> callback) { + @NonNull @CallbackExecutor Executor executor, @NonNull Consumer<String> callback) { enforceSomePermissionsGrantedToSelf( Manifest.permission.GET_RUNTIME_PERMISSION_GROUP_MAPPING); mRemoteService.postAsync(service -> { AndroidFuture<String> future = new AndroidFuture<>(); service.getGroupOfPlatformPermission(permissionName, future); return future; - }).whenComplete((result, err) -> { - if (err != null) { - Log.e(TAG, "Failed to get group of " + permissionName, err); - callback.accept(null); - } else { - callback.accept(result); + }).whenCompleteAsync((result, err) -> { + final long token = Binder.clearCallingIdentity(); + try { + if (err != null) { + Log.e(TAG, "Failed to get group of " + permissionName, err); + callback.accept(null); + } else { + callback.accept(result); + } + } finally { + Binder.restoreCallingIdentity(token); } - }); + }, executor); } } |
