Disable multiuser toggle when more than 1 user is created
It makes more sense to have the toggle as on permanently as long as there are other users on the device. Otherwise if we toggle off "Allow multiple users", other users get hidden. Also with current behaviour the any admin can switch the toggle and this can block any other user, including main, from being able to use the device. Bug: 295183792 Test: atest MultiUserSwitchBarControllerTest && UserSettingsTest Change-Id: I8cb0671d780f45c17a9bb7c9a9d3b108128ead9d
This commit is contained in:
@@ -46,13 +46,18 @@ public class MultiUserSwitchBarController implements SwitchWidgetController.OnSw
|
|||||||
|
|
||||||
|
|
||||||
MultiUserSwitchBarController(Context context, SwitchWidgetController switchBar,
|
MultiUserSwitchBarController(Context context, SwitchWidgetController switchBar,
|
||||||
OnMultiUserSwitchChangedListener listener) {
|
boolean canUserSwitchToggle, OnMultiUserSwitchChangedListener listener) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mSwitchBar = switchBar;
|
mSwitchBar = switchBar;
|
||||||
mListener = listener;
|
mListener = listener;
|
||||||
mUserCapabilities = UserCapabilities.create(context);
|
mUserCapabilities = UserCapabilities.create(context);
|
||||||
mSwitchBar.setChecked(mUserCapabilities.mUserSwitcherEnabled);
|
mSwitchBar.setChecked(mUserCapabilities.mUserSwitcherEnabled);
|
||||||
|
|
||||||
|
setToggleEnabled(canUserSwitchToggle);
|
||||||
|
mSwitchBar.setListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setToggleEnabled(boolean canUserSwitchToggle) {
|
||||||
if (mUserCapabilities.mDisallowSwitchUser) {
|
if (mUserCapabilities.mDisallowSwitchUser) {
|
||||||
mSwitchBar.setDisabledByAdmin(RestrictedLockUtilsInternal
|
mSwitchBar.setDisabledByAdmin(RestrictedLockUtilsInternal
|
||||||
.checkIfRestrictionEnforced(mContext, UserManager.DISALLOW_USER_SWITCH,
|
.checkIfRestrictionEnforced(mContext, UserManager.DISALLOW_USER_SWITCH,
|
||||||
@@ -64,9 +69,8 @@ public class MultiUserSwitchBarController implements SwitchWidgetController.OnSw
|
|||||||
UserHandle.myUserId()));
|
UserHandle.myUserId()));
|
||||||
} else {
|
} else {
|
||||||
mSwitchBar.setEnabled(!mUserCapabilities.mDisallowSwitchUser
|
mSwitchBar.setEnabled(!mUserCapabilities.mDisallowSwitchUser
|
||||||
&& !mUserCapabilities.mIsGuest && mUserCapabilities.isAdmin());
|
&& !mUserCapabilities.mIsGuest && canUserSwitchToggle);
|
||||||
}
|
}
|
||||||
mSwitchBar.setListener(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -290,8 +290,9 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
} else {
|
} else {
|
||||||
switchBar.hide();
|
switchBar.hide();
|
||||||
}
|
}
|
||||||
|
boolean isToggleEnabled = mUserManager.getFullUserCount() == 1;
|
||||||
mSwitchBarController = new MultiUserSwitchBarController(activity,
|
mSwitchBarController = new MultiUserSwitchBarController(activity,
|
||||||
new MainSwitchBarController(switchBar), this /* listener */);
|
new MainSwitchBarController(switchBar), isToggleEnabled, this /* listener */);
|
||||||
getSettingsLifecycle().addObserver(mSwitchBarController);
|
getSettingsLifecycle().addObserver(mSwitchBarController);
|
||||||
boolean openUserEditDialog = getIntent().getBooleanExtra(
|
boolean openUserEditDialog = getIntent().getBooleanExtra(
|
||||||
EXTRA_OPEN_DIALOG_USER_PROFILE_EDITOR, false);
|
EXTRA_OPEN_DIALOG_USER_PROFILE_EDITOR, false);
|
||||||
@@ -422,6 +423,9 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
mRemoveGuestOnExitPreferenceController.getPreferenceKey()));
|
mRemoveGuestOnExitPreferenceController.getPreferenceKey()));
|
||||||
if (mShouldUpdateUserList) {
|
if (mShouldUpdateUserList) {
|
||||||
updateUI();
|
updateUI();
|
||||||
|
// Update state of "Allow multiple users" toggle when list of users updates
|
||||||
|
boolean isToggleEnabled = mUserManager.getFullUserCount() == 1;
|
||||||
|
mSwitchBarController.setToggleEnabled(isToggleEnabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -65,7 +65,7 @@ public class MultiUserSwitchBarControllerTest {
|
|||||||
UserManager.DISALLOW_USER_SWITCH, true);
|
UserManager.DISALLOW_USER_SWITCH, true);
|
||||||
|
|
||||||
final MultiUserSwitchBarController controller = new MultiUserSwitchBarController(mContext,
|
final MultiUserSwitchBarController controller = new MultiUserSwitchBarController(mContext,
|
||||||
mSwitchBarController, null);
|
mSwitchBarController, true, null);
|
||||||
|
|
||||||
verify(mSwitchBarController).setDisabledByAdmin(any());
|
verify(mSwitchBarController).setDisabledByAdmin(any());
|
||||||
}
|
}
|
||||||
@@ -76,8 +76,32 @@ public class MultiUserSwitchBarControllerTest {
|
|||||||
UserManager.DISALLOW_USER_SWITCH, false);
|
UserManager.DISALLOW_USER_SWITCH, false);
|
||||||
|
|
||||||
final MultiUserSwitchBarController controller = new MultiUserSwitchBarController(mContext,
|
final MultiUserSwitchBarController controller = new MultiUserSwitchBarController(mContext,
|
||||||
mSwitchBarController, null);
|
mSwitchBarController, true, null);
|
||||||
|
|
||||||
verify(mSwitchBarController, never()).setDisabledByAdmin(any());
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user