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

Commit bc505674 authored by Felipe Leme's avatar Felipe Leme
Browse files

Changed UserManager.getVisibleUsers() to return Set instead of List.

Test: atest MultipleUsersOnMultipleDisplaysTest CtsMultiUserTestCases:android.multiuser.cts.UserManagerTest
Test: m update-api

Bug: 242801948

Change-Id: Ie18531e65bff66c7e4f9af8b5134e04a8d4f1016
parent 12e64b35
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -32538,7 +32538,7 @@ package android.os {
    method @NonNull @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.QUERY_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public android.content.pm.UserProperties getUserProperties(@NonNull android.os.UserHandle);
    method public android.os.Bundle getUserRestrictions();
    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public android.os.Bundle getUserRestrictions(android.os.UserHandle);
    method @NonNull @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}) public java.util.List<android.os.UserHandle> getVisibleUsers();
    method @NonNull @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}) public java.util.Set<android.os.UserHandle> getVisibleUsers();
    method public boolean hasUserRestriction(String);
    method public boolean isDemoUser();
    method public static boolean isHeadlessSystemUserMode();
+1 −1
Original line number Diff line number Diff line
@@ -130,7 +130,7 @@ interface IUserManager {
    boolean isUserRunning(int userId);
    boolean isUserForeground(int userId);
    boolean isUserVisible(int userId);
    List<UserHandle> getVisibleUsers();
    int[] getVisibleUsers();
    boolean isUserNameSet(int userId);
    boolean hasRestrictedProfiles(int userId);
    boolean requestQuietModeEnabled(String callingPackage, boolean enableQuietMode, int userId, in IntentSender target, int flags);
+9 −2
Original line number Diff line number Diff line
@@ -2904,12 +2904,19 @@ public class UserManager {
     */
    @RequiresPermission(anyOf = {Manifest.permission.MANAGE_USERS,
            Manifest.permission.INTERACT_ACROSS_USERS})
    public @NonNull List<UserHandle> getVisibleUsers() {
    public @NonNull Set<UserHandle> getVisibleUsers() {
        ArraySet<UserHandle> result = new ArraySet<>();
        try {
            return mService.getVisibleUsers();
            int[] visibleUserIds = mService.getVisibleUsers();
            if (visibleUserIds != null) {
                for (int userId : visibleUserIds) {
                    result.add(UserHandle.of(userId));
                }
            }
        } catch (RemoteException re) {
            throw re.rethrowFromSystemServer();
        }
        return result;
    }

    /**
+5 −4
Original line number Diff line number Diff line
@@ -1776,7 +1776,7 @@ public class UserManagerService extends IUserManager.Stub {
    }

    @Override
    public List<UserHandle> getVisibleUsers() {
    public int[] getVisibleUsers() {
        if (!hasManageUsersOrPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)) {
            throw new SecurityException("Caller needs MANAGE_USERS or INTERACT_ACROSS_USERS "
                    + "permission to get list of visible users");
@@ -1784,18 +1784,19 @@ public class UserManagerService extends IUserManager.Stub {
        final long ident = Binder.clearCallingIdentity();
        try {
            // TODO(b/2399825580): refactor into UserDisplayAssigner
            IntArray visibleUsers;
            synchronized (mUsersLock) {
                int usersSize = mUsers.size();
                ArrayList<UserHandle> visibleUsers = new ArrayList<>(usersSize);
                visibleUsers = new IntArray();
                for (int i = 0; i < usersSize; i++) {
                    UserInfo ui = mUsers.valueAt(i).info;
                    if (!ui.partial && !ui.preCreated && !mRemovingUserIds.get(ui.id)
                            && mUserVisibilityMediator.isUserVisible(ui.id)) {
                        visibleUsers.add(UserHandle.of(ui.id));
                        visibleUsers.add(ui.id);
                    }
                }
                return visibleUsers;
            }
            return visibleUsers.toArray();
        } finally {
            Binder.restoreCallingIdentity(ident);
        }