Skip to content

Commit

Permalink
DO NOT MERGE Implement suggested changes in API review for permission…
Browse files Browse the repository at this point in the history
… mainline.

Test: build
Fixes: 150877494
Change-Id: Ieca5f7a46241032f6722bb379fc08206b9600ddc
  • Loading branch information
zhanghai committed Mar 5, 2020
1 parent d944bcf commit 6e84285
Show file tree
Hide file tree
Showing 12 changed files with 169 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public interface RuntimePermissionsPersistence {
* @return the runtime permissions read
*/
@Nullable
RuntimePermissionsState readAsUser(@NonNull UserHandle user);
RuntimePermissionsState readForUser(@NonNull UserHandle user);

/**
* Write the runtime permissions to persistence.
Expand All @@ -50,7 +50,8 @@ public interface RuntimePermissionsPersistence {
* @param runtimePermissions the runtime permissions to write
* @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.
Expand All @@ -59,7 +60,7 @@ public interface RuntimePermissionsPersistence {
*
* @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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public class RuntimePermissionsPersistenceImpl implements RuntimePermissionsPers

@Nullable
@Override
public RuntimePermissionsState readAsUser(@NonNull UserHandle user) {
public RuntimePermissionsState readForUser(@NonNull UserHandle user) {
File file = getFile(user);
try (FileInputStream inputStream = new AtomicFile(file).openRead()) {
XmlPullParser parser = Xml.newPullParser();
Expand Down Expand Up @@ -172,7 +172,7 @@ private static List<RuntimePermissionsState.PermissionState> parsePermissions(
}

@Override
public void writeAsUser(@NonNull RuntimePermissionsState runtimePermissions,
public void writeForUser(@NonNull RuntimePermissionsState runtimePermissions,
@NonNull UserHandle user) {
File file = getFile(user);
AtomicFile atomicFile = new AtomicFile(file);
Expand Down Expand Up @@ -252,7 +252,7 @@ private static void serializePermissions(@NonNull XmlSerializer serializer,
}

@Override
public void deleteAsUser(@NonNull UserHandle user) {
public void deleteForUser(@NonNull UserHandle user) {
getFile(user).delete();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
* State of all runtime permissions.
Expand Down Expand Up @@ -61,6 +62,14 @@ public final class RuntimePermissionsState {
@NonNull
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,
@NonNull Map<String, List<PermissionState>> packagePermissions,
@NonNull Map<String, List<PermissionState>> sharedUserPermissions) {
Expand All @@ -70,32 +79,72 @@ public RuntimePermissionsState(int version, @Nullable String fingerprint,
mSharedUserPermissions = sharedUserPermissions;
}

/**
* Get the version of the runtime permissions.
*
* @return the version of the runtime permissions
*/
public int getVersion() {
return mVersion;
}

/**
* Get the fingerprint of the runtime permissions.
*
* @return the fingerprint of the runtime permissions
*/
@Nullable
public String getFingerprint() {
return mFingerprint;
}

/**
* Get the runtime permissions by packages.
*
* @return the runtime permissions by packages
*/
@NonNull
public Map<String, List<PermissionState>> getPackagePermissions() {
return mPackagePermissions;
}

/**
* Get the runtime permissions by shared users.
*
* @return the runtime permissions by shared users
*/
@NonNull
public Map<String, List<PermissionState>> getSharedUserPermissions() {
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.
*/
public static class PermissionState {
public static final class PermissionState {

/**
* Name of the permission.
* The name of the permission.
*/
@NonNull
private final String mName;
Expand All @@ -106,27 +155,68 @@ public static class PermissionState {
private final boolean mGranted;

/**
* Flags of the permission.
* The flags of the permission.
*/
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) {
mName = name;
mGranted = granted;
mFlags = flags;
}

/**
* Get the name of the permission.
*
* @return the name of the permission
*/
@NonNull
public String getName() {
return mName;
}

/**
* Get whether the permission is granted.
*
* @return whether the permission is granted
*/
public boolean isGranted() {
return mGranted;
}

/**
* Get the flags of the permission.
*
* @return the flags of the permission
*/
public int getFlags() {
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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public interface RolesPersistence {
* @return the roles read
*/
@Nullable
RolesState readAsUser(@NonNull UserHandle user);
RolesState readForUser(@NonNull UserHandle user);

/**
* Write the roles to persistence.
Expand All @@ -50,7 +50,7 @@ public interface RolesPersistence {
* @param roles the roles to write
* @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.
Expand All @@ -59,7 +59,7 @@ public interface RolesPersistence {
*
* @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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public class RolesPersistenceImpl implements RolesPersistence {

@Nullable
@Override
public RolesState readAsUser(@NonNull UserHandle user) {
public RolesState readForUser(@NonNull UserHandle user) {
File file = getFile(user);
try (FileInputStream inputStream = new AtomicFile(file).openRead()) {
XmlPullParser parser = Xml.newPullParser();
Expand Down Expand Up @@ -146,7 +146,7 @@ private static Set<String> parseRoleHolders(@NonNull XmlPullParser parser)
}

@Override
public void writeAsUser(@NonNull RolesState roles, @NonNull UserHandle user) {
public void writeForUser(@NonNull RolesState roles, @NonNull UserHandle user) {
File file = getFile(user);
AtomicFile atomicFile = new AtomicFile(file);
FileOutputStream outputStream = null;
Expand Down Expand Up @@ -205,7 +205,7 @@ private static void serializeRoleHolders(@NonNull XmlSerializer serializer,
}

@Override
public void deleteAsUser(@NonNull UserHandle user) {
public void deleteForUser(@NonNull UserHandle user) {
getFile(user).delete();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import android.annotation.SystemApi.Client;

import java.util.Map;
import java.util.Objects;
import java.util.Set;

/**
Expand Down Expand Up @@ -50,24 +51,65 @@ public final class RolesState {
@NonNull
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,
@NonNull Map<String, Set<String>> roles) {
mVersion = version;
mPackagesHash = packagesHash;
mRoles = roles;
}

/**
* Get the version of the roles.
*
* @return the version of the roles
*/
public int getVersion() {
return mVersion;
}

/**
* Get the hash of all packages in the system.
*
* @return the hash of all packages in the system
*/
@Nullable
public String getPackagesHash() {
return mPackagesHash;
}

/**
* Get the roles.
*
* @return the roles
*/
@NonNull
public Map<String, Set<String>> getRoles() {
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);
}
}
5 changes: 3 additions & 2 deletions api/system-current.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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_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 UPGRADE_RUNTIME_PERMISSIONS = "android.permission.UPGRADE_RUNTIME_PERMISSIONS";
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 WHITELIST_RESTRICTED_PERMISSIONS = "android.permission.WHITELIST_RESTRICTED_PERMISSIONS";
Expand Down Expand Up @@ -8948,15 +8949,15 @@ package android.permission {
}

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 @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 grantDefaultPermissionsToEnabledTelephonyDataServices(@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 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 stopOneTimePermissionSession(@NonNull String);
}
Expand Down
5 changes: 3 additions & 2 deletions api/test-current.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ package android {
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 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 @Deprecated public static final String WRITE_MEDIA_STORAGE = "android.permission.WRITE_MEDIA_STORAGE";
field public static final String WRITE_OBB = "android.permission.WRITE_OBB";
Expand Down Expand Up @@ -2797,9 +2798,9 @@ package android.permission {
}

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 @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 {
Expand Down
Loading

0 comments on commit 6e84285

Please sign in to comment.