Merge "Dump install permission states for non-system users." into sc-dev

This commit is contained in:
TreeHugger Robot
2021-02-03 04:10:51 +00:00
committed by Android (Google) Code Review
2 changed files with 91 additions and 24 deletions

View File

@@ -4881,7 +4881,7 @@ public final class Settings implements Watchable, Snappable {
} }
if (ps.sharedUser == null || permissionNames != null || dumpAll) { if (ps.sharedUser == null || permissionNames != null || dumpAll) {
dumpInstallPermissionsLPr(pw, prefix + " ", permissionNames, permissionsState); dumpInstallPermissionsLPr(pw, prefix + " ", permissionNames, permissionsState, users);
} }
if (dumpAllComponents) { if (dumpAllComponents) {
@@ -5131,9 +5131,12 @@ public final class Settings implements Watchable, Snappable {
continue; continue;
} }
dumpInstallPermissionsLPr(pw, prefix, permissionNames, permissionsState); List<UserInfo> users = getAllUsers(UserManagerService.getInstance());
for (int userId : UserManagerService.getInstance().getUserIds()) { dumpInstallPermissionsLPr(pw, prefix, permissionNames, permissionsState, users);
for (UserInfo user : users) {
final int userId = user.id;
final int[] gids = mPermissionDataProvider.getGidsForUid(UserHandle.getUid( final int[] gids = mPermissionDataProvider.getGidsForUid(UserHandle.getUid(
userId, su.userId)); userId, su.userId));
final Collection<PermissionState> permissions = final Collection<PermissionState> permissions =
@@ -5247,31 +5250,55 @@ public final class Settings implements Watchable, Snappable {
} }
} }
void dumpInstallPermissionsLPr(PrintWriter pw, String prefix, ArraySet<String> permissionNames, void dumpInstallPermissionsLPr(PrintWriter pw, String prefix,
LegacyPermissionState permissionsState) { ArraySet<String> filterPermissionNames, LegacyPermissionState permissionsState,
Collection<PermissionState> permissionStates = permissionsState.getPermissionStates( List<UserInfo> users) {
UserHandle.USER_SYSTEM); ArraySet<String> dumpPermissionNames = new ArraySet<>();
boolean hasInstallPermissions = false; for (UserInfo user : users) {
for (PermissionState permissionState : permissionStates) { int userId = user.id;
if (!permissionState.isRuntime()) { Collection<PermissionState> permissionStates = permissionsState.getPermissionStates(
hasInstallPermissions = true; userId);
break;
}
}
if (hasInstallPermissions) {
pw.print(prefix); pw.println("install permissions:");
for (PermissionState permissionState : permissionStates) { for (PermissionState permissionState : permissionStates) {
if (permissionState.isRuntime()) { if (permissionState.isRuntime()) {
continue; continue;
} }
if (permissionNames != null String permissionName = permissionState.getName();
&& !permissionNames.contains(permissionState.getName())) { if (filterPermissionNames != null
&& !filterPermissionNames.contains(permissionName)) {
continue; continue;
} }
pw.print(prefix); pw.print(" "); pw.print(permissionState.getName()); dumpPermissionNames.add(permissionName);
pw.print(": granted="); pw.print(permissionState.isGranted()); }
pw.println(permissionFlagsToString(", flags=", }
permissionState.getFlags())); boolean printedSomething = false;
for (String permissionName : dumpPermissionNames) {
PermissionState systemPermissionState = permissionsState.getPermissionState(
permissionName, UserHandle.USER_SYSTEM);
for (UserInfo user : users) {
int userId = user.id;
PermissionState permissionState;
if (userId == UserHandle.USER_SYSTEM) {
permissionState = systemPermissionState;
} else {
permissionState = permissionsState.getPermissionState(permissionName, userId);
if (Objects.equals(permissionState, systemPermissionState)) {
continue;
}
}
if (!printedSomething) {
pw.print(prefix); pw.println("install permissions:");
printedSomething = true;
}
pw.print(prefix); pw.print(" "); pw.print(permissionName);
pw.print(": granted="); pw.print(
permissionState != null && permissionState.isGranted());
pw.print(permissionFlagsToString(", flags=",
permissionState != null ? permissionState.getFlags() : 0));
if (userId == UserHandle.USER_SYSTEM) {
pw.println();
} else {
pw.print(", userId="); pw.println(userId);
}
} }
} }
} }

View File

@@ -103,6 +103,26 @@ public final class LegacyPermissionState {
return Objects.equals(mMissing, other.mMissing); return Objects.equals(mMissing, other.mMissing);
} }
/**
* Get the permission state for a permission and a user.
*
* @param permissionName the permission name
* @param userId the user ID
* @return the permission state
*
* @hide
*/
@Nullable
public PermissionState getPermissionState(@NonNull String permissionName,
@UserIdInt int userId) {
checkUserId(userId);
UserState userState = mUserStates.get(userId);
if (userState == null) {
return null;
}
return userState.getPermissionState(permissionName);
}
/** /**
* Put a permission state for a user. * Put a permission state for a user.
* *
@@ -142,10 +162,10 @@ public final class LegacyPermissionState {
} }
/** /**
* Get all the runtime permission states for a user. * Get all the permission states for a user.
* *
* @param userId the user ID * @param userId the user ID
* @return the runtime permission states * @return the permission states
*/ */
@NonNull @NonNull
public Collection<PermissionState> getPermissionStates(@UserIdInt int userId) { public Collection<PermissionState> getPermissionStates(@UserIdInt int userId) {
@@ -301,5 +321,25 @@ public final class LegacyPermissionState {
public int getFlags() { public int getFlags() {
return mFlags; return mFlags;
} }
@Override
public boolean equals(@Nullable Object object) {
if (this == object) {
return true;
}
if (object == null || getClass() != object.getClass()) {
return false;
}
PermissionState that = (PermissionState) object;
return mRuntime == that.mRuntime
&& mGranted == that.mGranted
&& mFlags == that.mFlags
&& Objects.equals(mName, that.mName);
}
@Override
public int hashCode() {
return Objects.hash(mName, mRuntime, mGranted, mFlags);
}
} }
} }