From dc0c58b427ab0f1e7a2dd006bdd3f0c34e56545a Mon Sep 17 00:00:00 2001 From: Tetiana Meronyk Date: Wed, 1 May 2024 17:21:14 +0000 Subject: [PATCH] Make Multiuser toggle disabled for all non-main users Only let main user (Owner) change state of the toggle Bug: 336764498 Test: atest MultiUserSwitchBarControllerTest Change-Id: Ib694d1cb4685764c64633efc090765b470a0a015 --- .../users/MultiUserSwitchBarController.java | 3 +-- .../settings/users/UserCapabilities.java | 2 ++ .../android/settings/users/UserSettings.java | 2 +- .../MultiUserSwitchBarControllerTest.java | 23 +++++++++++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/users/MultiUserSwitchBarController.java b/src/com/android/settings/users/MultiUserSwitchBarController.java index 33651c31fc4..f57b7959c37 100644 --- a/src/com/android/settings/users/MultiUserSwitchBarController.java +++ b/src/com/android/settings/users/MultiUserSwitchBarController.java @@ -63,8 +63,7 @@ public class MultiUserSwitchBarController implements SwitchWidgetController.OnSw .checkIfRestrictionEnforced(mContext, UserManager.DISALLOW_ADD_USER, UserHandle.myUserId())); } else { - mSwitchBar.setEnabled(!mUserCapabilities.mDisallowSwitchUser - && !mUserCapabilities.mIsGuest && mUserCapabilities.isAdmin()); + mSwitchBar.setEnabled(mUserCapabilities.mIsMain); } mSwitchBar.setListener(this); } diff --git a/src/com/android/settings/users/UserCapabilities.java b/src/com/android/settings/users/UserCapabilities.java index cf0e10b127d..590cb0cf11a 100644 --- a/src/com/android/settings/users/UserCapabilities.java +++ b/src/com/android/settings/users/UserCapabilities.java @@ -32,6 +32,7 @@ public class UserCapabilities { boolean mEnabled = true; boolean mCanAddUser = true; boolean mCanAddRestrictedProfile; + boolean mIsMain; boolean mIsAdmin; boolean mIsGuest; boolean mIsEphemeral; @@ -57,6 +58,7 @@ public class UserCapabilities { final UserInfo myUserInfo = userManager.getUserInfo(UserHandle.myUserId()); caps.mIsGuest = myUserInfo.isGuest(); caps.mIsAdmin = myUserInfo.isAdmin(); + caps.mIsMain = myUserInfo.isMain(); caps.mIsEphemeral = myUserInfo.isEphemeral(); DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService( Context.DEVICE_POLICY_SERVICE); diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index 083608dde3e..bf21c9b913a 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -287,7 +287,7 @@ public class UserSettings extends SettingsPreferenceFragment final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsMainSwitchBar switchBar = activity.getSwitchBar(); switchBar.setTitle(getContext().getString(R.string.multiple_users_main_switch_title)); - if (isCurrentUserAdmin()) { + if (!mUserCaps.mIsGuest) { switchBar.show(); } else { switchBar.hide(); diff --git a/tests/robotests/src/com/android/settings/users/MultiUserSwitchBarControllerTest.java b/tests/robotests/src/com/android/settings/users/MultiUserSwitchBarControllerTest.java index 1cfb3f614b9..bfab257e44a 100644 --- a/tests/robotests/src/com/android/settings/users/MultiUserSwitchBarControllerTest.java +++ b/tests/robotests/src/com/android/settings/users/MultiUserSwitchBarControllerTest.java @@ -22,6 +22,7 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import android.content.Context; +import android.content.pm.UserInfo; import android.os.UserHandle; import android.os.UserManager; @@ -79,4 +80,26 @@ public class MultiUserSwitchBarControllerTest { verify(mSwitchWidgetController, never()).setDisabledByAdmin(any()); } + + @Test + public void onStart_userIsNotMain_shouldNotBeEnabled() { + mUserManager.setUserRestriction(UserHandle.of(UserHandle.myUserId()), + UserManager.DISALLOW_USER_SWITCH, false); + mUserManager.addUser(10, "Test", UserInfo.FLAG_ADMIN); + mUserManager.switchUser(10); + new MultiUserSwitchBarController(mContext, mSwitchWidgetController, null); + + verify(mSwitchWidgetController, never()).setDisabledByAdmin(any()); + verify(mSwitchWidgetController).setEnabled(false); + } + + @Test + public void onStart_userIsMain_shouldBeEnabled() { + mUserManager.setUserRestriction(UserHandle.of(UserHandle.myUserId()), + UserManager.DISALLOW_USER_SWITCH, false); + new MultiUserSwitchBarController(mContext, mSwitchWidgetController, null); + + verify(mSwitchWidgetController, never()).setDisabledByAdmin(any()); + verify(mSwitchWidgetController).setEnabled(true); + } }