diff --git a/core/api/current.txt b/core/api/current.txt index 2531d818e5288..e72ab7e50f08f 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -31482,6 +31482,7 @@ package android.os { method public boolean isQuietModeEnabled(android.os.UserHandle); method public boolean isSystemUser(); method public boolean isUserAGoat(); + method public boolean isUserForeground(); method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public boolean isUserRunning(android.os.UserHandle); method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public boolean isUserRunningOrStopping(android.os.UserHandle); method public boolean isUserUnlocked(); diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl index b39c182fcab6a..7437e037fa3ea 100644 --- a/core/java/android/os/IUserManager.aidl +++ b/core/java/android/os/IUserManager.aidl @@ -113,6 +113,7 @@ interface IUserManager { boolean hasBadge(int userId); boolean isUserUnlocked(int userId); boolean isUserRunning(int userId); + boolean isUserForeground(); boolean isUserNameSet(int userId); boolean hasRestrictedProfiles(); 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 ea1ce37283650..8bdfd3d3d6272 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -2299,6 +2299,19 @@ public class UserManager { } } + /** + * Checks if the calling user is running on foreground. + * + * @return whether the calling user is running on foreground. + */ + public boolean isUserForeground() { + try { + return mService.isUserForeground(); + } catch (RemoteException re) { + throw re.rethrowFromSystemServer(); + } + } + /** * Return whether the calling user is running in an "unlocked" state. *
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 753f22da2b9d6..24c27bedb9f7a 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -1521,6 +1521,14 @@ public class UserManagerService extends IUserManager.Stub { return mLocalService.isUserRunning(userId); } + @Override + public boolean isUserForeground() { + int callingUserId = Binder.getCallingUserHandle().getIdentifier(); + int currentUser = Binder.withCleanCallingIdentity(() -> ActivityManager.getCurrentUser()); + // TODO(b/179163496): should return true for profile users of the current user as well + return currentUser == callingUserId; + } + @Override public String getUserName() { if (!hasManageUsersOrPermission(android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED)) {