diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index 4c26c5cced5..0c423a4282b 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -773,7 +773,7 @@ public class UserSettings extends SettingsPreferenceFragment userPreferences.add(pref); } - if (shouldShowGuestUserPreference(users)) { + if (mUserCaps.mCanAddGuest || findGuest() != null) { // Add a virtual Guest user for guest defaults UserPreference pref = new UserPreference(getActivity(), null, UserPreference.USERID_GUEST_DEFAULTS, @@ -843,23 +843,6 @@ public class UserSettings extends SettingsPreferenceFragment return maxUsersAndGuest - managedProfiles; } - private boolean shouldShowGuestUserPreference(List users) { - boolean showGuestPreference = !mUserCaps.mIsGuest; - // If user has DISALLOW_ADD_USER don't allow creating a guest either. - if (showGuestPreference && mUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER)) { - showGuestPreference = false; - // If guest already exists, no user creation needed. - for (UserInfo user : users) { - if (user.isGuest()) { - showGuestPreference = true; - break; - } - } - } - return showGuestPreference; - } - - private void loadIconsAsync(List missingIcons) { new AsyncTask, Void, Void>() { @Override @@ -952,19 +935,9 @@ public class UserSettings extends SettingsPreferenceFragment } private void createAndSwitchToGuestUser() { - List users = mUserManager.getUsers(); - for (UserInfo user : users) { - if (user.isGuest()) { - switchUserNow(user.id); - return; - } - } - // No guest user. Create one, if there's no restriction. - // If it is not the primary user, then adding users from lockscreen must be enabled - if (mUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER) - || (!mUserCaps.mIsOwner && Settings.Global.getInt(getContentResolver(), - Settings.Global.ADD_USERS_WHEN_LOCKED, 0) != 1)) { - Log.i(TAG, "Blocking guest creation because it is restricted"); + final UserInfo guest = findGuest(); + if (guest != null) { + switchUserNow(guest.id); return; } UserInfo guestUser = mUserManager.createGuest(getActivity(), @@ -974,6 +947,16 @@ public class UserSettings extends SettingsPreferenceFragment } } + private UserInfo findGuest() { + List users = mUserManager.getUsers(); + for (UserInfo user : users) { + if (user.isGuest()) { + return user; + } + } + return null; + } + private boolean isInitialized(UserInfo user) { return (user.flags & UserInfo.FLAG_INITIALIZED) != 0; } @@ -1041,6 +1024,7 @@ public class UserSettings extends SettingsPreferenceFragment boolean mCanAddRestrictedProfile = true; boolean mIsOwner = UserHandle.myUserId() == UserHandle.USER_OWNER; boolean mIsGuest; + boolean mCanAddGuest; public static UserCapabilities create(Context context) { UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE); @@ -1050,9 +1034,11 @@ public class UserSettings extends SettingsPreferenceFragment return caps; } + final boolean disallowAddUser = userManager.hasUserRestriction( + UserManager.DISALLOW_ADD_USER); if (!caps.mIsOwner || UserManager.getMaxSupportedUsers() < 2 || !UserManager.supportsMultipleUsers() - || userManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER)) { + || disallowAddUser) { caps.mCanAddUser = false; } DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService( @@ -1063,6 +1049,10 @@ public class UserSettings extends SettingsPreferenceFragment } final int myUserId = UserHandle.myUserId(); caps.mIsGuest = userManager.getUserInfo(myUserId).isGuest(); + + final boolean canAddUsersWhenLocked = caps.mIsOwner || Settings.Global.getInt( + context.getContentResolver(), Settings.Global.ADD_USERS_WHEN_LOCKED, 0) == 1; + caps.mCanAddGuest = !caps.mIsGuest && !disallowAddUser && canAddUsersWhenLocked; return caps; }