diff --git a/api/system-current.txt b/api/system-current.txt index 10bcffc200adf..35b096d6f5352 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5645,6 +5645,8 @@ package android.os { method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isPrimaryUser(); method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isRestrictedProfile(); method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isRestrictedProfile(@NonNull android.os.UserHandle); + method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isSameProfileGroup(@NonNull android.os.UserHandle, @NonNull android.os.UserHandle); + method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}) public boolean isUserUnlockingOrUnlocked(@NonNull android.os.UserHandle); method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean removeUser(@NonNull android.os.UserHandle); method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void setUserIcon(@NonNull android.graphics.Bitmap); method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void setUserName(@Nullable String); diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index c6b63cadd7d16..71b94ed41351d 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -1748,8 +1748,30 @@ public class UserManager { } } - /** {@hide} */ - public boolean isUserUnlockingOrUnlocked(UserHandle user) { + /** + * Return whether the provided user is already running in an + * "unlocked" state or in the process of unlocking. + *
+ * On devices with direct boot, a user is unlocked only after they've + * entered their credentials (such as a lock pattern or PIN). On devices + * without direct boot, a user is unlocked as soon as it starts. + *
+ * When a user is locked, only device-protected data storage is available. + * When a user is unlocked, both device-protected and credential-protected + * private app data storage is available. + * + *
Requires {@code android.permission.MANAGE_USERS} or + * {@code android.permission.INTERACT_ACROSS_USERS}, otherwise specified {@link UserHandle user} + * must be the calling user or a profile associated with it. + * + * @hide + */ + @SystemApi + @RequiresPermission(anyOf = { + Manifest.permission.MANAGE_USERS, + Manifest.permission.INTERACT_ACROSS_USERS + }) + public boolean isUserUnlockingOrUnlocked(@NonNull UserHandle user) { return isUserUnlockingOrUnlocked(user.getIdentifier()); } @@ -2567,6 +2589,22 @@ public class UserManager { } } + /** + * Checks if the 2 provided user handles belong to the same profile group. + * + * @param user one of the two user handles to check. + * @param otherUser one of the two user handles to check. + * @return true if the two users are in the same profile group. + * + * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.MANAGE_USERS) + public boolean isSameProfileGroup(@NonNull UserHandle user, @NonNull UserHandle otherUser) { + return isSameProfileGroup(user.getIdentifier(), otherUser.getIdentifier()); + } + /** * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. * @param userId one of the two user ids to check.