diff --git a/api/system-current.txt b/api/system-current.txt index f974380f72c35..d17911f9bc0dd 100755 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -9049,7 +9049,9 @@ package android.os { public class UserManager { method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void clearSeedAccountData(); - method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.os.UserHandle createProfile(@NonNull String, @NonNull String, @Nullable String[]) throws android.os.UserManager.UserOperationException; + method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.os.UserHandle createProfile(@NonNull String, @NonNull String, @NonNull java.util.Set) throws android.os.UserManager.UserOperationException; + method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}, conditional=true) public java.util.List getAllProfiles(); + method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}, conditional=true) public java.util.List getEnabledProfiles(); method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public android.os.UserHandle getProfileParent(@NonNull android.os.UserHandle); method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getSeedAccountName(); method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public android.os.PersistableBundle getSeedAccountOptions(); @@ -9057,7 +9059,6 @@ package android.os { method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public long[] getSerialNumbersOfUsers(boolean); method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public java.util.List getUserHandles(boolean); method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED}) public android.graphics.Bitmap getUserIcon(); - method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}, conditional=true) public java.util.List getUserProfiles(boolean); method @Deprecated @android.os.UserManager.UserRestrictionSource @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public int getUserRestrictionSource(String, android.os.UserHandle); method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public java.util.List getUserRestrictionSources(String, android.os.UserHandle); method @RequiresPermission(allOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public int getUserSwitchability(); diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 6d1f646f943b8..5ba1c6c34d759 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -33,8 +33,8 @@ import android.annotation.UserIdInt; import android.annotation.WorkerThread; import android.app.Activity; import android.app.ActivityManager; -import android.app.admin.DevicePolicyManager; import android.app.PropertyInvalidatedCache; +import android.app.admin.DevicePolicyManager; import android.compat.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; @@ -63,6 +63,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.List; +import java.util.Set; /** * Manages users and user details on a multi-user system. There are two major categories of @@ -2706,10 +2707,11 @@ public class UserManager { Manifest.permission.CREATE_USERS}) @UserHandleAware public @Nullable UserHandle createProfile(@NonNull String name, @NonNull String userType, - @Nullable String[] disallowedPackages) throws UserOperationException { + @NonNull Set disallowedPackages) throws UserOperationException { try { return mService.createProfileForUserWithThrow(name, userType, 0, - mUserId, disallowedPackages).getUserHandle(); + mUserId, disallowedPackages.toArray( + new String[disallowedPackages.size()])).getUserHandle(); } catch (ServiceSpecificException e) { return returnNullOrThrowUserOperationException(e, mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.R); @@ -3343,19 +3345,46 @@ public class UserManager { } /** - * Returns a list of ids for profiles associated with the context user including the user - * itself. + * Returns a list of ids for enabled profiles associated with the context user including the + * user itself. * - * @param enabledOnly whether to return only {@link UserInfo#isEnabled() enabled} profiles * @return A non-empty list of UserHandles associated with the calling user. - * * @hide */ @SystemApi @RequiresPermission(anyOf = {Manifest.permission.MANAGE_USERS, Manifest.permission.CREATE_USERS}, conditional = true) @UserHandleAware - public @NonNull List getUserProfiles(boolean enabledOnly) { + public @NonNull List getEnabledProfiles() { + return getProfiles(true); + } + + /** + * Returns a list of ids for all profiles associated with the context user including the user + * itself. + * + * @return A non-empty list of UserHandles associated with the calling user. + * @hide + */ + @SystemApi + @RequiresPermission(anyOf = {Manifest.permission.MANAGE_USERS, + Manifest.permission.CREATE_USERS}, conditional = true) + @UserHandleAware + public @NonNull List getAllProfiles() { + return getProfiles(false); + } + + /** + * Returns a list of ids for profiles associated with the context user including the user + * itself. + * + * @param enabledOnly whether to return only {@link UserInfo#isEnabled() enabled} profiles + * @return A non-empty list of UserHandles associated with the calling user. + */ + @RequiresPermission(anyOf = {Manifest.permission.MANAGE_USERS, + Manifest.permission.CREATE_USERS}, conditional = true) + @UserHandleAware + private @NonNull List getProfiles(boolean enabledOnly) { final int[] userIds = getProfileIds(mUserId, enabledOnly); final List result = new ArrayList<>(userIds.length); for (int userId : userIds) { diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java index 118c540a41316..bec37e929a806 100644 --- a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java @@ -812,7 +812,7 @@ public final class UserManagerTest { "android", 0, mUserManager.getPrimaryUser().getUserHandle()) .getSystemService(Context.USER_SERVICE); - List profiles = um.getUserProfiles(false); + List profiles = um.getAllProfiles(); assertThat(profiles.size()).isEqualTo(2); assertThat(profiles.get(0).equals(userProfile.getUserHandle()) || profiles.get(1).equals(userProfile.getUserHandle())).isTrue();