Loading core/api/system-current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -8766,6 +8766,8 @@ package android.permission { public final class PermissionControllerManager { method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.RESTORE_RUNTIME_PERMISSIONS}) public void applyStagedRuntimePermissionBackup(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>); method @Nullable public String getGroupOfPlatformPermission(@NonNull String); method @NonNull public java.util.Set<java.lang.String> getPlatformPermissionsForGroup(@NonNull String); method @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public void getRuntimePermissionBackup(@NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<byte[]>); method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>, boolean, int, @NonNull java.util.concurrent.Executor, @NonNull android.permission.PermissionControllerManager.OnRevokeRuntimePermissionsCallback); method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.RESTORE_RUNTIME_PERMISSIONS}) public void stageAndApplyRuntimePermissionsBackup(@NonNull byte[], @NonNull android.os.UserHandle); Loading @@ -8787,7 +8789,9 @@ package android.permission { method @NonNull public final android.os.IBinder onBind(android.content.Intent); method @BinderThread public abstract void onCountPermissionApps(@NonNull java.util.List<java.lang.String>, int, @NonNull java.util.function.IntConsumer); method @BinderThread public abstract void onGetAppPermissions(@NonNull String, @NonNull java.util.function.Consumer<java.util.List<android.permission.RuntimePermissionPresentationInfo>>); method @BinderThread public void onGetGroupOfPlatformPermission(@NonNull String, @NonNull java.util.function.Consumer<java.lang.String>); method @BinderThread public abstract void onGetPermissionUsages(boolean, long, @NonNull java.util.function.Consumer<java.util.List<android.permission.RuntimePermissionUsageInfo>>); method @BinderThread public void onGetPlatformPermissionsForGroup(@NonNull String, @NonNull java.util.function.Consumer<java.util.List<java.lang.String>>); method @BinderThread public abstract void onGetRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.OutputStream, @NonNull Runnable); method @BinderThread public abstract void onGrantOrUpgradeDefaultRuntimePermissions(@NonNull Runnable); method @BinderThread public void onOneTimePermissionSessionTimeout(@NonNull String); core/java/android/permission/IPermissionController.aidl +6 −0 Original line number Diff line number Diff line Loading @@ -48,4 +48,10 @@ oneway interface IPermissionController { void getPrivilegesDescriptionStringForProfile( in String deviceProfileName, in AndroidFuture<String> callback); void getPlatformPermissionsForGroup( in String permissionGroupName, in AndroidFuture<List<String>> callback); void getGroupOfPlatformPermission( in String permissionName, in AndroidFuture<String> callback); } core/java/android/permission/PermissionControllerManager.java +44 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import android.os.Handler; import android.os.Process; import android.os.UserHandle; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; import android.util.Pair; Loading @@ -66,6 +67,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; Loading Loading @@ -720,4 +722,46 @@ public final class PermissionControllerManager { mRemoteService.run( service -> service.notifyOneTimePermissionSessionTimeout(packageName)); } /** * Get the platform permissions which belong to a particular permission group * * @param permissionGroupName The permission group whose permissions are desired * @return A list of the platform permissions in the group, or empty if the group is not a valid * platform group. */ public @NonNull Set<String> getPlatformPermissionsForGroup( @NonNull String permissionGroupName) { try { return new ArraySet<>(mRemoteService.postAsync(service -> { AndroidFuture<List<String>> future = new AndroidFuture<>(); service.getPlatformPermissionsForGroup(permissionGroupName, future); return future; }).get(REQUEST_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)); } catch (Exception e) { Log.e(TAG, "Failed to get permissions of " + permissionGroupName, e); return null; } } /** * Get the platform group of a particular permission, if the permission is a platform permission * * @param permissionName The permission name whose group is desired * @return The name of the permission group this permission belongs to, or null if it has no * group, or is not a platform permission */ public @Nullable String getGroupOfPlatformPermission( @NonNull String permissionName) { try { return mRemoteService.postAsync(service -> { AndroidFuture<String> future = new AndroidFuture<>(); service.getGroupOfPlatformPermission(permissionName, future); return future; }).get(REQUEST_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); } catch (Exception e) { Log.e(TAG, "Failed to get group of " + permissionName, e); return null; } } } core/java/android/permission/PermissionControllerService.java +53 −0 Original line number Diff line number Diff line Loading @@ -300,6 +300,29 @@ public abstract class PermissionControllerService extends Service { throw new AbstractMethodError("Must be overridden in implementing class"); } /** * Get the platform permissions which belong to a particular permission group * * @param permissionGroupName The permission group whose permissions are desired * @param callback A callback the permission names will be passed to */ @BinderThread public void onGetPlatformPermissionsForGroup(@NonNull String permissionGroupName, @NonNull Consumer<List<String>> callback) { throw new AbstractMethodError("Must be overridden in implementing class"); } /** * Get the platform group of a particular permission, if the permission is a platform permission * * @param permissionName The permission name whose group is desired * @param callback A callback the group name will be passed to */ @BinderThread public void onGetGroupOfPlatformPermission(@NonNull String permissionName, @NonNull Consumer<String> callback) { throw new AbstractMethodError("Must be overridden in implementing class"); } /** * Get a user-readable sentence, describing the set of privileges that are to be granted to a * companion app managing a device of the given profile. Loading Loading @@ -563,6 +586,36 @@ public abstract class PermissionControllerService extends Service { callback.completeExceptionally(t); } } @Override public void getPlatformPermissionsForGroup( @NonNull String permissionName, @NonNull AndroidFuture<List<String>> callback) { try { Objects.requireNonNull(permissionName); Objects.requireNonNull(callback); PermissionControllerService.this.onGetPlatformPermissionsForGroup( permissionName, callback::complete); } catch (Throwable t) { callback.completeExceptionally(t); } } @Override public void getGroupOfPlatformPermission( @NonNull String permissionGroupName, @NonNull AndroidFuture<String> callback) { try { Objects.requireNonNull(permissionGroupName); Objects.requireNonNull(callback); PermissionControllerService .this .onGetGroupOfPlatformPermission( permissionGroupName, callback::complete); } catch (Throwable t) { callback.completeExceptionally(t); } } }; } } Loading
core/api/system-current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -8766,6 +8766,8 @@ package android.permission { public final class PermissionControllerManager { method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.RESTORE_RUNTIME_PERMISSIONS}) public void applyStagedRuntimePermissionBackup(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>); method @Nullable public String getGroupOfPlatformPermission(@NonNull String); method @NonNull public java.util.Set<java.lang.String> getPlatformPermissionsForGroup(@NonNull String); method @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public void getRuntimePermissionBackup(@NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<byte[]>); method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>, boolean, int, @NonNull java.util.concurrent.Executor, @NonNull android.permission.PermissionControllerManager.OnRevokeRuntimePermissionsCallback); method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.RESTORE_RUNTIME_PERMISSIONS}) public void stageAndApplyRuntimePermissionsBackup(@NonNull byte[], @NonNull android.os.UserHandle); Loading @@ -8787,7 +8789,9 @@ package android.permission { method @NonNull public final android.os.IBinder onBind(android.content.Intent); method @BinderThread public abstract void onCountPermissionApps(@NonNull java.util.List<java.lang.String>, int, @NonNull java.util.function.IntConsumer); method @BinderThread public abstract void onGetAppPermissions(@NonNull String, @NonNull java.util.function.Consumer<java.util.List<android.permission.RuntimePermissionPresentationInfo>>); method @BinderThread public void onGetGroupOfPlatformPermission(@NonNull String, @NonNull java.util.function.Consumer<java.lang.String>); method @BinderThread public abstract void onGetPermissionUsages(boolean, long, @NonNull java.util.function.Consumer<java.util.List<android.permission.RuntimePermissionUsageInfo>>); method @BinderThread public void onGetPlatformPermissionsForGroup(@NonNull String, @NonNull java.util.function.Consumer<java.util.List<java.lang.String>>); method @BinderThread public abstract void onGetRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.OutputStream, @NonNull Runnable); method @BinderThread public abstract void onGrantOrUpgradeDefaultRuntimePermissions(@NonNull Runnable); method @BinderThread public void onOneTimePermissionSessionTimeout(@NonNull String);
core/java/android/permission/IPermissionController.aidl +6 −0 Original line number Diff line number Diff line Loading @@ -48,4 +48,10 @@ oneway interface IPermissionController { void getPrivilegesDescriptionStringForProfile( in String deviceProfileName, in AndroidFuture<String> callback); void getPlatformPermissionsForGroup( in String permissionGroupName, in AndroidFuture<List<String>> callback); void getGroupOfPlatformPermission( in String permissionName, in AndroidFuture<String> callback); }
core/java/android/permission/PermissionControllerManager.java +44 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import android.os.Handler; import android.os.Process; import android.os.UserHandle; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; import android.util.Pair; Loading @@ -66,6 +67,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; Loading Loading @@ -720,4 +722,46 @@ public final class PermissionControllerManager { mRemoteService.run( service -> service.notifyOneTimePermissionSessionTimeout(packageName)); } /** * Get the platform permissions which belong to a particular permission group * * @param permissionGroupName The permission group whose permissions are desired * @return A list of the platform permissions in the group, or empty if the group is not a valid * platform group. */ public @NonNull Set<String> getPlatformPermissionsForGroup( @NonNull String permissionGroupName) { try { return new ArraySet<>(mRemoteService.postAsync(service -> { AndroidFuture<List<String>> future = new AndroidFuture<>(); service.getPlatformPermissionsForGroup(permissionGroupName, future); return future; }).get(REQUEST_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)); } catch (Exception e) { Log.e(TAG, "Failed to get permissions of " + permissionGroupName, e); return null; } } /** * Get the platform group of a particular permission, if the permission is a platform permission * * @param permissionName The permission name whose group is desired * @return The name of the permission group this permission belongs to, or null if it has no * group, or is not a platform permission */ public @Nullable String getGroupOfPlatformPermission( @NonNull String permissionName) { try { return mRemoteService.postAsync(service -> { AndroidFuture<String> future = new AndroidFuture<>(); service.getGroupOfPlatformPermission(permissionName, future); return future; }).get(REQUEST_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); } catch (Exception e) { Log.e(TAG, "Failed to get group of " + permissionName, e); return null; } } }
core/java/android/permission/PermissionControllerService.java +53 −0 Original line number Diff line number Diff line Loading @@ -300,6 +300,29 @@ public abstract class PermissionControllerService extends Service { throw new AbstractMethodError("Must be overridden in implementing class"); } /** * Get the platform permissions which belong to a particular permission group * * @param permissionGroupName The permission group whose permissions are desired * @param callback A callback the permission names will be passed to */ @BinderThread public void onGetPlatformPermissionsForGroup(@NonNull String permissionGroupName, @NonNull Consumer<List<String>> callback) { throw new AbstractMethodError("Must be overridden in implementing class"); } /** * Get the platform group of a particular permission, if the permission is a platform permission * * @param permissionName The permission name whose group is desired * @param callback A callback the group name will be passed to */ @BinderThread public void onGetGroupOfPlatformPermission(@NonNull String permissionName, @NonNull Consumer<String> callback) { throw new AbstractMethodError("Must be overridden in implementing class"); } /** * Get a user-readable sentence, describing the set of privileges that are to be granted to a * companion app managing a device of the given profile. Loading Loading @@ -563,6 +586,36 @@ public abstract class PermissionControllerService extends Service { callback.completeExceptionally(t); } } @Override public void getPlatformPermissionsForGroup( @NonNull String permissionName, @NonNull AndroidFuture<List<String>> callback) { try { Objects.requireNonNull(permissionName); Objects.requireNonNull(callback); PermissionControllerService.this.onGetPlatformPermissionsForGroup( permissionName, callback::complete); } catch (Throwable t) { callback.completeExceptionally(t); } } @Override public void getGroupOfPlatformPermission( @NonNull String permissionGroupName, @NonNull AndroidFuture<String> callback) { try { Objects.requireNonNull(permissionGroupName); Objects.requireNonNull(callback); PermissionControllerService .this .onGetGroupOfPlatformPermission( permissionGroupName, callback::complete); } catch (Throwable t) { callback.completeExceptionally(t); } } }; } }