Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 12442e7a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents 297b6fe0 d2a1feba
Loading
Loading
Loading
Loading
+49 −22
Original line number Diff line number Diff line
@@ -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) {
@@ -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 =
@@ -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);
                }
            }
        }
    }
+42 −2
Original line number Diff line number Diff line
@@ -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.
     *
@@ -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) {
@@ -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);
        }
    }
}