diff --git a/core/api/current.txt b/core/api/current.txt index da3746d07bada..41f30de1f477c 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -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); diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl index e5de3e157c88c..f69d6b0652467 100644 --- a/core/java/android/os/IUserManager.aidl +++ b/core/java/android/os/IUserManager.aidl @@ -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); diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index d14d2e4402fe2..c802e56c8dc75 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -2857,6 +2857,30 @@ public class UserManager { return isUsersOnSecondaryDisplaysEnabled(); } + /** + * Checks if the user is visible at the moment. + * + *
Roughly speaking, a "visible user" is a user that can present UI on at least one display. + * It includes: + * + *
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 0c1c265428c68..60f22b032366b 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -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();