Loading core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -32264,6 +32264,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 public boolean hasUserRestriction(String); method public boolean isDemoUser(); method public static boolean isHeadlessSystemUserMode(); core/java/android/os/IUserManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,7 @@ interface IUserManager { boolean isUserRunning(int userId); boolean isUserForeground(int userId); boolean isUserVisible(int userId); List<UserHandle> getVisibleUsers(); boolean isUserNameSet(int userId); boolean hasRestrictedProfiles(int userId); boolean requestQuietModeEnabled(String callingPackage, boolean enableQuietMode, int userId, in IntentSender target, int flags); Loading core/java/android/os/UserManager.java +15 −0 Original line number Diff line number Diff line Loading @@ -2885,6 +2885,21 @@ public class UserManager { } } /** * Gets the visible users (as defined by {@link #isUserVisible()}. * * @return visible users at the moment. */ @RequiresPermission(anyOf = {Manifest.permission.MANAGE_USERS, Manifest.permission.INTERACT_ACROSS_USERS}) public @NonNull List<UserHandle> getVisibleUsers() { try { return mService.getVisibleUsers(); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } } /** * Return whether the context user is running in an "unlocked" state. * <p> Loading services/core/java/com/android/server/pm/UserManagerService.java +27 −1 Original line number Diff line number Diff line Loading @@ -911,7 +911,7 @@ public class UserManagerService extends IUserManager.Stub { private @NonNull List<UserInfo> getUsersInternal(boolean excludePartial, boolean excludeDying, boolean excludePreCreated) { synchronized (mUsersLock) { ArrayList<UserInfo> users = new ArrayList<UserInfo>(mUsers.size()); ArrayList<UserInfo> users = new ArrayList<>(mUsers.size()); final int userSize = mUsers.size(); for (int i = 0; i < userSize; i++) { UserInfo ui = mUsers.valueAt(i).info; Loading Loading @@ -1766,6 +1766,32 @@ public class UserManagerService extends IUserManager.Stub { } } @Override public List<UserHandle> 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"); } final long ident = Binder.clearCallingIdentity(); try { // TODO(b/2399825580): refactor into UserDisplayAssigner synchronized (mUsersLock) { int usersSize = mUsers.size(); ArrayList<UserHandle> visibleUsers = new ArrayList<>(usersSize); for (int i = 0; i < usersSize; i++) { UserInfo ui = mUsers.valueAt(i).info; if (!ui.partial && !ui.preCreated && !mRemovingUserIds.get(ui.id) && isUserVisibleUnchecked(ui.id)) { visibleUsers.add(UserHandle.of(ui.id)); } } return visibleUsers; } } finally { Binder.restoreCallingIdentity(ident); } } @Override public @NonNull String getUserName() { final int callingUid = Binder.getCallingUid(); Loading Loading
core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -32264,6 +32264,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 public boolean hasUserRestriction(String); method public boolean isDemoUser(); method public static boolean isHeadlessSystemUserMode();
core/java/android/os/IUserManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,7 @@ interface IUserManager { boolean isUserRunning(int userId); boolean isUserForeground(int userId); boolean isUserVisible(int userId); List<UserHandle> getVisibleUsers(); boolean isUserNameSet(int userId); boolean hasRestrictedProfiles(int userId); boolean requestQuietModeEnabled(String callingPackage, boolean enableQuietMode, int userId, in IntentSender target, int flags); Loading
core/java/android/os/UserManager.java +15 −0 Original line number Diff line number Diff line Loading @@ -2885,6 +2885,21 @@ public class UserManager { } } /** * Gets the visible users (as defined by {@link #isUserVisible()}. * * @return visible users at the moment. */ @RequiresPermission(anyOf = {Manifest.permission.MANAGE_USERS, Manifest.permission.INTERACT_ACROSS_USERS}) public @NonNull List<UserHandle> getVisibleUsers() { try { return mService.getVisibleUsers(); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } } /** * Return whether the context user is running in an "unlocked" state. * <p> Loading
services/core/java/com/android/server/pm/UserManagerService.java +27 −1 Original line number Diff line number Diff line Loading @@ -911,7 +911,7 @@ public class UserManagerService extends IUserManager.Stub { private @NonNull List<UserInfo> getUsersInternal(boolean excludePartial, boolean excludeDying, boolean excludePreCreated) { synchronized (mUsersLock) { ArrayList<UserInfo> users = new ArrayList<UserInfo>(mUsers.size()); ArrayList<UserInfo> users = new ArrayList<>(mUsers.size()); final int userSize = mUsers.size(); for (int i = 0; i < userSize; i++) { UserInfo ui = mUsers.valueAt(i).info; Loading Loading @@ -1766,6 +1766,32 @@ public class UserManagerService extends IUserManager.Stub { } } @Override public List<UserHandle> 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"); } final long ident = Binder.clearCallingIdentity(); try { // TODO(b/2399825580): refactor into UserDisplayAssigner synchronized (mUsersLock) { int usersSize = mUsers.size(); ArrayList<UserHandle> visibleUsers = new ArrayList<>(usersSize); for (int i = 0; i < usersSize; i++) { UserInfo ui = mUsers.valueAt(i).info; if (!ui.partial && !ui.preCreated && !mRemovingUserIds.get(ui.id) && isUserVisibleUnchecked(ui.id)) { visibleUsers.add(UserHandle.of(ui.id)); } } return visibleUsers; } } finally { Binder.restoreCallingIdentity(ident); } } @Override public @NonNull String getUserName() { final int callingUid = Binder.getCallingUid(); Loading