Merge "Expose platform permission group mapping as public API." into sc-dev

This commit is contained in:
Hai Zhang
2021-05-21 17:26:10 +00:00
committed by Android (Google) Code Review
6 changed files with 58 additions and 14 deletions

View File

@@ -12537,6 +12537,7 @@ package android.content.pm {
method public abstract int getComponentEnabledSetting(@NonNull android.content.ComponentName); method public abstract int getComponentEnabledSetting(@NonNull android.content.ComponentName);
method @NonNull public abstract android.graphics.drawable.Drawable getDefaultActivityIcon(); method @NonNull public abstract android.graphics.drawable.Drawable getDefaultActivityIcon();
method @Nullable public abstract android.graphics.drawable.Drawable getDrawable(@NonNull String, @DrawableRes int, @Nullable android.content.pm.ApplicationInfo); method @Nullable public abstract android.graphics.drawable.Drawable getDrawable(@NonNull String, @DrawableRes int, @Nullable android.content.pm.ApplicationInfo);
method public void getGroupOfPlatformPermission(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.String>);
method @NonNull public android.content.pm.InstallSourceInfo getInstallSourceInfo(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; method @NonNull public android.content.pm.InstallSourceInfo getInstallSourceInfo(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
method @NonNull public abstract java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int); method @NonNull public abstract java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int);
method @NonNull public java.util.List<android.content.pm.ModuleInfo> getInstalledModules(int); method @NonNull public java.util.List<android.content.pm.ModuleInfo> getInstalledModules(int);
@@ -12561,6 +12562,7 @@ package android.content.pm {
method @NonNull public abstract java.util.List<android.content.pm.PackageInfo> getPackagesHoldingPermissions(@NonNull String[], int); method @NonNull public abstract java.util.List<android.content.pm.PackageInfo> getPackagesHoldingPermissions(@NonNull String[], int);
method @NonNull public abstract android.content.pm.PermissionGroupInfo getPermissionGroupInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException; method @NonNull public abstract android.content.pm.PermissionGroupInfo getPermissionGroupInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract android.content.pm.PermissionInfo getPermissionInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract android.content.pm.PermissionInfo getPermissionInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public void getPlatformPermissionsForGroup(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.util.List<java.lang.String>>);
method @Deprecated public abstract int getPreferredActivities(@NonNull java.util.List<android.content.IntentFilter>, @NonNull java.util.List<android.content.ComponentName>, @Nullable String); method @Deprecated public abstract int getPreferredActivities(@NonNull java.util.List<android.content.IntentFilter>, @NonNull java.util.List<android.content.ComponentName>, @Nullable String);
method @Deprecated @NonNull public abstract java.util.List<android.content.pm.PackageInfo> getPreferredPackages(int); method @Deprecated @NonNull public abstract java.util.List<android.content.pm.PackageInfo> getPreferredPackages(int);
method @NonNull public android.content.pm.PackageManager.Property getProperty(@NonNull String, @NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; method @NonNull public android.content.pm.PackageManager.Property getProperty(@NonNull String, @NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;

View File

@@ -106,7 +106,6 @@ package android {
field public static final String GET_APP_OPS_STATS = "android.permission.GET_APP_OPS_STATS"; field public static final String GET_APP_OPS_STATS = "android.permission.GET_APP_OPS_STATS";
field public static final String GET_PROCESS_STATE_AND_OOM_SCORE = "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE"; field public static final String GET_PROCESS_STATE_AND_OOM_SCORE = "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE";
field public static final String GET_RUNTIME_PERMISSIONS = "android.permission.GET_RUNTIME_PERMISSIONS"; field public static final String GET_RUNTIME_PERMISSIONS = "android.permission.GET_RUNTIME_PERMISSIONS";
field public static final String GET_RUNTIME_PERMISSION_GROUP_MAPPING = "android.permission.GET_RUNTIME_PERMISSION_GROUP_MAPPING";
field public static final String GET_TOP_ACTIVITY_INFO = "android.permission.GET_TOP_ACTIVITY_INFO"; field public static final String GET_TOP_ACTIVITY_INFO = "android.permission.GET_TOP_ACTIVITY_INFO";
field @Deprecated public static final String GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS = "android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS"; field @Deprecated public static final String GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS = "android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS";
field public static final String GRANT_RUNTIME_PERMISSIONS = "android.permission.GRANT_RUNTIME_PERMISSIONS"; field public static final String GRANT_RUNTIME_PERMISSIONS = "android.permission.GRANT_RUNTIME_PERMISSIONS";
@@ -8847,8 +8846,6 @@ package android.permission {
public final class PermissionControllerManager { 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 @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 @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSION_GROUP_MAPPING) public void getGroupOfPlatformPermission(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.String>);
method @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSION_GROUP_MAPPING) public void getPlatformPermissionsForGroup(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.util.List<java.lang.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.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(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); method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.RESTORE_RUNTIME_PERMISSIONS}) public void stageAndApplyRuntimePermissionsBackup(@NonNull byte[], @NonNull android.os.UserHandle);

View File

@@ -24,6 +24,7 @@ import static android.content.pm.Checksum.TYPE_WHOLE_SHA1;
import static android.content.pm.Checksum.TYPE_WHOLE_SHA256; import static android.content.pm.Checksum.TYPE_WHOLE_SHA256;
import static android.content.pm.Checksum.TYPE_WHOLE_SHA512; import static android.content.pm.Checksum.TYPE_WHOLE_SHA512;
import android.annotation.CallbackExecutor;
import android.annotation.DrawableRes; import android.annotation.DrawableRes;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
@@ -103,6 +104,7 @@ import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.os.storage.StorageManager; import android.os.storage.StorageManager;
import android.os.storage.VolumeInfo; import android.os.storage.VolumeInfo;
import android.permission.PermissionControllerManager;
import android.permission.PermissionManager; import android.permission.PermissionManager;
import android.provider.Settings; import android.provider.Settings;
import android.system.ErrnoException; import android.system.ErrnoException;
@@ -137,6 +139,8 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
/** @hide */ /** @hide */
public class ApplicationPackageManager extends PackageManager { public class ApplicationPackageManager extends PackageManager {
@@ -400,6 +404,25 @@ public class ApplicationPackageManager extends PackageManager {
return permissionInfos; return permissionInfos;
} }
@Override
public void getPlatformPermissionsForGroup(@NonNull String permissionGroupName,
@NonNull @CallbackExecutor Executor executor,
@NonNull Consumer<List<String>> callback) {
final PermissionControllerManager permissionControllerManager = mContext.getSystemService(
PermissionControllerManager.class);
permissionControllerManager.getPlatformPermissionsForGroup(permissionGroupName, executor,
callback);
}
@Override
public void getGroupOfPlatformPermission(@NonNull String permissionName,
@NonNull @CallbackExecutor Executor executor, @NonNull Consumer<String> callback) {
final PermissionControllerManager permissionControllerManager = mContext.getSystemService(
PermissionControllerManager.class);
permissionControllerManager.getGroupOfPlatformPermission(permissionName, executor,
callback);
}
@Override @Override
public boolean arePermissionsIndividuallyControlled() { public boolean arePermissionsIndividuallyControlled() {
return mContext.getResources().getBoolean( return mContext.getResources().getBoolean(

View File

@@ -17,6 +17,7 @@
package android.content.pm; package android.content.pm;
import android.Manifest; import android.Manifest;
import android.annotation.CallbackExecutor;
import android.annotation.CheckResult; import android.annotation.CheckResult;
import android.annotation.DrawableRes; import android.annotation.DrawableRes;
import android.annotation.IntDef; import android.annotation.IntDef;
@@ -95,6 +96,8 @@ import java.util.Locale;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
/** /**
* Class for retrieving various kinds of information related to the application * Class for retrieving various kinds of information related to the application
@@ -4668,6 +4671,32 @@ public abstract class PackageManager {
public abstract List<PermissionGroupInfo> getAllPermissionGroups( public abstract List<PermissionGroupInfo> getAllPermissionGroups(
@PermissionGroupInfoFlags int flags); @PermissionGroupInfoFlags int flags);
/**
* 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.
*/
public void getPlatformPermissionsForGroup(@NonNull String permissionGroupName,
@NonNull @CallbackExecutor Executor executor,
@NonNull Consumer<List<String>> callback) {}
/**
* 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 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.
*/
public void getGroupOfPlatformPermission(@NonNull String permissionName,
@NonNull @CallbackExecutor Executor executor, @NonNull Consumer<String> callback) {}
/** /**
* Retrieve all of the information we know about a particular * Retrieve all of the information we know about a particular
* package/application. * package/application.

View File

@@ -729,13 +729,12 @@ public final class PermissionControllerManager {
* @param callback A callback which will receive a list of the platform permissions in the * @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 * group, or empty if the group is not a valid platform group, or there
* was an exception. * was an exception.
*
* @hide
*/ */
@RequiresPermission(Manifest.permission.GET_RUNTIME_PERMISSION_GROUP_MAPPING)
public void getPlatformPermissionsForGroup(@NonNull String permissionGroupName, public void getPlatformPermissionsForGroup(@NonNull String permissionGroupName,
@NonNull @CallbackExecutor Executor executor, @NonNull @CallbackExecutor Executor executor,
@NonNull Consumer<List<String>> callback) { @NonNull Consumer<List<String>> callback) {
enforceSomePermissionsGrantedToSelf(
Manifest.permission.GET_RUNTIME_PERMISSION_GROUP_MAPPING);
mRemoteService.postAsync(service -> { mRemoteService.postAsync(service -> {
AndroidFuture<List<String>> future = new AndroidFuture<>(); AndroidFuture<List<String>> future = new AndroidFuture<>();
service.getPlatformPermissionsForGroup(permissionGroupName, future); service.getPlatformPermissionsForGroup(permissionGroupName, future);
@@ -764,12 +763,11 @@ public final class PermissionControllerManager {
* @param callback A callback which will receive the name of the permission group this * @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 belongs to, or null if it has no group, is not a platform
* permission, or there was an exception. * permission, or there was an exception.
*
* @hide
*/ */
@RequiresPermission(Manifest.permission.GET_RUNTIME_PERMISSION_GROUP_MAPPING)
public void getGroupOfPlatformPermission(@NonNull String permissionName, public void getGroupOfPlatformPermission(@NonNull String permissionName,
@NonNull @CallbackExecutor Executor executor, @NonNull Consumer<String> callback) { @NonNull @CallbackExecutor Executor executor, @NonNull Consumer<String> callback) {
enforceSomePermissionsGrantedToSelf(
Manifest.permission.GET_RUNTIME_PERMISSION_GROUP_MAPPING);
mRemoteService.postAsync(service -> { mRemoteService.postAsync(service -> {
AndroidFuture<String> future = new AndroidFuture<>(); AndroidFuture<String> future = new AndroidFuture<>();
service.getGroupOfPlatformPermission(permissionName, future); service.getGroupOfPlatformPermission(permissionName, future);

View File

@@ -4232,11 +4232,6 @@
<permission android:name="android.permission.GET_RUNTIME_PERMISSIONS" <permission android:name="android.permission.GET_RUNTIME_PERMISSIONS"
android:protectionLevel="signature" /> android:protectionLevel="signature" />
<!-- @SystemApi Allows the system to read the mapping between permission and permission group.
@hide -->
<permission android:name="android.permission.GET_RUNTIME_PERMISSION_GROUP_MAPPING"
android:protectionLevel="signature|privileged" />
<!-- @SystemApi Allows the system to restore runtime permission state. This might grant <!-- @SystemApi Allows the system to restore runtime permission state. This might grant
permissions, hence this is a more scoped, less powerful variant of GRANT_RUNTIME_PERMISSIONS. permissions, hence this is a more scoped, less powerful variant of GRANT_RUNTIME_PERMISSIONS.
Among other restrictions this cannot override user choices. Among other restrictions this cannot override user choices.