Merge "Move part of UserManager method isUserSwitcherEnabled to UserManagerService"

This commit is contained in:
Tetiana Meronyk
2022-09-21 20:42:29 +00:00
committed by Android (Google) Code Review
4 changed files with 51 additions and 30 deletions

View File

@@ -76,7 +76,7 @@ interface IUserManager {
String getUserAccount(int userId);
void setUserAccount(int userId, String accountName);
long getUserCreationTime(int userId);
boolean isUserSwitcherEnabled(int mUserId);
boolean isUserSwitcherEnabled(boolean showEvenIfNotActionable, int mUserId);
boolean isRestricted(int userId);
boolean canHaveRestrictedProfile(int userId);
int getUserSerialNumber(int userId);

View File

@@ -5265,36 +5265,10 @@ public class UserManager {
public boolean isUserSwitcherEnabled(boolean showEvenIfNotActionable) {
try {
if (!mService.isUserSwitcherEnabled(mUserId)) {
return false;
}
return mService.isUserSwitcherEnabled(showEvenIfNotActionable, mUserId);
} catch (RemoteException re) {
throw re.rethrowFromSystemServer();
}
// The feature is enabled. But is it worth showing?
return showEvenIfNotActionable
|| areThereUsersToWhichToSwitch() // There are switchable users.
|| !hasUserRestrictionForUser(DISALLOW_ADD_USER, mUserId); // New users can be added
}
/** Returns whether there are any users (other than the current user) to which to switch. */
@RequiresPermission(anyOf = {
android.Manifest.permission.MANAGE_USERS,
android.Manifest.permission.CREATE_USERS
})
private boolean areThereUsersToWhichToSwitch() {
final List<UserInfo> users = getAliveUsers();
if (users == null) {
return false;
}
int switchableUserCount = 0;
for (UserInfo user : users) {
if (user.supportsSwitchToByUser()) {
++switchableUserCount;
}
}
return switchableUserCount > 1;
}
/**

View File

@@ -2048,8 +2048,8 @@ public class UserManagerService extends IUserManager.Stub {
}
}
@Override
public boolean isUserSwitcherEnabled(@UserIdInt int mUserId) {
@VisibleForTesting
boolean isUserSwitcherEnabled(@UserIdInt int mUserId) {
boolean multiUserSettingOn = Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.USER_SWITCHER_ENABLED,
Resources.getSystem().getBoolean(com.android.internal
@@ -2061,6 +2061,33 @@ public class UserManagerService extends IUserManager.Stub {
&& multiUserSettingOn;
}
@Override
public boolean isUserSwitcherEnabled(boolean showEvenIfNotActionable,
@UserIdInt int mUserId) {
if (!isUserSwitcherEnabled(mUserId)) {
return false;
}
// The feature is enabled. But is it worth showing?
return showEvenIfNotActionable
|| !hasUserRestriction(UserManager.DISALLOW_ADD_USER, mUserId) // Can add new user
|| areThereMultipleSwitchableUsers(); // There are switchable users
}
/** Returns true if there is more than one user that can be switched to. */
private boolean areThereMultipleSwitchableUsers() {
List<UserInfo> aliveUsers = getUsers(true, true, true);
boolean isAnyAliveUser = false;
for (UserInfo userInfo : aliveUsers) {
if (userInfo.supportsSwitchToByUser()) {
if (isAnyAliveUser) {
return true;
}
isAnyAliveUser = true;
}
}
return false;
}
@Override
public boolean isRestricted(@UserIdInt int userId) {
if (userId != UserHandle.getCallingUserId()) {
@@ -7072,4 +7099,5 @@ public class UserManagerService extends IUserManager.Stub {
}
return mAmInternal;
}
}

View File

@@ -216,6 +216,25 @@ public class UserManagerServiceTest {
assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isTrue();
}
@Test
public void assertIsUserSwitcherEnabled() throws Exception {
int userId = ActivityManager.getCurrentUser();
setMaxSupportedUsers(8);
assertThat(mUserManagerService.isUserSwitcherEnabled(true, userId)).isTrue();
setUserSwitch(false);
assertThat(mUserManagerService.isUserSwitcherEnabled(true, userId)).isFalse();
setUserSwitch(true);
assertThat(mUserManagerService.isUserSwitcherEnabled(false, userId)).isTrue();
mUserManagerService.setUserRestriction(UserManager.DISALLOW_ADD_USER, true, userId);
assertThat(mUserManagerService.isUserSwitcherEnabled(false, userId)).isFalse();
mUserManagerService.setUserRestriction(UserManager.DISALLOW_ADD_USER, false, userId);
setMaxSupportedUsers(1);
assertThat(mUserManagerService.isUserSwitcherEnabled(true, userId)).isFalse();
}
@Test
public void assertIsUserSwitcherEnabledOnShowMultiuserUI() throws Exception {