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
This commit is contained in:
Tetiana Meronyk
2024-05-01 17:21:14 +00:00
parent 377a7a3054
commit dc0c58b427
4 changed files with 27 additions and 3 deletions

View File

@@ -63,8 +63,7 @@ public class MultiUserSwitchBarController implements SwitchWidgetController.OnSw
.checkIfRestrictionEnforced(mContext, UserManager.DISALLOW_ADD_USER, .checkIfRestrictionEnforced(mContext, UserManager.DISALLOW_ADD_USER,
UserHandle.myUserId())); UserHandle.myUserId()));
} else { } else {
mSwitchBar.setEnabled(!mUserCapabilities.mDisallowSwitchUser mSwitchBar.setEnabled(mUserCapabilities.mIsMain);
&& !mUserCapabilities.mIsGuest && mUserCapabilities.isAdmin());
} }
mSwitchBar.setListener(this); mSwitchBar.setListener(this);
} }

View File

@@ -32,6 +32,7 @@ public class UserCapabilities {
boolean mEnabled = true; boolean mEnabled = true;
boolean mCanAddUser = true; boolean mCanAddUser = true;
boolean mCanAddRestrictedProfile; boolean mCanAddRestrictedProfile;
boolean mIsMain;
boolean mIsAdmin; boolean mIsAdmin;
boolean mIsGuest; boolean mIsGuest;
boolean mIsEphemeral; boolean mIsEphemeral;
@@ -57,6 +58,7 @@ public class UserCapabilities {
final UserInfo myUserInfo = userManager.getUserInfo(UserHandle.myUserId()); final UserInfo myUserInfo = userManager.getUserInfo(UserHandle.myUserId());
caps.mIsGuest = myUserInfo.isGuest(); caps.mIsGuest = myUserInfo.isGuest();
caps.mIsAdmin = myUserInfo.isAdmin(); caps.mIsAdmin = myUserInfo.isAdmin();
caps.mIsMain = myUserInfo.isMain();
caps.mIsEphemeral = myUserInfo.isEphemeral(); caps.mIsEphemeral = myUserInfo.isEphemeral();
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService( DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
Context.DEVICE_POLICY_SERVICE); Context.DEVICE_POLICY_SERVICE);

View File

@@ -287,7 +287,7 @@ public class UserSettings extends SettingsPreferenceFragment
final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsActivity activity = (SettingsActivity) getActivity();
final SettingsMainSwitchBar switchBar = activity.getSwitchBar(); final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
switchBar.setTitle(getContext().getString(R.string.multiple_users_main_switch_title)); switchBar.setTitle(getContext().getString(R.string.multiple_users_main_switch_title));
if (isCurrentUserAdmin()) { if (!mUserCaps.mIsGuest) {
switchBar.show(); switchBar.show();
} else { } else {
switchBar.hide(); switchBar.hide();

View File

@@ -22,6 +22,7 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import android.content.Context; import android.content.Context;
import android.content.pm.UserInfo;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
@@ -79,4 +80,26 @@ public class MultiUserSwitchBarControllerTest {
verify(mSwitchWidgetController, never()).setDisabledByAdmin(any()); 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);
}
} }