diff --git a/api/system-current.txt b/api/system-current.txt index 3b1ab4542abe5..11e77ac34c7fd 100755 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -2196,6 +2196,7 @@ package android.content.pm { method @RequiresPermission("android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS") public abstract void removeOnPermissionsChangeListener(@NonNull android.content.pm.PackageManager.OnPermissionsChangedListener); method public void replacePreferredActivity(@NonNull android.content.IntentFilter, int, @NonNull java.util.List, @NonNull android.content.ComponentName); method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public abstract void revokeRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle); + method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle, @NonNull String); method public void sendDeviceCustomizationReadyBroadcast(); method @RequiresPermission(allOf={android.Manifest.permission.SET_PREFERRED_APPLICATIONS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public abstract boolean setDefaultBrowserPackageNameAsUser(@Nullable String, int); method @NonNull @RequiresPermission(android.Manifest.permission.SUSPEND_APPS) public String[] setDistractingPackageRestrictions(@NonNull String[], int); diff --git a/api/test-current.txt b/api/test-current.txt index 4c8bb0290caef..dc21d872fe885 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -910,6 +910,7 @@ package android.content.pm { method @RequiresPermission("android.permission.GRANT_RUNTIME_PERMISSIONS") public abstract void grantRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle); method @RequiresPermission("android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS") public abstract void removeOnPermissionsChangeListener(@NonNull android.content.pm.PackageManager.OnPermissionsChangedListener); method @RequiresPermission("android.permission.REVOKE_RUNTIME_PERMISSIONS") public abstract void revokeRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle); + method @RequiresPermission("android.permission.REVOKE_RUNTIME_PERMISSIONS") public void revokeRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle, @NonNull String); method @RequiresPermission(anyOf={"android.permission.GRANT_RUNTIME_PERMISSIONS", "android.permission.REVOKE_RUNTIME_PERMISSIONS"}) public abstract void updatePermissionFlags(@NonNull String, @NonNull String, int, int, @NonNull android.os.UserHandle); field public static final String FEATURE_ADOPTABLE_STORAGE = "android.software.adoptable_storage"; field public static final String FEATURE_FILE_BASED_ENCRYPTION = "android.software.file_based_encryption"; diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index cd05e2c948b1f..f6573ccbb7eb8 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -776,6 +776,12 @@ public class ApplicationPackageManager extends PackageManager { } } + @Override + public void revokeRuntimePermission(String packageName, String permName, UserHandle user, + String reason) { + // TODO evanseverson: impl + } + @Override public int getPermissionFlags(String permName, String packageName, UserHandle user) { try { diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 7b484b7c2c3d5..f5b30ab28c3cc 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -4331,6 +4331,36 @@ public abstract class PackageManager { public abstract void revokeRuntimePermission(@NonNull String packageName, @NonNull String permName, @NonNull UserHandle user); + /** + * Revoke a runtime permission that was previously granted by {@link + * #grantRuntimePermission(String, String, android.os.UserHandle)}. The + * permission must have been requested by and granted to the application. + * If the application is not allowed to hold the permission, a {@link + * java.lang.SecurityException} is thrown. If the package or permission is + * invalid, a {@link java.lang.IllegalArgumentException} is thrown. + *

+ * Note: Using this API requires holding + * android.permission.REVOKE_RUNTIME_PERMISSIONS and if the user id is + * not the current user android.permission.INTERACT_ACROSS_USERS_FULL. + *

+ * + * @param packageName The package from which to revoke the permission. + * @param permName The permission name to revoke. + * @param user The user for which to revoke the permission. + * @param reason The reason for the revoke. + * + * @see #grantRuntimePermission(String, String, android.os.UserHandle) + * + * @hide + */ + @TestApi + @SystemApi + @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) + public void revokeRuntimePermission(@NonNull String packageName, + @NonNull String permName, @NonNull UserHandle user, @NonNull String reason) { + revokeRuntimePermission(packageName, permName, user); + } + /** * Gets the state flags associated with a permission. *