diff --git a/src/com/android/settings/users/MultiUserSwitchBarController.java b/src/com/android/settings/users/MultiUserSwitchBarController.java index 33651c31fc4..3697bb036cd 100644 --- a/src/com/android/settings/users/MultiUserSwitchBarController.java +++ b/src/com/android/settings/users/MultiUserSwitchBarController.java @@ -46,13 +46,18 @@ public class MultiUserSwitchBarController implements SwitchWidgetController.OnSw MultiUserSwitchBarController(Context context, SwitchWidgetController switchBar, - OnMultiUserSwitchChangedListener listener) { + boolean canUserSwitchToggle, OnMultiUserSwitchChangedListener listener) { mContext = context; mSwitchBar = switchBar; mListener = listener; mUserCapabilities = UserCapabilities.create(context); mSwitchBar.setChecked(mUserCapabilities.mUserSwitcherEnabled); + setToggleEnabled(canUserSwitchToggle); + mSwitchBar.setListener(this); + } + + void setToggleEnabled(boolean canUserSwitchToggle) { if (mUserCapabilities.mDisallowSwitchUser) { mSwitchBar.setDisabledByAdmin(RestrictedLockUtilsInternal .checkIfRestrictionEnforced(mContext, UserManager.DISALLOW_USER_SWITCH, @@ -64,9 +69,8 @@ public class MultiUserSwitchBarController implements SwitchWidgetController.OnSw UserHandle.myUserId())); } else { mSwitchBar.setEnabled(!mUserCapabilities.mDisallowSwitchUser - && !mUserCapabilities.mIsGuest && mUserCapabilities.isAdmin()); + && !mUserCapabilities.mIsGuest && canUserSwitchToggle); } - mSwitchBar.setListener(this); } @Override diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index 64699ffa238..c63517de447 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -290,8 +290,9 @@ public class UserSettings extends SettingsPreferenceFragment } else { switchBar.hide(); } + boolean isToggleEnabled = mUserManager.getFullUserCount() == 1; mSwitchBarController = new MultiUserSwitchBarController(activity, - new MainSwitchBarController(switchBar), this /* listener */); + new MainSwitchBarController(switchBar), isToggleEnabled, this /* listener */); getSettingsLifecycle().addObserver(mSwitchBarController); boolean openUserEditDialog = getIntent().getBooleanExtra( EXTRA_OPEN_DIALOG_USER_PROFILE_EDITOR, false); @@ -422,6 +423,9 @@ public class UserSettings extends SettingsPreferenceFragment mRemoveGuestOnExitPreferenceController.getPreferenceKey())); if (mShouldUpdateUserList) { updateUI(); + // Update state of "Allow multiple users" toggle when list of users updates + boolean isToggleEnabled = mUserManager.getFullUserCount() == 1; + mSwitchBarController.setToggleEnabled(isToggleEnabled); } } diff --git a/tests/robotests/src/com/android/settings/users/MultiUserSwitchBarControllerTest.java b/tests/robotests/src/com/android/settings/users/MultiUserSwitchBarControllerTest.java index 718e01bebe0..89319c4dbc9 100644 --- a/tests/robotests/src/com/android/settings/users/MultiUserSwitchBarControllerTest.java +++ b/tests/robotests/src/com/android/settings/users/MultiUserSwitchBarControllerTest.java @@ -65,7 +65,7 @@ public class MultiUserSwitchBarControllerTest { UserManager.DISALLOW_USER_SWITCH, true); final MultiUserSwitchBarController controller = new MultiUserSwitchBarController(mContext, - mSwitchBarController, null); + mSwitchBarController, true, null); verify(mSwitchBarController).setDisabledByAdmin(any()); } @@ -76,8 +76,32 @@ public class MultiUserSwitchBarControllerTest { UserManager.DISALLOW_USER_SWITCH, false); final MultiUserSwitchBarController controller = new MultiUserSwitchBarController(mContext, - mSwitchBarController, null); + mSwitchBarController, true, null); verify(mSwitchBarController, never()).setDisabledByAdmin(any()); } + + @Test + public void onStart_allowUserSwitch_setDisabledAfterInitialization_shouldBeDisabled() { + mUserManager.setUserRestriction(UserHandle.of(UserHandle.myUserId()), + UserManager.DISALLOW_USER_SWITCH, false); + + final MultiUserSwitchBarController controller = new MultiUserSwitchBarController(mContext, + mSwitchBarController, true, null); + verify(mSwitchBarController).setEnabled(true); + controller.setToggleEnabled(false); + verify(mSwitchBarController).setEnabled(false); + } + + @Test + public void onStart_allowUserSwitch_setEnabledAfterInitialization_shouldBeEnabled() { + mUserManager.setUserRestriction(UserHandle.of(UserHandle.myUserId()), + UserManager.DISALLOW_USER_SWITCH, false); + + final MultiUserSwitchBarController controller = new MultiUserSwitchBarController(mContext, + mSwitchBarController, false, null); + verify(mSwitchBarController).setEnabled(false); + controller.setToggleEnabled(true); + verify(mSwitchBarController).setEnabled(true); + } }