Merge "Initial implementation of UserManager.isUserVisible()."

This commit is contained in:
Felipe Leme
2022-08-09 14:25:26 +00:00
committed by Android (Google) Code Review
4 changed files with 32 additions and 0 deletions

View File

@@ -32263,6 +32263,7 @@ package android.os {
method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public boolean isUserRunningOrStopping(android.os.UserHandle);
method public boolean isUserUnlocked();
method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public boolean isUserUnlocked(android.os.UserHandle);
method public boolean isUserVisible();
method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.MODIFY_QUIET_MODE"}, conditional=true) public boolean requestQuietModeEnabled(boolean, @NonNull android.os.UserHandle);
method public boolean requestQuietModeEnabled(boolean, @NonNull android.os.UserHandle, int);
method @Deprecated public boolean setRestrictionsChallenge(String);

View File

@@ -125,6 +125,7 @@ interface IUserManager {
boolean isUserUnlocked(int userId);
boolean isUserRunning(int userId);
boolean isUserForeground(int userId);
boolean isUserVisible(int userId);
boolean isUserNameSet(int userId);
boolean hasRestrictedProfiles(int userId);
boolean requestQuietModeEnabled(String callingPackage, boolean enableQuietMode, int userId, in IntentSender target, int flags);

View File

@@ -2857,6 +2857,30 @@ public class UserManager {
return isUsersOnSecondaryDisplaysEnabled();
}
/**
* Checks if the user is visible at the moment.
*
* <p>Roughly speaking, a "visible user" is a user that can present UI on at least one display.
* It includes:
*
* <ol>
* <li>The current foreground user in the main display.
* <li>Current background users in secondary displays (for example, passenger users on
* automotive, using the display associated with their seats).
* <li>Profile users (in the running / started state) of other visible users.
* </ol>
*
* @return whether the user is visible at the moment, as defined above.
*/
@UserHandleAware
public boolean isUserVisible() {
try {
return mService.isUserVisible(mUserId);
} catch (RemoteException re) {
throw re.rethrowFromSystemServer();
}
}
/**
* Return whether the context user is running in an "unlocked" state.
* <p>

View File

@@ -1654,6 +1654,12 @@ public class UserManagerService extends IUserManager.Stub {
return currentUser == userId;
}
@Override
public boolean isUserVisible(@UserIdInt int userId) {
// TODO(b/239824814): implement other cases like bg user, profile, user on secondary display
return isUserForeground(userId);
}
@Override
public @NonNull String getUserName() {
final int callingUid = Binder.getCallingUid();