Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit afb12625 authored by Kholoud Mohamed's avatar Kholoud Mohamed
Browse files

Exposed some testAPIs in UserManager

The following changes in UserManager are required for ongoing
improvements to CTS/GTS infrastructure.
- Exposed the following as testAPIs:
	* isGuestUserEphemeral
	* createUser
	* preCreateUser
	* createProfileForUser
	* createRestrictedProfile
	* getUsers
	* getUserType
- Added permissions to the following APIs:
	* CREATE_USERS for getUserName
	* INTERACT_ACROSS_USERS for getProfileParent
- Added CREATE_USERS permission to the documentation of
getUsers and the APIs that call it.

Test: Confirmed that a CTS test can call these APIs
Bug: 178695365
Change-Id: Id9105db3bfefb926139715b728acedefd2a5ca3e
parent c3270833
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -31467,10 +31467,10 @@ package android.os {
    method public static android.content.Intent createUserCreationIntent(@Nullable String, @Nullable String, @Nullable String, @Nullable android.os.PersistableBundle);
    method @WorkerThread public android.os.Bundle getApplicationRestrictions(String);
    method public long getSerialNumberForUser(android.os.UserHandle);
    method @RequiresPermission("android.permission.MANAGE_USERS") public int getUserCount();
    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.CREATE_USERS"}) public int getUserCount();
    method public long getUserCreationTime(android.os.UserHandle);
    method public android.os.UserHandle getUserForSerialNumber(long);
    method @NonNull @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED}, conditional=true) public String getUserName();
    method @NonNull @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED, "android.permission.CREATE_USERS"}, conditional=true) public String getUserName();
    method public java.util.List<android.os.UserHandle> getUserProfiles();
    method public android.os.Bundle getUserRestrictions();
    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public android.os.Bundle getUserRestrictions(android.os.UserHandle);
+3 −3
Original line number Diff line number Diff line
@@ -8386,13 +8386,13 @@ package android.os {
    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<java.lang.String>) 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<android.os.UserHandle> getAllProfiles();
    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}, conditional=true) public java.util.List<android.os.UserHandle> getEnabledProfiles();
    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public android.os.UserHandle getProfileParent(@NonNull android.os.UserHandle);
    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}) public android.os.UserHandle getProfileParent(@NonNull android.os.UserHandle);
    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.os.UserHandle getRestrictedProfileParent();
    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getSeedAccountName();
    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public android.os.PersistableBundle getSeedAccountOptions();
    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getSeedAccountType();
    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public long[] getSerialNumbersOfUsers(boolean);
    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public java.util.List<android.os.UserHandle> getUserHandles(boolean);
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public long[] getSerialNumbersOfUsers(boolean);
    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.List<android.os.UserHandle> getUserHandles(boolean);
    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED}) public android.graphics.Bitmap getUserIcon();
    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<android.os.UserManager.EnforcingUser> getUserRestrictionSources(String, android.os.UserHandle);
+66 −0
Original line number Diff line number Diff line
@@ -748,6 +748,65 @@ package android.content.pm {
    ctor public ShortcutManager(android.content.Context);
  }

  public class UserInfo implements android.os.Parcelable {
    ctor public UserInfo(int, String, int);
    ctor public UserInfo(int, String, String, int);
    ctor public UserInfo(int, String, String, int, String);
    ctor @Deprecated public UserInfo();
    ctor public UserInfo(android.content.pm.UserInfo);
    method public boolean canHaveProfile();
    method public int describeContents();
    method public android.os.UserHandle getUserHandle();
    method public boolean isAdmin();
    method public boolean isDemo();
    method public boolean isEnabled();
    method public boolean isEphemeral();
    method public boolean isFull();
    method public boolean isGuest();
    method public boolean isInitialized();
    method public boolean isManagedProfile();
    method public boolean isPrimary();
    method public boolean isProfile();
    method public boolean isQuietModeEnabled();
    method public boolean isRestricted();
    method public boolean isSystemOnly();
    method public static boolean isSystemOnly(int);
    method public boolean supportsSwitchTo();
    method public boolean supportsSwitchToByUser();
    method public void writeToParcel(android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.UserInfo> CREATOR;
    field public static final int FLAG_ADMIN = 2; // 0x2
    field @Deprecated public static final int FLAG_DEMO = 512; // 0x200
    field public static final int FLAG_DISABLED = 64; // 0x40
    field public static final int FLAG_EPHEMERAL = 256; // 0x100
    field public static final int FLAG_FULL = 1024; // 0x400
    field @Deprecated public static final int FLAG_GUEST = 4; // 0x4
    field public static final int FLAG_INITIALIZED = 16; // 0x10
    field @Deprecated public static final int FLAG_MANAGED_PROFILE = 32; // 0x20
    field public static final int FLAG_PRIMARY = 1; // 0x1
    field public static final int FLAG_PROFILE = 4096; // 0x1000
    field public static final int FLAG_QUIET_MODE = 128; // 0x80
    field @Deprecated public static final int FLAG_RESTRICTED = 8; // 0x8
    field public static final int FLAG_SYSTEM = 2048; // 0x800
    field public static final int NO_PROFILE_GROUP_ID = -10000; // 0xffffd8f0
    field public boolean convertedFromPreCreated;
    field public long creationTime;
    field public int flags;
    field public boolean guestToRemove;
    field public String iconPath;
    field public int id;
    field public String lastLoggedInFingerprint;
    field public long lastLoggedInTime;
    field public String name;
    field public boolean partial;
    field public boolean preCreated;
    field public int profileBadge;
    field public int profileGroupId;
    field public int restrictedProfileParentId;
    field public int serialNumber;
    field public String userType;
  }

}

package android.content.res {
@@ -1511,8 +1570,15 @@ package android.os {
  }

  public class UserManager {
    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createProfileForUser(@Nullable String, @NonNull String, int, int, @Nullable String[]);
    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createRestrictedProfile(@Nullable String);
    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createUser(@Nullable String, @NonNull String, int);
    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public String getUserType();
    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.List<android.content.pm.UserInfo> getUsers(boolean, boolean, boolean);
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean hasBaseUserRestriction(@NonNull String, @NonNull android.os.UserHandle);
    method public static boolean isGuestUserEphemeral();
    method public static boolean isSplitSystemUser();
    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo preCreateUser(@NonNull String) throws android.os.UserManager.UserOperationException;
  }

  public final class VibrationAttributes implements android.os.Parcelable {
+71 −7
Original line number Diff line number Diff line
@@ -953,6 +953,32 @@ MissingNullability: android.content.pm.PackageManager#holdLock(android.os.IBinde
    
MissingNullability: android.content.pm.ShortcutManager#ShortcutManager(android.content.Context) parameter #0:
    
MissingNullability: android.content.pm.UserInfo#UserInfo(android.content.pm.UserInfo) parameter #0:
    Missing nullability on parameter `orig` in method `UserInfo`
MissingNullability: android.content.pm.UserInfo#UserInfo(int, String, String, int) parameter #1:
    Missing nullability on parameter `name` in method `UserInfo`
MissingNullability: android.content.pm.UserInfo#UserInfo(int, String, String, int) parameter #2:
    Missing nullability on parameter `iconPath` in method `UserInfo`
MissingNullability: android.content.pm.UserInfo#UserInfo(int, String, String, int, String) parameter #1:
    Missing nullability on parameter `name` in method `UserInfo`
MissingNullability: android.content.pm.UserInfo#UserInfo(int, String, String, int, String) parameter #2:
    Missing nullability on parameter `iconPath` in method `UserInfo`
MissingNullability: android.content.pm.UserInfo#UserInfo(int, String, String, int, String) parameter #4:
    Missing nullability on parameter `userType` in method `UserInfo`
MissingNullability: android.content.pm.UserInfo#UserInfo(int, String, int) parameter #1:
    Missing nullability on parameter `name` in method `UserInfo`
MissingNullability: android.content.pm.UserInfo#getUserHandle():
    Missing nullability on method `getUserHandle` return
MissingNullability: android.content.pm.UserInfo#iconPath:
    Missing nullability on field `iconPath` in class `class android.content.pm.UserInfo`
MissingNullability: android.content.pm.UserInfo#lastLoggedInFingerprint:
    Missing nullability on field `lastLoggedInFingerprint` in class `class android.content.pm.UserInfo`
MissingNullability: android.content.pm.UserInfo#name:
    Missing nullability on field `name` in class `class android.content.pm.UserInfo`
MissingNullability: android.content.pm.UserInfo#userType:
    Missing nullability on field `userType` in class `class android.content.pm.UserInfo`
MissingNullability: android.content.pm.UserInfo#writeToParcel(android.os.Parcel, int) parameter #0:
    Missing nullability on parameter `dest` in method `writeToParcel`
MissingNullability: android.content.res.AssetManager#getOverlayablesToString(String) parameter #0:
    
MissingNullability: android.content.res.Configuration#windowConfiguration:
@@ -2433,6 +2459,38 @@ MutableBareField: android.content.AutofillOptions#disabledActivities:
    
MutableBareField: android.content.AutofillOptions#whitelistedActivitiesForAugmentedAutofill:
    
MutableBareField: android.content.pm.UserInfo#convertedFromPreCreated:
    Bare field convertedFromPreCreated must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#creationTime:
    Bare field creationTime must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#flags:
    Bare field flags must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#guestToRemove:
    Bare field guestToRemove must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#iconPath:
    Bare field iconPath must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#id:
    Bare field id must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#lastLoggedInFingerprint:
    Bare field lastLoggedInFingerprint must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#lastLoggedInTime:
    Bare field lastLoggedInTime must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#name:
    Bare field name must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#partial:
    Bare field partial must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#preCreated:
    Bare field preCreated must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#profileBadge:
    Bare field profileBadge must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#profileGroupId:
    Bare field profileGroupId must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#restrictedProfileParentId:
    Bare field restrictedProfileParentId must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#serialNumber:
    Bare field serialNumber must be marked final, or moved behind accessors if mutable
MutableBareField: android.content.pm.UserInfo#userType:
    Bare field userType must be marked final, or moved behind accessors if mutable
MutableBareField: android.database.sqlite.SQLiteDebug.DbStats#cache:
    
MutableBareField: android.database.sqlite.SQLiteDebug.DbStats#dbName:
@@ -2619,6 +2677,10 @@ NotCloseable: android.telephony.ims.stub.ImsUtImplBase:
    


NullableCollection: android.os.UserManager#createProfileForUser(String, String, int, int, String[]) parameter #4:
    Type of parameter disallowedPackages in android.os.UserManager.createProfileForUser(String name, String userType, int flags, int userId, String[] disallowedPackages) is a nullable collection (`java.lang.String[]`); must be non-null


OnNameExpected: android.service.autofill.augmented.AugmentedAutofillService#dump(java.io.PrintWriter, String[]):
    
OnNameExpected: android.service.contentcapture.ContentCaptureService#dump(java.io.FileDescriptor, java.io.PrintWriter, String[]):
@@ -2729,6 +2791,8 @@ ParcelCreator: android.service.autofill.InternalValidator:

ParcelNotFinal: android.app.WindowConfiguration:
    
ParcelNotFinal: android.content.pm.UserInfo:
    Parcelable classes must be final: android.content.pm.UserInfo is not final
ParcelNotFinal: android.net.metrics.IpConnectivityLog.Event:
    
ParcelNotFinal: android.os.IncidentManager.IncidentReport:
+2 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.content.pm;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.TestApi;
import android.annotation.UserIdInt;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Parcel;
@@ -47,6 +48,7 @@ import java.lang.annotation.RetentionPolicy;
 *
 * @hide
 */
@TestApi
public class UserInfo implements Parcelable {

    /**
Loading