Loading services/core/java/com/android/server/pm/Settings.java +49 −22 Original line number Diff line number Diff line Loading @@ -4881,7 +4881,7 @@ public final class Settings implements Watchable, Snappable { } if (ps.sharedUser == null || permissionNames != null || dumpAll) { dumpInstallPermissionsLPr(pw, prefix + " ", permissionNames, permissionsState); dumpInstallPermissionsLPr(pw, prefix + " ", permissionNames, permissionsState, users); } if (dumpAllComponents) { Loading Loading @@ -5131,9 +5131,12 @@ public final class Settings implements Watchable, Snappable { 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( userId, su.userId)); final Collection<PermissionState> permissions = Loading Loading @@ -5247,31 +5250,55 @@ public final class Settings implements Watchable, Snappable { } } void dumpInstallPermissionsLPr(PrintWriter pw, String prefix, ArraySet<String> permissionNames, LegacyPermissionState permissionsState) { void dumpInstallPermissionsLPr(PrintWriter pw, String prefix, ArraySet<String> filterPermissionNames, LegacyPermissionState permissionsState, List<UserInfo> users) { ArraySet<String> dumpPermissionNames = new ArraySet<>(); for (UserInfo user : users) { int userId = user.id; Collection<PermissionState> permissionStates = permissionsState.getPermissionStates( UserHandle.USER_SYSTEM); boolean hasInstallPermissions = false; for (PermissionState permissionState : permissionStates) { if (!permissionState.isRuntime()) { hasInstallPermissions = true; break; } } if (hasInstallPermissions) { pw.print(prefix); pw.println("install permissions:"); userId); for (PermissionState permissionState : permissionStates) { if (permissionState.isRuntime()) { continue; } if (permissionNames != null && !permissionNames.contains(permissionState.getName())) { String permissionName = permissionState.getName(); if (filterPermissionNames != null && !filterPermissionNames.contains(permissionName)) { continue; } pw.print(prefix); pw.print(" "); pw.print(permissionState.getName()); pw.print(": granted="); pw.print(permissionState.isGranted()); pw.println(permissionFlagsToString(", flags=", permissionState.getFlags())); dumpPermissionNames.add(permissionName); } } 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); } } } } Loading services/core/java/com/android/server/pm/permission/LegacyPermissionState.java +42 −2 Original line number Diff line number Diff line Loading @@ -103,6 +103,26 @@ public final class LegacyPermissionState { 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. * Loading Loading @@ -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 * @return the runtime permission states * @return the permission states */ @NonNull public Collection<PermissionState> getPermissionStates(@UserIdInt int userId) { Loading Loading @@ -301,5 +321,25 @@ public final class LegacyPermissionState { public int getFlags() { 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); } } } Loading
services/core/java/com/android/server/pm/Settings.java +49 −22 Original line number Diff line number Diff line Loading @@ -4881,7 +4881,7 @@ public final class Settings implements Watchable, Snappable { } if (ps.sharedUser == null || permissionNames != null || dumpAll) { dumpInstallPermissionsLPr(pw, prefix + " ", permissionNames, permissionsState); dumpInstallPermissionsLPr(pw, prefix + " ", permissionNames, permissionsState, users); } if (dumpAllComponents) { Loading Loading @@ -5131,9 +5131,12 @@ public final class Settings implements Watchable, Snappable { 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( userId, su.userId)); final Collection<PermissionState> permissions = Loading Loading @@ -5247,31 +5250,55 @@ public final class Settings implements Watchable, Snappable { } } void dumpInstallPermissionsLPr(PrintWriter pw, String prefix, ArraySet<String> permissionNames, LegacyPermissionState permissionsState) { void dumpInstallPermissionsLPr(PrintWriter pw, String prefix, ArraySet<String> filterPermissionNames, LegacyPermissionState permissionsState, List<UserInfo> users) { ArraySet<String> dumpPermissionNames = new ArraySet<>(); for (UserInfo user : users) { int userId = user.id; Collection<PermissionState> permissionStates = permissionsState.getPermissionStates( UserHandle.USER_SYSTEM); boolean hasInstallPermissions = false; for (PermissionState permissionState : permissionStates) { if (!permissionState.isRuntime()) { hasInstallPermissions = true; break; } } if (hasInstallPermissions) { pw.print(prefix); pw.println("install permissions:"); userId); for (PermissionState permissionState : permissionStates) { if (permissionState.isRuntime()) { continue; } if (permissionNames != null && !permissionNames.contains(permissionState.getName())) { String permissionName = permissionState.getName(); if (filterPermissionNames != null && !filterPermissionNames.contains(permissionName)) { continue; } pw.print(prefix); pw.print(" "); pw.print(permissionState.getName()); pw.print(": granted="); pw.print(permissionState.isGranted()); pw.println(permissionFlagsToString(", flags=", permissionState.getFlags())); dumpPermissionNames.add(permissionName); } } 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); } } } } Loading
services/core/java/com/android/server/pm/permission/LegacyPermissionState.java +42 −2 Original line number Diff line number Diff line Loading @@ -103,6 +103,26 @@ public final class LegacyPermissionState { 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. * Loading Loading @@ -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 * @return the runtime permission states * @return the permission states */ @NonNull public Collection<PermissionState> getPermissionStates(@UserIdInt int userId) { Loading Loading @@ -301,5 +321,25 @@ public final class LegacyPermissionState { public int getFlags() { 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); } } }