Merge "System UserInfo flags are set in UserTypeFactory" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
7cbe11f94f
@@ -985,7 +985,7 @@ package android.content.pm {
|
||||
method public boolean isInitialized();
|
||||
method public boolean isMain();
|
||||
method public boolean isManagedProfile();
|
||||
method public boolean isPrimary();
|
||||
method @Deprecated public boolean isPrimary();
|
||||
method public boolean isProfile();
|
||||
method public boolean isQuietModeEnabled();
|
||||
method public boolean isRestricted();
|
||||
@@ -1002,7 +1002,7 @@ package android.content.pm {
|
||||
field public static final int FLAG_INITIALIZED = 16; // 0x10
|
||||
field public static final int FLAG_MAIN = 16384; // 0x4000
|
||||
field @Deprecated public static final int FLAG_MANAGED_PROFILE = 32; // 0x20
|
||||
field public static final int FLAG_PRIMARY = 1; // 0x1
|
||||
field @Deprecated 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
|
||||
|
||||
@@ -60,10 +60,17 @@ public class UserInfo implements Parcelable {
|
||||
*/
|
||||
|
||||
/**
|
||||
* Primary user. Only one user can have this flag set. It identifies the first human user
|
||||
* on a device. This flag is not supported in headless system user mode.
|
||||
* Primary user. In practice, this is just synonymous with {@link #FLAG_SYSTEM}.
|
||||
*
|
||||
* <p>On many devices, this will also be the first human user.
|
||||
* However, in {@link UserManager#isHeadlessSystemUserMode() headless system user mode}, this
|
||||
* should be regarded as unsupported since the system user may not be a human.
|
||||
*
|
||||
* @deprecated For checking for user 0, use {@link #FLAG_SYSTEM}.
|
||||
* For checking for the designated "main human user", use {@link #FLAG_MAIN}.
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
@Deprecated
|
||||
public static final int FLAG_PRIMARY = 0x00000001;
|
||||
|
||||
/**
|
||||
@@ -335,7 +342,12 @@ public class UserInfo implements Parcelable {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated For checking for user 0, compare {@link #id} to {@link UserHandle#USER_SYSTEM}.
|
||||
* For checking for the designated "main human user", use {@link #isMain()}.
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
@Deprecated
|
||||
public boolean isPrimary() {
|
||||
return (flags & FLAG_PRIMARY) == FLAG_PRIMARY;
|
||||
}
|
||||
|
||||
@@ -4381,11 +4381,16 @@ public class UserManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns information for Primary user.
|
||||
* Returns information for Primary user (which in practice is the same as the System user).
|
||||
*
|
||||
* @return the Primary user, null if not found.
|
||||
* @deprecated For the system user, call {@link #getUserInfo} on {@link UserHandle#USER_SYSTEM},
|
||||
* or just use {@link UserHandle#SYSTEM} or {@link UserHandle#USER_SYSTEM}.
|
||||
* For the designated MainUser, use {@link #getMainUser()}.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@Deprecated
|
||||
@RequiresPermission(android.Manifest.permission.MANAGE_USERS)
|
||||
public @Nullable UserInfo getPrimaryUser() {
|
||||
try {
|
||||
|
||||
@@ -3938,22 +3938,22 @@ public class UserManagerService extends IUserManager.Stub {
|
||||
|
||||
@GuardedBy({"mPackagesLock"})
|
||||
private void fallbackToSingleUserLP() {
|
||||
int flags = UserInfo.FLAG_SYSTEM | UserInfo.FLAG_INITIALIZED | UserInfo.FLAG_ADMIN
|
||||
| UserInfo.FLAG_PRIMARY;
|
||||
// Create the system user
|
||||
String systemUserType = isDefaultHeadlessSystemUserMode()
|
||||
final String systemUserType = isDefaultHeadlessSystemUserMode()
|
||||
? UserManager.USER_TYPE_SYSTEM_HEADLESS
|
||||
: UserManager.USER_TYPE_FULL_SYSTEM;
|
||||
flags |= mUserTypes.get(systemUserType).getDefaultUserInfoFlags();
|
||||
UserInfo system = new UserInfo(UserHandle.USER_SYSTEM, null, null, flags, systemUserType);
|
||||
UserData userData = putUserInfo(system);
|
||||
final int flags = mUserTypes.get(systemUserType).getDefaultUserInfoFlags()
|
||||
| UserInfo.FLAG_INITIALIZED;
|
||||
final UserInfo system = new UserInfo(UserHandle.USER_SYSTEM,
|
||||
/* name= */ null, /* iconPath= */ null, flags, systemUserType);
|
||||
final UserData userData = putUserInfo(system);
|
||||
userData.userProperties = new UserProperties(
|
||||
mUserTypes.get(userData.info.userType).getDefaultUserPropertiesReference());
|
||||
mNextSerialNumber = MIN_USER_ID;
|
||||
mUserVersion = USER_VERSION;
|
||||
mUserTypeVersion = UserTypeFactory.getUserTypeVersion();
|
||||
|
||||
Bundle restrictions = new Bundle();
|
||||
final Bundle restrictions = new Bundle();
|
||||
try {
|
||||
final String[] defaultFirstUserRestrictions = mContext.getResources().getStringArray(
|
||||
com.android.internal.R.array.config_defaultFirstUserRestrictions);
|
||||
|
||||
@@ -76,7 +76,7 @@ public final class UserTypeDetails {
|
||||
private final @UserInfoFlag int mBaseType;
|
||||
|
||||
// TODO(b/143784345): Update doc/name when we clean up UserInfo.
|
||||
/** The {@link UserInfo.UserInfoFlag}s that all users of this type will automatically have. */
|
||||
/** The {@link UserInfoFlag}s to apply by default to newly created users of this type. */
|
||||
private final @UserInfoFlag int mDefaultUserInfoPropertyFlags;
|
||||
|
||||
/**
|
||||
@@ -224,7 +224,7 @@ public final class UserTypeDetails {
|
||||
}
|
||||
|
||||
// TODO(b/143784345): Update comment when UserInfo is reorganized.
|
||||
/** The {@link UserInfo.UserInfoFlag}s that all users of this type will automatically have. */
|
||||
/** The {@link UserInfoFlag}s to apply by default to newly created users of this type. */
|
||||
public int getDefaultUserInfoFlags() {
|
||||
return mDefaultUserInfoPropertyFlags | mBaseType;
|
||||
}
|
||||
@@ -526,6 +526,7 @@ public final class UserTypeDetails {
|
||||
Preconditions.checkArgument(hasValidPropertyFlags(),
|
||||
"UserTypeDetails " + mName + " has invalid flags: "
|
||||
+ Integer.toHexString(mDefaultUserInfoPropertyFlags));
|
||||
checkSystemAndMainUserPreconditions();
|
||||
if (hasBadge()) {
|
||||
Preconditions.checkArgument(mBadgeLabels != null && mBadgeLabels.length != 0,
|
||||
"UserTypeDetails " + mName + " has badge but no badgeLabels.");
|
||||
@@ -578,8 +579,6 @@ public final class UserTypeDetails {
|
||||
// TODO(b/143784345): Refactor this when we clean up UserInfo.
|
||||
private boolean hasValidPropertyFlags() {
|
||||
final int forbiddenMask =
|
||||
UserInfo.FLAG_PRIMARY |
|
||||
UserInfo.FLAG_ADMIN |
|
||||
UserInfo.FLAG_INITIALIZED |
|
||||
UserInfo.FLAG_QUIET_MODE |
|
||||
UserInfo.FLAG_FULL |
|
||||
@@ -587,6 +586,18 @@ public final class UserTypeDetails {
|
||||
UserInfo.FLAG_PROFILE;
|
||||
return (mDefaultUserInfoPropertyFlags & forbiddenMask) == 0;
|
||||
}
|
||||
|
||||
private void checkSystemAndMainUserPreconditions() {
|
||||
// Primary must be synonymous with System.
|
||||
Preconditions.checkArgument(
|
||||
((mBaseType & UserInfo.FLAG_SYSTEM) != 0) ==
|
||||
((mDefaultUserInfoPropertyFlags & UserInfo.FLAG_PRIMARY) != 0),
|
||||
"UserTypeDetails " + mName + " cannot be SYSTEM xor PRIMARY.");
|
||||
// At most one MainUser is ever allowed at a time.
|
||||
Preconditions.checkArgument(
|
||||
((mDefaultUserInfoPropertyFlags & UserInfo.FLAG_MAIN) == 0) || mMaxAllowed == 1,
|
||||
"UserTypeDetails " + mName + " must not sanction more than one MainUser.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -16,11 +16,14 @@
|
||||
|
||||
package com.android.server.pm;
|
||||
|
||||
import static android.content.pm.UserInfo.FLAG_ADMIN;
|
||||
import static android.content.pm.UserInfo.FLAG_DEMO;
|
||||
import static android.content.pm.UserInfo.FLAG_EPHEMERAL;
|
||||
import static android.content.pm.UserInfo.FLAG_FULL;
|
||||
import static android.content.pm.UserInfo.FLAG_GUEST;
|
||||
import static android.content.pm.UserInfo.FLAG_MAIN;
|
||||
import static android.content.pm.UserInfo.FLAG_MANAGED_PROFILE;
|
||||
import static android.content.pm.UserInfo.FLAG_PRIMARY;
|
||||
import static android.content.pm.UserInfo.FLAG_PROFILE;
|
||||
import static android.content.pm.UserInfo.FLAG_RESTRICTED;
|
||||
import static android.content.pm.UserInfo.FLAG_SYSTEM;
|
||||
@@ -62,7 +65,7 @@ import java.util.function.Consumer;
|
||||
* This class is responsible both for defining the AOSP use types, as well as reading in customized
|
||||
* user types from {@link com.android.internal.R.xml#config_user_types}.
|
||||
*
|
||||
* Tests are located in UserManagerServiceUserTypeTest.java.
|
||||
* Tests are located in {@link UserManagerServiceUserTypeTest}.
|
||||
* @hide
|
||||
*/
|
||||
public final class UserTypeFactory {
|
||||
@@ -277,7 +280,8 @@ public final class UserTypeFactory {
|
||||
return new UserTypeDetails.Builder()
|
||||
.setName(USER_TYPE_FULL_SYSTEM)
|
||||
.setBaseType(FLAG_SYSTEM | FLAG_FULL)
|
||||
.setDefaultUserInfoPropertyFlags(UserInfo.FLAG_MAIN);
|
||||
.setDefaultUserInfoPropertyFlags(FLAG_PRIMARY | FLAG_ADMIN | FLAG_MAIN)
|
||||
.setMaxAllowed(1);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -287,7 +291,9 @@ public final class UserTypeFactory {
|
||||
private static UserTypeDetails.Builder getDefaultTypeSystemHeadless() {
|
||||
return new UserTypeDetails.Builder()
|
||||
.setName(USER_TYPE_SYSTEM_HEADLESS)
|
||||
.setBaseType(FLAG_SYSTEM);
|
||||
.setBaseType(FLAG_SYSTEM)
|
||||
.setDefaultUserInfoPropertyFlags(FLAG_PRIMARY | FLAG_ADMIN)
|
||||
.setMaxAllowed(1);
|
||||
}
|
||||
|
||||
private static Bundle getDefaultSecondaryUserRestrictions() {
|
||||
|
||||
Reference in New Issue
Block a user