DO NOT MERGE Implement suggested changes in API review for permission mainline.
Test: build Fixes: 150877494 Change-Id: Ieca5f7a46241032f6722bb379fc08206b9600ddc
This commit is contained in:
@@ -40,7 +40,7 @@ public interface RuntimePermissionsPersistence {
|
|||||||
* @return the runtime permissions read
|
* @return the runtime permissions read
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
RuntimePermissionsState readAsUser(@NonNull UserHandle user);
|
RuntimePermissionsState readForUser(@NonNull UserHandle user);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write the runtime permissions to persistence.
|
* Write the runtime permissions to persistence.
|
||||||
@@ -50,7 +50,8 @@ public interface RuntimePermissionsPersistence {
|
|||||||
* @param runtimePermissions the runtime permissions to write
|
* @param runtimePermissions the runtime permissions to write
|
||||||
* @param user the user to write for
|
* @param user the user to write for
|
||||||
*/
|
*/
|
||||||
void writeAsUser(@NonNull RuntimePermissionsState runtimePermissions, @NonNull UserHandle user);
|
void writeForUser(@NonNull RuntimePermissionsState runtimePermissions,
|
||||||
|
@NonNull UserHandle user);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete the runtime permissions from persistence.
|
* Delete the runtime permissions from persistence.
|
||||||
@@ -59,7 +60,7 @@ public interface RuntimePermissionsPersistence {
|
|||||||
*
|
*
|
||||||
* @param user the user to delete for
|
* @param user the user to delete for
|
||||||
*/
|
*/
|
||||||
void deleteAsUser(@NonNull UserHandle user);
|
void deleteForUser(@NonNull UserHandle user);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new instance of {@link RuntimePermissionsPersistence} implementation.
|
* Create a new instance of {@link RuntimePermissionsPersistence} implementation.
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class RuntimePermissionsPersistenceImpl implements RuntimePermissionsPers
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public RuntimePermissionsState readAsUser(@NonNull UserHandle user) {
|
public RuntimePermissionsState readForUser(@NonNull UserHandle user) {
|
||||||
File file = getFile(user);
|
File file = getFile(user);
|
||||||
try (FileInputStream inputStream = new AtomicFile(file).openRead()) {
|
try (FileInputStream inputStream = new AtomicFile(file).openRead()) {
|
||||||
XmlPullParser parser = Xml.newPullParser();
|
XmlPullParser parser = Xml.newPullParser();
|
||||||
@@ -172,7 +172,7 @@ public class RuntimePermissionsPersistenceImpl implements RuntimePermissionsPers
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeAsUser(@NonNull RuntimePermissionsState runtimePermissions,
|
public void writeForUser(@NonNull RuntimePermissionsState runtimePermissions,
|
||||||
@NonNull UserHandle user) {
|
@NonNull UserHandle user) {
|
||||||
File file = getFile(user);
|
File file = getFile(user);
|
||||||
AtomicFile atomicFile = new AtomicFile(file);
|
AtomicFile atomicFile = new AtomicFile(file);
|
||||||
@@ -252,7 +252,7 @@ public class RuntimePermissionsPersistenceImpl implements RuntimePermissionsPers
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteAsUser(@NonNull UserHandle user) {
|
public void deleteForUser(@NonNull UserHandle user) {
|
||||||
getFile(user).delete();
|
getFile(user).delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import android.annotation.SystemApi.Client;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* State of all runtime permissions.
|
* State of all runtime permissions.
|
||||||
@@ -61,6 +62,14 @@ public final class RuntimePermissionsState {
|
|||||||
@NonNull
|
@NonNull
|
||||||
private final Map<String, List<PermissionState>> mSharedUserPermissions;
|
private final Map<String, List<PermissionState>> mSharedUserPermissions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new instance of this class.
|
||||||
|
*
|
||||||
|
* @param version the version of the runtime permissions
|
||||||
|
* @param fingerprint the fingerprint of the runtime permissions
|
||||||
|
* @param packagePermissions the runtime permissions by packages
|
||||||
|
* @param sharedUserPermissions the runtime permissions by shared users
|
||||||
|
*/
|
||||||
public RuntimePermissionsState(int version, @Nullable String fingerprint,
|
public RuntimePermissionsState(int version, @Nullable String fingerprint,
|
||||||
@NonNull Map<String, List<PermissionState>> packagePermissions,
|
@NonNull Map<String, List<PermissionState>> packagePermissions,
|
||||||
@NonNull Map<String, List<PermissionState>> sharedUserPermissions) {
|
@NonNull Map<String, List<PermissionState>> sharedUserPermissions) {
|
||||||
@@ -70,32 +79,72 @@ public final class RuntimePermissionsState {
|
|||||||
mSharedUserPermissions = sharedUserPermissions;
|
mSharedUserPermissions = sharedUserPermissions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the version of the runtime permissions.
|
||||||
|
*
|
||||||
|
* @return the version of the runtime permissions
|
||||||
|
*/
|
||||||
public int getVersion() {
|
public int getVersion() {
|
||||||
return mVersion;
|
return mVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the fingerprint of the runtime permissions.
|
||||||
|
*
|
||||||
|
* @return the fingerprint of the runtime permissions
|
||||||
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public String getFingerprint() {
|
public String getFingerprint() {
|
||||||
return mFingerprint;
|
return mFingerprint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the runtime permissions by packages.
|
||||||
|
*
|
||||||
|
* @return the runtime permissions by packages
|
||||||
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public Map<String, List<PermissionState>> getPackagePermissions() {
|
public Map<String, List<PermissionState>> getPackagePermissions() {
|
||||||
return mPackagePermissions;
|
return mPackagePermissions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the runtime permissions by shared users.
|
||||||
|
*
|
||||||
|
* @return the runtime permissions by shared users
|
||||||
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public Map<String, List<PermissionState>> getSharedUserPermissions() {
|
public Map<String, List<PermissionState>> getSharedUserPermissions() {
|
||||||
return mSharedUserPermissions;
|
return mSharedUserPermissions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object object) {
|
||||||
|
if (this == object) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (object == null || getClass() != object.getClass()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
RuntimePermissionsState that = (RuntimePermissionsState) object;
|
||||||
|
return mVersion == that.mVersion
|
||||||
|
&& Objects.equals(mFingerprint, that.mFingerprint)
|
||||||
|
&& Objects.equals(mPackagePermissions, that.mPackagePermissions)
|
||||||
|
&& Objects.equals(mSharedUserPermissions, that.mSharedUserPermissions);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(mVersion, mFingerprint, mPackagePermissions, mSharedUserPermissions);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* State of a single permission.
|
* State of a single permission.
|
||||||
*/
|
*/
|
||||||
public static class PermissionState {
|
public static final class PermissionState {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Name of the permission.
|
* The name of the permission.
|
||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
private final String mName;
|
private final String mName;
|
||||||
@@ -106,27 +155,68 @@ public final class RuntimePermissionsState {
|
|||||||
private final boolean mGranted;
|
private final boolean mGranted;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flags of the permission.
|
* The flags of the permission.
|
||||||
*/
|
*/
|
||||||
private final int mFlags;
|
private final int mFlags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new instance of this class.
|
||||||
|
*
|
||||||
|
* @param name the name of the permission
|
||||||
|
* @param granted whether the permission is granted
|
||||||
|
* @param flags the flags of the permission
|
||||||
|
*/
|
||||||
public PermissionState(@NonNull String name, boolean granted, int flags) {
|
public PermissionState(@NonNull String name, boolean granted, int flags) {
|
||||||
mName = name;
|
mName = name;
|
||||||
mGranted = granted;
|
mGranted = granted;
|
||||||
mFlags = flags;
|
mFlags = flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the name of the permission.
|
||||||
|
*
|
||||||
|
* @return the name of the permission
|
||||||
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return mName;
|
return mName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get whether the permission is granted.
|
||||||
|
*
|
||||||
|
* @return whether the permission is granted
|
||||||
|
*/
|
||||||
public boolean isGranted() {
|
public boolean isGranted() {
|
||||||
return mGranted;
|
return mGranted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the flags of the permission.
|
||||||
|
*
|
||||||
|
* @return the flags of the permission
|
||||||
|
*/
|
||||||
public int getFlags() {
|
public int getFlags() {
|
||||||
return mFlags;
|
return mFlags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object object) {
|
||||||
|
if (this == object) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (object == null || getClass() != object.getClass()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
PermissionState that = (PermissionState) object;
|
||||||
|
return mGranted == that.mGranted
|
||||||
|
&& mFlags == that.mFlags
|
||||||
|
&& Objects.equals(mName, that.mName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(mName, mGranted, mFlags);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public interface RolesPersistence {
|
|||||||
* @return the roles read
|
* @return the roles read
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
RolesState readAsUser(@NonNull UserHandle user);
|
RolesState readForUser(@NonNull UserHandle user);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write the roles to persistence.
|
* Write the roles to persistence.
|
||||||
@@ -50,7 +50,7 @@ public interface RolesPersistence {
|
|||||||
* @param roles the roles to write
|
* @param roles the roles to write
|
||||||
* @param user the user to write for
|
* @param user the user to write for
|
||||||
*/
|
*/
|
||||||
void writeAsUser(@NonNull RolesState roles, @NonNull UserHandle user);
|
void writeForUser(@NonNull RolesState roles, @NonNull UserHandle user);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete the roles from persistence.
|
* Delete the roles from persistence.
|
||||||
@@ -59,7 +59,7 @@ public interface RolesPersistence {
|
|||||||
*
|
*
|
||||||
* @param user the user to delete for
|
* @param user the user to delete for
|
||||||
*/
|
*/
|
||||||
void deleteAsUser(@NonNull UserHandle user);
|
void deleteForUser(@NonNull UserHandle user);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new instance of {@link RolesPersistence} implementation.
|
* Create a new instance of {@link RolesPersistence} implementation.
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ public class RolesPersistenceImpl implements RolesPersistence {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public RolesState readAsUser(@NonNull UserHandle user) {
|
public RolesState readForUser(@NonNull UserHandle user) {
|
||||||
File file = getFile(user);
|
File file = getFile(user);
|
||||||
try (FileInputStream inputStream = new AtomicFile(file).openRead()) {
|
try (FileInputStream inputStream = new AtomicFile(file).openRead()) {
|
||||||
XmlPullParser parser = Xml.newPullParser();
|
XmlPullParser parser = Xml.newPullParser();
|
||||||
@@ -146,7 +146,7 @@ public class RolesPersistenceImpl implements RolesPersistence {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeAsUser(@NonNull RolesState roles, @NonNull UserHandle user) {
|
public void writeForUser(@NonNull RolesState roles, @NonNull UserHandle user) {
|
||||||
File file = getFile(user);
|
File file = getFile(user);
|
||||||
AtomicFile atomicFile = new AtomicFile(file);
|
AtomicFile atomicFile = new AtomicFile(file);
|
||||||
FileOutputStream outputStream = null;
|
FileOutputStream outputStream = null;
|
||||||
@@ -205,7 +205,7 @@ public class RolesPersistenceImpl implements RolesPersistence {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteAsUser(@NonNull UserHandle user) {
|
public void deleteForUser(@NonNull UserHandle user) {
|
||||||
getFile(user).delete();
|
getFile(user).delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import android.annotation.SystemApi;
|
|||||||
import android.annotation.SystemApi.Client;
|
import android.annotation.SystemApi.Client;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -50,6 +51,13 @@ public final class RolesState {
|
|||||||
@NonNull
|
@NonNull
|
||||||
private final Map<String, Set<String>> mRoles;
|
private final Map<String, Set<String>> mRoles;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new instance of this class.
|
||||||
|
*
|
||||||
|
* @param version the version of the roles
|
||||||
|
* @param packagesHash the hash of all packages in the system
|
||||||
|
* @param roles the roles
|
||||||
|
*/
|
||||||
public RolesState(int version, @Nullable String packagesHash,
|
public RolesState(int version, @Nullable String packagesHash,
|
||||||
@NonNull Map<String, Set<String>> roles) {
|
@NonNull Map<String, Set<String>> roles) {
|
||||||
mVersion = version;
|
mVersion = version;
|
||||||
@@ -57,17 +65,51 @@ public final class RolesState {
|
|||||||
mRoles = roles;
|
mRoles = roles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the version of the roles.
|
||||||
|
*
|
||||||
|
* @return the version of the roles
|
||||||
|
*/
|
||||||
public int getVersion() {
|
public int getVersion() {
|
||||||
return mVersion;
|
return mVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the hash of all packages in the system.
|
||||||
|
*
|
||||||
|
* @return the hash of all packages in the system
|
||||||
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public String getPackagesHash() {
|
public String getPackagesHash() {
|
||||||
return mPackagesHash;
|
return mPackagesHash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the roles.
|
||||||
|
*
|
||||||
|
* @return the roles
|
||||||
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public Map<String, Set<String>> getRoles() {
|
public Map<String, Set<String>> getRoles() {
|
||||||
return mRoles;
|
return mRoles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object object) {
|
||||||
|
if (this == object) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (object == null || getClass() != object.getClass()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
RolesState that = (RolesState) object;
|
||||||
|
return mVersion == that.mVersion
|
||||||
|
&& Objects.equals(mPackagesHash, that.mPackagesHash)
|
||||||
|
&& Objects.equals(mRoles, that.mRoles);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(mVersion, mPackagesHash, mRoles);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -231,6 +231,7 @@ package android {
|
|||||||
field public static final String UPDATE_APP_OPS_STATS = "android.permission.UPDATE_APP_OPS_STATS";
|
field public static final String UPDATE_APP_OPS_STATS = "android.permission.UPDATE_APP_OPS_STATS";
|
||||||
field public static final String UPDATE_LOCK = "android.permission.UPDATE_LOCK";
|
field public static final String UPDATE_LOCK = "android.permission.UPDATE_LOCK";
|
||||||
field public static final String UPDATE_TIME_ZONE_RULES = "android.permission.UPDATE_TIME_ZONE_RULES";
|
field public static final String UPDATE_TIME_ZONE_RULES = "android.permission.UPDATE_TIME_ZONE_RULES";
|
||||||
|
field public static final String UPGRADE_RUNTIME_PERMISSIONS = "android.permission.UPGRADE_RUNTIME_PERMISSIONS";
|
||||||
field public static final String USER_ACTIVITY = "android.permission.USER_ACTIVITY";
|
field public static final String USER_ACTIVITY = "android.permission.USER_ACTIVITY";
|
||||||
field public static final String USE_RESERVED_DISK = "android.permission.USE_RESERVED_DISK";
|
field public static final String USE_RESERVED_DISK = "android.permission.USE_RESERVED_DISK";
|
||||||
field public static final String WHITELIST_RESTRICTED_PERMISSIONS = "android.permission.WHITELIST_RESTRICTED_PERMISSIONS";
|
field public static final String WHITELIST_RESTRICTED_PERMISSIONS = "android.permission.WHITELIST_RESTRICTED_PERMISSIONS";
|
||||||
@@ -8948,7 +8949,7 @@ package android.permission {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final class PermissionManager {
|
public final class PermissionManager {
|
||||||
method @IntRange(from=0) @RequiresPermission(anyOf={android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, "android.permission.UPGRADE_RUNTIME_PERMISSIONS"}) public int getRuntimePermissionsVersion();
|
method @IntRange(from=0) @RequiresPermission(anyOf={android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS}) public int getRuntimePermissionsVersion();
|
||||||
method @NonNull public java.util.List<android.permission.PermissionManager.SplitPermissionInfo> getSplitPermissions();
|
method @NonNull public java.util.List<android.permission.PermissionManager.SplitPermissionInfo> getSplitPermissions();
|
||||||
method @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS) public void grantDefaultPermissionsToEnabledCarrierApps(@NonNull String[], @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
|
method @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS) public void grantDefaultPermissionsToEnabledCarrierApps(@NonNull String[], @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
|
||||||
method @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS) public void grantDefaultPermissionsToEnabledImsServices(@NonNull String[], @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
|
method @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS) public void grantDefaultPermissionsToEnabledImsServices(@NonNull String[], @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
|
||||||
@@ -8956,7 +8957,7 @@ package android.permission {
|
|||||||
method @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS) public void grantDefaultPermissionsToLuiApp(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
|
method @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS) public void grantDefaultPermissionsToLuiApp(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
|
||||||
method @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS) public void revokeDefaultPermissionsFromDisabledTelephonyDataServices(@NonNull String[], @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
|
method @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS) public void revokeDefaultPermissionsFromDisabledTelephonyDataServices(@NonNull String[], @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
|
||||||
method @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS) public void revokeDefaultPermissionsFromLuiApps(@NonNull String[], @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
|
method @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS) public void revokeDefaultPermissionsFromLuiApps(@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.ADJUST_RUNTIME_PERMISSIONS_POLICY, "android.permission.UPGRADE_RUNTIME_PERMISSIONS"}) public void setRuntimePermissionsVersion(@IntRange(from=0) int);
|
method @RequiresPermission(anyOf={android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS}) public void setRuntimePermissionsVersion(@IntRange(from=0) int);
|
||||||
method @RequiresPermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS) public void startOneTimePermissionSession(@NonNull String, long, int, int);
|
method @RequiresPermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS) public void startOneTimePermissionSession(@NonNull String, long, int, int);
|
||||||
method @RequiresPermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS) public void stopOneTimePermissionSession(@NonNull String);
|
method @RequiresPermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS) public void stopOneTimePermissionSession(@NonNull String);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ package android {
|
|||||||
field public static final String REMOVE_TASKS = "android.permission.REMOVE_TASKS";
|
field public static final String REMOVE_TASKS = "android.permission.REMOVE_TASKS";
|
||||||
field public static final String SUSPEND_APPS = "android.permission.SUSPEND_APPS";
|
field public static final String SUSPEND_APPS = "android.permission.SUSPEND_APPS";
|
||||||
field public static final String TEST_MANAGE_ROLLBACKS = "android.permission.TEST_MANAGE_ROLLBACKS";
|
field public static final String TEST_MANAGE_ROLLBACKS = "android.permission.TEST_MANAGE_ROLLBACKS";
|
||||||
|
field public static final String UPGRADE_RUNTIME_PERMISSIONS = "android.permission.UPGRADE_RUNTIME_PERMISSIONS";
|
||||||
field public static final String WRITE_DEVICE_CONFIG = "android.permission.WRITE_DEVICE_CONFIG";
|
field public static final String WRITE_DEVICE_CONFIG = "android.permission.WRITE_DEVICE_CONFIG";
|
||||||
field @Deprecated public static final String WRITE_MEDIA_STORAGE = "android.permission.WRITE_MEDIA_STORAGE";
|
field @Deprecated public static final String WRITE_MEDIA_STORAGE = "android.permission.WRITE_MEDIA_STORAGE";
|
||||||
field public static final String WRITE_OBB = "android.permission.WRITE_OBB";
|
field public static final String WRITE_OBB = "android.permission.WRITE_OBB";
|
||||||
@@ -2797,9 +2798,9 @@ package android.permission {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final class PermissionManager {
|
public final class PermissionManager {
|
||||||
method @IntRange(from=0) @RequiresPermission(anyOf={"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY", "android.permission.UPGRADE_RUNTIME_PERMISSIONS"}) public int getRuntimePermissionsVersion();
|
method @IntRange(from=0) @RequiresPermission(anyOf={"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY", android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS}) public int getRuntimePermissionsVersion();
|
||||||
method @NonNull public java.util.List<android.permission.PermissionManager.SplitPermissionInfo> getSplitPermissions();
|
method @NonNull public java.util.List<android.permission.PermissionManager.SplitPermissionInfo> getSplitPermissions();
|
||||||
method @RequiresPermission(anyOf={"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY", "android.permission.UPGRADE_RUNTIME_PERMISSIONS"}) public void setRuntimePermissionsVersion(@IntRange(from=0) int);
|
method @RequiresPermission(anyOf={"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY", android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS}) public void setRuntimePermissionsVersion(@IntRange(from=0) int);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class PermissionManager.SplitPermissionInfo {
|
public static final class PermissionManager.SplitPermissionInfo {
|
||||||
|
|||||||
@@ -3726,7 +3726,8 @@
|
|||||||
<permission android:name="android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY"
|
<permission android:name="android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY"
|
||||||
android:protectionLevel="signature|installer" />
|
android:protectionLevel="signature|installer" />
|
||||||
|
|
||||||
<!-- @hide Allows an application to upgrade runtime permissions. -->
|
<!-- @SystemApi @TestApi Allows an application to upgrade runtime permissions.
|
||||||
|
@hide -->
|
||||||
<permission android:name="android.permission.UPGRADE_RUNTIME_PERMISSIONS"
|
<permission android:name="android.permission.UPGRADE_RUNTIME_PERMISSIONS"
|
||||||
android:protectionLevel="signature" />
|
android:protectionLevel="signature" />
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package com.android.permission.persistence {
|
|||||||
|
|
||||||
public interface RuntimePermissionsPersistence {
|
public interface RuntimePermissionsPersistence {
|
||||||
method @NonNull public static com.android.permission.persistence.RuntimePermissionsPersistence createInstance();
|
method @NonNull public static com.android.permission.persistence.RuntimePermissionsPersistence createInstance();
|
||||||
method public void deleteAsUser(@NonNull android.os.UserHandle);
|
method public void deleteForUser(@NonNull android.os.UserHandle);
|
||||||
method @Nullable public com.android.permission.persistence.RuntimePermissionsState readAsUser(@NonNull android.os.UserHandle);
|
method @Nullable public com.android.permission.persistence.RuntimePermissionsState readForUser(@NonNull android.os.UserHandle);
|
||||||
method public void writeAsUser(@NonNull com.android.permission.persistence.RuntimePermissionsState, @NonNull android.os.UserHandle);
|
method public void writeForUser(@NonNull com.android.permission.persistence.RuntimePermissionsState, @NonNull android.os.UserHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class RuntimePermissionsState {
|
public final class RuntimePermissionsState {
|
||||||
@@ -17,7 +17,7 @@ package com.android.permission.persistence {
|
|||||||
field public static final int NO_VERSION = -1; // 0xffffffff
|
field public static final int NO_VERSION = -1; // 0xffffffff
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class RuntimePermissionsState.PermissionState {
|
public static final class RuntimePermissionsState.PermissionState {
|
||||||
ctor public RuntimePermissionsState.PermissionState(@NonNull String, boolean, int);
|
ctor public RuntimePermissionsState.PermissionState(@NonNull String, boolean, int);
|
||||||
method public int getFlags();
|
method public int getFlags();
|
||||||
method @NonNull public String getName();
|
method @NonNull public String getName();
|
||||||
@@ -30,9 +30,9 @@ package com.android.role.persistence {
|
|||||||
|
|
||||||
public interface RolesPersistence {
|
public interface RolesPersistence {
|
||||||
method @NonNull public static com.android.role.persistence.RolesPersistence createInstance();
|
method @NonNull public static com.android.role.persistence.RolesPersistence createInstance();
|
||||||
method public void deleteAsUser(@NonNull android.os.UserHandle);
|
method public void deleteForUser(@NonNull android.os.UserHandle);
|
||||||
method @Nullable public com.android.role.persistence.RolesState readAsUser(@NonNull android.os.UserHandle);
|
method @Nullable public com.android.role.persistence.RolesState readForUser(@NonNull android.os.UserHandle);
|
||||||
method public void writeAsUser(@NonNull com.android.role.persistence.RolesState, @NonNull android.os.UserHandle);
|
method public void writeForUser(@NonNull com.android.role.persistence.RolesState, @NonNull android.os.UserHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class RolesState {
|
public final class RolesState {
|
||||||
|
|||||||
@@ -5426,7 +5426,7 @@ public final class Settings {
|
|||||||
packagePermissions, sharedUserPermissions);
|
packagePermissions, sharedUserPermissions);
|
||||||
}
|
}
|
||||||
|
|
||||||
mPersistence.writeAsUser(runtimePermissions, UserHandle.of(userId));
|
mPersistence.writeForUser(runtimePermissions, UserHandle.of(userId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@@ -5480,12 +5480,12 @@ public final class Settings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void deleteUserRuntimePermissionsFile(int userId) {
|
public void deleteUserRuntimePermissionsFile(int userId) {
|
||||||
mPersistence.deleteAsUser(UserHandle.of(userId));
|
mPersistence.deleteForUser(UserHandle.of(userId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GuardedBy("Settings.this.mLock")
|
@GuardedBy("Settings.this.mLock")
|
||||||
public void readStateForUserSyncLPr(int userId) {
|
public void readStateForUserSyncLPr(int userId) {
|
||||||
RuntimePermissionsState runtimePermissions = mPersistence.readAsUser(UserHandle.of(
|
RuntimePermissionsState runtimePermissions = mPersistence.readForUser(UserHandle.of(
|
||||||
userId));
|
userId));
|
||||||
if (runtimePermissions == null) {
|
if (runtimePermissions == null) {
|
||||||
readLegacyStateForUserSyncLPr(userId);
|
readLegacyStateForUserSyncLPr(userId);
|
||||||
|
|||||||
@@ -364,12 +364,12 @@ public class RoleUserState {
|
|||||||
(Map<String, Set<String>>) (Map<String, ?>) snapshotRolesLocked());
|
(Map<String, Set<String>>) (Map<String, ?>) snapshotRolesLocked());
|
||||||
}
|
}
|
||||||
|
|
||||||
mPersistence.writeAsUser(roles, UserHandle.of(mUserId));
|
mPersistence.writeForUser(roles, UserHandle.of(mUserId));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void readFile() {
|
private void readFile() {
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
RolesState roles = mPersistence.readAsUser(UserHandle.of(mUserId));
|
RolesState roles = mPersistence.readForUser(UserHandle.of(mUserId));
|
||||||
if (roles == null) {
|
if (roles == null) {
|
||||||
readLegacyFileLocked();
|
readLegacyFileLocked();
|
||||||
scheduleWriteFileLocked();
|
scheduleWriteFileLocked();
|
||||||
@@ -545,7 +545,7 @@ public class RoleUserState {
|
|||||||
throw new IllegalStateException("This RoleUserState has already been destroyed");
|
throw new IllegalStateException("This RoleUserState has already been destroyed");
|
||||||
}
|
}
|
||||||
mWriteHandler.removeCallbacksAndMessages(null);
|
mWriteHandler.removeCallbacksAndMessages(null);
|
||||||
mPersistence.deleteAsUser(UserHandle.of(mUserId));
|
mPersistence.deleteForUser(UserHandle.of(mUserId));
|
||||||
mDestroyed = true;
|
mDestroyed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user