Move part of UserManager method isUserSwitcherEnabled to UserManagerService
Bug: 242812503 Test: atest UserManagerServiceTest Change-Id: I513ba7a9060e3fd5bca365f8354850ca1cfce542
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user