Loading core/api/test-current.txt +1 −1 Original line number Diff line number Diff line Loading @@ -919,7 +919,7 @@ package android.content.pm { method public boolean isQuietModeEnabled(); method public boolean isRestricted(); method public boolean supportsSwitchTo(); method public boolean supportsSwitchToByUser(); method @Deprecated 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 Loading core/java/android/content/pm/UserInfo.java +14 −4 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.annotation.Nullable; import android.annotation.TestApi; import android.annotation.UserIdInt; import android.compat.annotation.UnsupportedAppUsage; import android.content.res.Resources; import android.os.Parcel; import android.os.Parcelable; import android.os.UserHandle; Loading Loading @@ -418,16 +419,25 @@ public class UserInfo implements Parcelable { // Don't support switching to pre-created users until they become "real" users. return false; } return !isProfile(); return isFull() || canSwitchToHeadlessSystemUser(); } /** * @return true if user is of type {@link UserManager#USER_TYPE_SYSTEM_HEADLESS} and * {@link com.android.internal.R.bool.config_canSwitchToHeadlessSystemUser} is true. */ private boolean canSwitchToHeadlessSystemUser() { return UserManager.USER_TYPE_SYSTEM_HEADLESS.equals(userType) && Resources.getSystem() .getBoolean(com.android.internal.R.bool.config_canSwitchToHeadlessSystemUser); } /** * @return true if this user can be switched to by end user through UI. * @deprecated Use {@link UserInfo#supportsSwitchTo} instead. */ @Deprecated public boolean supportsSwitchToByUser() { // Hide the system user when it does not represent a human user. boolean hideSystemUser = UserManager.isHeadlessSystemUserMode(); return (!hideSystemUser || id != UserHandle.USER_SYSTEM) && supportsSwitchTo(); return supportsSwitchTo(); } // TODO(b/142482943): Make this logic more specific and customizable. (canHaveProfile(userType)) Loading core/res/res/values/config.xml +4 −0 Original line number Diff line number Diff line Loading @@ -2781,6 +2781,10 @@ it can't be deleted or downgraded to non-admin status. --> <bool name="config_isMainUserPermanentAdmin">false</bool> <!-- Whether switch to headless system user is allowed. If allowed, headless system user can run in the foreground even though it is not a full user. --> <bool name="config_canSwitchToHeadlessSystemUser">false</bool> <!-- Whether UI for multi user should be shown --> <bool name="config_enableMultiUserUI">false</bool> Loading core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -355,6 +355,7 @@ <java-symbol type="bool" name="config_speed_up_audio_on_mt_calls" /> <java-symbol type="bool" name="config_useFixedVolume" /> <java-symbol type="bool" name="config_isMainUserPermanentAdmin"/> <java-symbol type="bool" name="config_canSwitchToHeadlessSystemUser"/> <java-symbol type="bool" name="config_enableMultiUserUI"/> <java-symbol type="bool" name="config_enableMultipleAdmins"/> <java-symbol type="bool" name="config_enableNewAutoSelectNetworkUI"/> Loading services/core/java/com/android/server/am/UserController.java +0 −4 Original line number Diff line number Diff line Loading @@ -1986,10 +1986,6 @@ class UserController implements Handler.Callback { Slogf.w(TAG, "Cannot switch to User #" + targetUserId + ": not supported"); return false; } if (targetUserInfo.isProfile()) { Slogf.w(TAG, "Cannot switch to User #" + targetUserId + ": not a full user"); return false; } if (FactoryResetter.isFactoryResetting()) { Slogf.w(TAG, "Cannot switch to User #" + targetUserId + ": factory reset in progress"); return false; Loading Loading
core/api/test-current.txt +1 −1 Original line number Diff line number Diff line Loading @@ -919,7 +919,7 @@ package android.content.pm { method public boolean isQuietModeEnabled(); method public boolean isRestricted(); method public boolean supportsSwitchTo(); method public boolean supportsSwitchToByUser(); method @Deprecated 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 Loading
core/java/android/content/pm/UserInfo.java +14 −4 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.annotation.Nullable; import android.annotation.TestApi; import android.annotation.UserIdInt; import android.compat.annotation.UnsupportedAppUsage; import android.content.res.Resources; import android.os.Parcel; import android.os.Parcelable; import android.os.UserHandle; Loading Loading @@ -418,16 +419,25 @@ public class UserInfo implements Parcelable { // Don't support switching to pre-created users until they become "real" users. return false; } return !isProfile(); return isFull() || canSwitchToHeadlessSystemUser(); } /** * @return true if user is of type {@link UserManager#USER_TYPE_SYSTEM_HEADLESS} and * {@link com.android.internal.R.bool.config_canSwitchToHeadlessSystemUser} is true. */ private boolean canSwitchToHeadlessSystemUser() { return UserManager.USER_TYPE_SYSTEM_HEADLESS.equals(userType) && Resources.getSystem() .getBoolean(com.android.internal.R.bool.config_canSwitchToHeadlessSystemUser); } /** * @return true if this user can be switched to by end user through UI. * @deprecated Use {@link UserInfo#supportsSwitchTo} instead. */ @Deprecated public boolean supportsSwitchToByUser() { // Hide the system user when it does not represent a human user. boolean hideSystemUser = UserManager.isHeadlessSystemUserMode(); return (!hideSystemUser || id != UserHandle.USER_SYSTEM) && supportsSwitchTo(); return supportsSwitchTo(); } // TODO(b/142482943): Make this logic more specific and customizable. (canHaveProfile(userType)) Loading
core/res/res/values/config.xml +4 −0 Original line number Diff line number Diff line Loading @@ -2781,6 +2781,10 @@ it can't be deleted or downgraded to non-admin status. --> <bool name="config_isMainUserPermanentAdmin">false</bool> <!-- Whether switch to headless system user is allowed. If allowed, headless system user can run in the foreground even though it is not a full user. --> <bool name="config_canSwitchToHeadlessSystemUser">false</bool> <!-- Whether UI for multi user should be shown --> <bool name="config_enableMultiUserUI">false</bool> Loading
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -355,6 +355,7 @@ <java-symbol type="bool" name="config_speed_up_audio_on_mt_calls" /> <java-symbol type="bool" name="config_useFixedVolume" /> <java-symbol type="bool" name="config_isMainUserPermanentAdmin"/> <java-symbol type="bool" name="config_canSwitchToHeadlessSystemUser"/> <java-symbol type="bool" name="config_enableMultiUserUI"/> <java-symbol type="bool" name="config_enableMultipleAdmins"/> <java-symbol type="bool" name="config_enableNewAutoSelectNetworkUI"/> Loading
services/core/java/com/android/server/am/UserController.java +0 −4 Original line number Diff line number Diff line Loading @@ -1986,10 +1986,6 @@ class UserController implements Handler.Callback { Slogf.w(TAG, "Cannot switch to User #" + targetUserId + ": not supported"); return false; } if (targetUserInfo.isProfile()) { Slogf.w(TAG, "Cannot switch to User #" + targetUserId + ": not a full user"); return false; } if (FactoryResetter.isFactoryResetting()) { Slogf.w(TAG, "Cannot switch to User #" + targetUserId + ": factory reset in progress"); return false; Loading