Merge "New @SystemApi: UserManager.getVisibleUsers()"
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user