Use UM.canAddMoreUsers and UM.isUserTypeEnabled
Settings shouldn't allow creating users if the type is diabled, and it shouldn't allow creating more of a particular user type if no more can be created (even if more can be created of other user types). Previously, Settings didn't take into account the user type when querying whether more users could be created. Bug: 192577100 Test: com.android.settings.users.UserSettingsTest Change-Id: I065478fd14779f528be4edce8ae215391a752ef4
This commit is contained in:
@@ -58,7 +58,9 @@ public class UserCapabilities {
|
|||||||
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
|
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
|
||||||
Context.DEVICE_POLICY_SERVICE);
|
Context.DEVICE_POLICY_SERVICE);
|
||||||
// No restricted profiles for tablets with a device owner, or phones.
|
// No restricted profiles for tablets with a device owner, or phones.
|
||||||
if (dpm.isDeviceManaged() || Utils.isVoiceCapable(context)) {
|
if (dpm.isDeviceManaged()
|
||||||
|
|| Utils.isVoiceCapable(context)
|
||||||
|
|| !userManager.isUserTypeEnabled(UserManager.USER_TYPE_FULL_RESTRICTED)) {
|
||||||
caps.mCanAddRestrictedProfile = false;
|
caps.mCanAddRestrictedProfile = false;
|
||||||
}
|
}
|
||||||
caps.updateAddUserCapabilities(context);
|
caps.updateAddUserCapabilities(context);
|
||||||
@@ -76,15 +78,19 @@ public class UserCapabilities {
|
|||||||
mDisallowAddUser = (mEnforcedAdmin != null || hasBaseUserRestriction);
|
mDisallowAddUser = (mEnforcedAdmin != null || hasBaseUserRestriction);
|
||||||
mUserSwitcherEnabled = userManager.isUserSwitcherEnabled();
|
mUserSwitcherEnabled = userManager.isUserSwitcherEnabled();
|
||||||
mCanAddUser = true;
|
mCanAddUser = true;
|
||||||
if (!mIsAdmin || UserManager.getMaxSupportedUsers() < 2
|
if (!mIsAdmin
|
||||||
|
|| UserManager.getMaxSupportedUsers() < 2
|
||||||
|| !UserManager.supportsMultipleUsers()
|
|| !UserManager.supportsMultipleUsers()
|
||||||
|| mDisallowAddUser) {
|
|| mDisallowAddUser
|
||||||
|
|| (!userManager.isUserTypeEnabled(UserManager.USER_TYPE_FULL_SECONDARY)
|
||||||
|
&& !mCanAddRestrictedProfile)) {
|
||||||
mCanAddUser = false;
|
mCanAddUser = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
final boolean canAddUsersWhenLocked = mIsAdmin || Settings.Global.getInt(
|
final boolean canAddUsersWhenLocked = mIsAdmin || Settings.Global.getInt(
|
||||||
context.getContentResolver(), Settings.Global.ADD_USERS_WHEN_LOCKED, 0) == 1;
|
context.getContentResolver(), Settings.Global.ADD_USERS_WHEN_LOCKED, 0) == 1;
|
||||||
mCanAddGuest = !mIsGuest && !mDisallowAddUser && canAddUsersWhenLocked;
|
mCanAddGuest = !mIsGuest && !mDisallowAddUser && canAddUsersWhenLocked
|
||||||
|
&& userManager.isUserTypeEnabled(UserManager.USER_TYPE_FULL_GUEST);
|
||||||
|
|
||||||
mDisallowSwitchUser = userManager.hasUserRestriction(UserManager.DISALLOW_USER_SWITCH);
|
mDisallowSwitchUser = userManager.hasUserRestriction(UserManager.DISALLOW_USER_SWITCH);
|
||||||
}
|
}
|
||||||
|
@@ -1073,6 +1073,7 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
|
|
||||||
private void updateAddGuest(Context context, boolean isGuestAlreadyCreated) {
|
private void updateAddGuest(Context context, boolean isGuestAlreadyCreated) {
|
||||||
if (!isGuestAlreadyCreated && mUserCaps.mCanAddGuest
|
if (!isGuestAlreadyCreated && mUserCaps.mCanAddGuest
|
||||||
|
&& mUserManager.canAddMoreUsers(UserManager.USER_TYPE_FULL_GUEST)
|
||||||
&& WizardManagerHelper.isDeviceProvisioned(context)
|
&& WizardManagerHelper.isDeviceProvisioned(context)
|
||||||
&& mUserCaps.mUserSwitcherEnabled) {
|
&& mUserCaps.mUserSwitcherEnabled) {
|
||||||
mAddGuest.setVisible(true);
|
mAddGuest.setVisible(true);
|
||||||
@@ -1097,7 +1098,10 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
&& mUserCaps.mUserSwitcherEnabled) {
|
&& mUserCaps.mUserSwitcherEnabled) {
|
||||||
mAddUser.setVisible(true);
|
mAddUser.setVisible(true);
|
||||||
mAddUser.setSelectable(true);
|
mAddUser.setSelectable(true);
|
||||||
final boolean canAddMoreUsers = mUserManager.canAddMoreUsers();
|
final boolean canAddMoreUsers =
|
||||||
|
mUserManager.canAddMoreUsers(UserManager.USER_TYPE_FULL_SECONDARY)
|
||||||
|
|| (mUserCaps.mCanAddRestrictedProfile
|
||||||
|
&& mUserManager.canAddMoreUsers(UserManager.USER_TYPE_FULL_RESTRICTED));
|
||||||
mAddUser.setEnabled(canAddMoreUsers && !mAddingUser && canSwitchUserNow());
|
mAddUser.setEnabled(canAddMoreUsers && !mAddingUser && canSwitchUserNow());
|
||||||
if (!canAddMoreUsers) {
|
if (!canAddMoreUsers) {
|
||||||
mAddUser.setSummary(
|
mAddUser.setSummary(
|
||||||
|
@@ -24,6 +24,7 @@ import static com.google.common.truth.Truth.assertThat;
|
|||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.ArgumentMatchers.notNull;
|
import static org.mockito.ArgumentMatchers.notNull;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
@@ -258,7 +259,8 @@ public class UserSettingsTest {
|
|||||||
@Test
|
@Test
|
||||||
public void updateUserList_canAddUserAndSwitchUser_shouldShowAddUser() {
|
public void updateUserList_canAddUserAndSwitchUser_shouldShowAddUser() {
|
||||||
mUserCapabilities.mCanAddUser = true;
|
mUserCapabilities.mCanAddUser = true;
|
||||||
doReturn(true).when(mUserManager).canAddMoreUsers();
|
doReturn(true)
|
||||||
|
.when(mUserManager).canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_SECONDARY));
|
||||||
doReturn(true).when(mAddUserPreference).isEnabled();
|
doReturn(true).when(mAddUserPreference).isEnabled();
|
||||||
doReturn(SWITCHABILITY_STATUS_OK).when(mUserManager).getUserSwitchability();
|
doReturn(SWITCHABILITY_STATUS_OK).when(mUserManager).getUserSwitchability();
|
||||||
|
|
||||||
@@ -274,7 +276,8 @@ public class UserSettingsTest {
|
|||||||
@Test
|
@Test
|
||||||
public void updateUserList_canAddGuestAndSwitchUser_shouldShowAddGuest() {
|
public void updateUserList_canAddGuestAndSwitchUser_shouldShowAddGuest() {
|
||||||
mUserCapabilities.mCanAddGuest = true;
|
mUserCapabilities.mCanAddGuest = true;
|
||||||
doReturn(true).when(mUserManager).canAddMoreUsers();
|
doReturn(true)
|
||||||
|
.when(mUserManager).canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_GUEST));
|
||||||
doReturn(SWITCHABILITY_STATUS_OK).when(mUserManager).getUserSwitchability();
|
doReturn(SWITCHABILITY_STATUS_OK).when(mUserManager).getUserSwitchability();
|
||||||
|
|
||||||
mFragment.updateUserList();
|
mFragment.updateUserList();
|
||||||
@@ -288,7 +291,7 @@ public class UserSettingsTest {
|
|||||||
@Test
|
@Test
|
||||||
public void updateUserList_cannotSwitchUser_shouldDisableAddUser() {
|
public void updateUserList_cannotSwitchUser_shouldDisableAddUser() {
|
||||||
mUserCapabilities.mCanAddUser = true;
|
mUserCapabilities.mCanAddUser = true;
|
||||||
doReturn(true).when(mUserManager).canAddMoreUsers();
|
doReturn(true).when(mUserManager).canAddMoreUsers(anyString());
|
||||||
doReturn(true).when(mAddUserPreference).isEnabled();
|
doReturn(true).when(mAddUserPreference).isEnabled();
|
||||||
doReturn(SWITCHABILITY_STATUS_USER_SWITCH_DISALLOWED)
|
doReturn(SWITCHABILITY_STATUS_USER_SWITCH_DISALLOWED)
|
||||||
.when(mUserManager).getUserSwitchability();
|
.when(mUserManager).getUserSwitchability();
|
||||||
@@ -304,7 +307,7 @@ public class UserSettingsTest {
|
|||||||
@Test
|
@Test
|
||||||
public void updateUserList_canNotAddMoreUsers_shouldDisableAddUserWithSummary() {
|
public void updateUserList_canNotAddMoreUsers_shouldDisableAddUserWithSummary() {
|
||||||
mUserCapabilities.mCanAddUser = true;
|
mUserCapabilities.mCanAddUser = true;
|
||||||
doReturn(false).when(mUserManager).canAddMoreUsers();
|
doReturn(false).when(mUserManager).canAddMoreUsers(anyString());
|
||||||
doReturn(false).when(mAddUserPreference).isEnabled();
|
doReturn(false).when(mAddUserPreference).isEnabled();
|
||||||
doReturn(SWITCHABILITY_STATUS_OK).when(mUserManager).getUserSwitchability();
|
doReturn(SWITCHABILITY_STATUS_OK).when(mUserManager).getUserSwitchability();
|
||||||
doReturn(4).when(mFragment).getRealUsersCount();
|
doReturn(4).when(mFragment).getRealUsersCount();
|
||||||
@@ -320,7 +323,8 @@ public class UserSettingsTest {
|
|||||||
@Test
|
@Test
|
||||||
public void updateUserList_cannotSwitchUser_shouldDisableAddGuest() {
|
public void updateUserList_cannotSwitchUser_shouldDisableAddGuest() {
|
||||||
mUserCapabilities.mCanAddGuest = true;
|
mUserCapabilities.mCanAddGuest = true;
|
||||||
doReturn(true).when(mUserManager).canAddMoreUsers();
|
doReturn(true)
|
||||||
|
.when(mUserManager).canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_GUEST));
|
||||||
doReturn(SWITCHABILITY_STATUS_USER_IN_CALL).when(mUserManager).getUserSwitchability();
|
doReturn(SWITCHABILITY_STATUS_USER_IN_CALL).when(mUserManager).getUserSwitchability();
|
||||||
|
|
||||||
mFragment.updateUserList();
|
mFragment.updateUserList();
|
||||||
|
Reference in New Issue
Block a user