Merge changes Ie07816b7,I1b5aeeee,Id9d50703 into main
* changes: Show disabled add actions in COPE mode Add handling of admin enforced restrictions in Users Settings Refactor multiuser toggle to control user switch feature
This commit is contained in:
committed by
Android (Google) Code Review
commit
ca90cf1fbe
@@ -42,9 +42,13 @@ import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.multiuser.Flags;
|
||||
import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.platform.test.annotations.RequiresFlagsEnabled;
|
||||
import android.platform.test.flag.junit.CheckFlagsRule;
|
||||
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
|
||||
import android.telephony.TelephonyManager;
|
||||
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
@@ -63,6 +67,7 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
@@ -123,6 +128,8 @@ public class UserDetailsSettingsTest {
|
||||
private Bundle mArguments;
|
||||
private UserInfo mUserInfo;
|
||||
|
||||
@Rule
|
||||
public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
@@ -244,6 +251,19 @@ public class UserDetailsSettingsTest {
|
||||
verify(mSwitchUserPref).setEnabled(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled({Flags.FLAG_NEW_MULTIUSER_SETTINGS_UX})
|
||||
public void onResume_UserSwitcherDisabled_shouldDisableSwitchPref() {
|
||||
setupSelectedUser();
|
||||
mUserCapabilities.mUserSwitcherEnabled = false;
|
||||
mFragment.mSwitchUserPref = mSwitchUserPref;
|
||||
mFragment.onAttach(mContext);
|
||||
|
||||
mFragment.onResume();
|
||||
|
||||
verify(mSwitchUserPref).setEnabled(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onResume_switchDisallowed_shouldDisableSwitchPref() {
|
||||
setupSelectedUser();
|
||||
|
||||
@@ -34,6 +34,7 @@ import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.robolectric.Shadows.shadowOf;
|
||||
|
||||
import android.app.settings.SettingsEnums;
|
||||
@@ -46,10 +47,15 @@ import android.content.pm.ResolveInfo;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.multiuser.Flags;
|
||||
import android.os.Bundle;
|
||||
import android.os.Looper;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.platform.test.annotations.RequiresFlagsDisabled;
|
||||
import android.platform.test.annotations.RequiresFlagsEnabled;
|
||||
import android.platform.test.flag.junit.CheckFlagsRule;
|
||||
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
|
||||
import android.provider.Settings;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.view.Menu;
|
||||
@@ -75,6 +81,7 @@ import com.android.settingslib.search.SearchIndexableRaw;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.AdditionalMatchers;
|
||||
@@ -142,6 +149,9 @@ public class UserSettingsTest {
|
||||
private UserSettings mFragment;
|
||||
private UserCapabilities mUserCapabilities;
|
||||
|
||||
@Rule
|
||||
public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
@@ -359,6 +369,7 @@ public class UserSettingsTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsDisabled({Flags.FLAG_NEW_MULTIUSER_SETTINGS_UX})
|
||||
public void updateUserList_cannotSwitchUser_shouldDisableAddUser() {
|
||||
mUserCapabilities.mCanAddUser = true;
|
||||
doReturn(true).when(mUserManager).canAddMoreUsers(anyString());
|
||||
@@ -374,6 +385,20 @@ public class UserSettingsTest {
|
||||
verify(mAddUserPreference).setSelectable(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled({Flags.FLAG_NEW_MULTIUSER_SETTINGS_UX})
|
||||
public void updateUserList_disallowAddUser_shouldDisableAddUserAndAddGuest() {
|
||||
mUserCapabilities.mDisallowAddUserSetByAdmin = true;
|
||||
doReturn(true).when(mUserManager).canAddMoreUsers(anyString());
|
||||
doReturn(SWITCHABILITY_STATUS_OK)
|
||||
.when(mUserManager).getUserSwitchability();
|
||||
|
||||
mFragment.updateUserList();
|
||||
|
||||
verify(mAddUserPreference).setVisible(true);
|
||||
verify(mAddUserPreference).setDisabledByAdmin(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateUserList_canNotAddMoreUsers_shouldDisableAddUserWithSummary() {
|
||||
mUserCapabilities.mCanAddUser = true;
|
||||
@@ -392,6 +417,7 @@ public class UserSettingsTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsDisabled({Flags.FLAG_NEW_MULTIUSER_SETTINGS_UX})
|
||||
public void updateUserList_cannotSwitchUser_shouldDisableAddGuest() {
|
||||
mUserCapabilities.mCanAddGuest = true;
|
||||
doReturn(true)
|
||||
@@ -406,6 +432,54 @@ public class UserSettingsTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled({Flags.FLAG_NEW_MULTIUSER_SETTINGS_UX})
|
||||
public void updateUserList_cannotSwitchUser_shouldKeepPreferencesVisibleAndEnabled() {
|
||||
givenUsers(getAdminUser(true));
|
||||
mUserCapabilities.mCanAddGuest = true;
|
||||
mUserCapabilities.mCanAddUser = true;
|
||||
mUserCapabilities.mDisallowSwitchUser = true;
|
||||
doReturn(true)
|
||||
.when(mUserManager).canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_GUEST));
|
||||
doReturn(true)
|
||||
.when(mUserManager).canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_SECONDARY));
|
||||
|
||||
mFragment.updateUserList();
|
||||
|
||||
verify(mAddGuestPreference).setVisible(true);
|
||||
verify(mAddGuestPreference).setEnabled(true);
|
||||
verify(mAddUserPreference).setVisible(true);
|
||||
verify(mAddUserPreference).setEnabled(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled({Flags.FLAG_NEW_MULTIUSER_SETTINGS_UX})
|
||||
public void updateUserList_disallowAddUser_shouldShowButDisableAddActions() {
|
||||
givenUsers(getAdminUser(true));
|
||||
mUserCapabilities.mCanAddGuest = true;
|
||||
mUserCapabilities.mCanAddUser = false;
|
||||
mUserCapabilities.mDisallowAddUser = true;
|
||||
mUserCapabilities.mDisallowAddUserSetByAdmin = false;
|
||||
List<UserManager.EnforcingUser> enforcingUsers = new ArrayList<>();
|
||||
enforcingUsers.add(new UserManager.EnforcingUser(UserHandle.myUserId(),
|
||||
UserManager.RESTRICTION_SOURCE_SYSTEM));
|
||||
when(mUserManager.getUserRestrictionSources(UserManager.DISALLOW_ADD_USER,
|
||||
UserHandle.of(UserHandle.myUserId()))).thenReturn(enforcingUsers);
|
||||
|
||||
doReturn(true)
|
||||
.when(mUserManager).canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_GUEST));
|
||||
doReturn(true)
|
||||
.when(mUserManager).canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_SECONDARY));
|
||||
|
||||
mFragment.updateUserList();
|
||||
|
||||
verify(mAddGuestPreference).setVisible(true);
|
||||
verify(mAddGuestPreference).setEnabled(false);
|
||||
verify(mAddUserPreference).setVisible(true);
|
||||
verify(mAddUserPreference).setEnabled(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsDisabled({Flags.FLAG_NEW_MULTIUSER_SETTINGS_UX})
|
||||
public void updateUserList_addUserDisallowedByAdmin_shouldNotShowAddUser() {
|
||||
RestrictedLockUtils.EnforcedAdmin enforcedAdmin = mock(
|
||||
RestrictedLockUtils.EnforcedAdmin.class);
|
||||
@@ -420,6 +494,22 @@ public class UserSettingsTest {
|
||||
verify(mAddUserPreference).setVisible(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled({Flags.FLAG_NEW_MULTIUSER_SETTINGS_UX})
|
||||
public void updateUserList_addUserDisallowedByAdmin_shouldShowPrefDisabledByAdmin() {
|
||||
RestrictedLockUtils.EnforcedAdmin enforcedAdmin = mock(
|
||||
RestrictedLockUtils.EnforcedAdmin.class);
|
||||
|
||||
mUserCapabilities.mEnforcedAdmin = enforcedAdmin;
|
||||
mUserCapabilities.mCanAddUser = false;
|
||||
mUserCapabilities.mDisallowAddUser = true;
|
||||
mUserCapabilities.mDisallowAddUserSetByAdmin = true;
|
||||
doReturn(true).when(mAddUserPreference).isEnabled();
|
||||
|
||||
mFragment.updateUserList();
|
||||
|
||||
verify(mAddUserPreference).setDisabledByAdmin(enforcedAdmin);
|
||||
}
|
||||
@Test
|
||||
public void updateUserList_cannotAddUserButCanSwitchUser_shouldNotShowAddUser() {
|
||||
mUserCapabilities.mCanAddUser = false;
|
||||
@@ -461,18 +551,31 @@ public class UserSettingsTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateUserList_userSwitcherDisabled_shouldNotShowAddUser() {
|
||||
public void updateUserList_userSwitcherDisabled_shouldShowAddUser() {
|
||||
givenUsers(getAdminUser(true));
|
||||
mUserCapabilities.mCanAddUser = true;
|
||||
mUserCapabilities.mUserSwitcherEnabled = false;
|
||||
|
||||
mFragment.updateUserList();
|
||||
|
||||
verify(mAddUserPreference).setVisible(false);
|
||||
verify(mAddUserPreference).setVisible(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateUserList_userSwitcherDisabled_shouldNotShowAddGuest() {
|
||||
public void updateUserList_userSwitcherDisabled_shouldShowAddGuest() {
|
||||
givenUsers(getAdminUser(true));
|
||||
mUserCapabilities.mCanAddGuest = true;
|
||||
mUserCapabilities.mUserSwitcherEnabled = false;
|
||||
doReturn(true)
|
||||
.when(mUserManager).canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_GUEST));
|
||||
|
||||
mFragment.updateUserList();
|
||||
|
||||
verify(mAddGuestPreference).setVisible(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateUserList_userSwitcherDisabledCannotAddMoreGuests_shouldNotShowAddGuest() {
|
||||
givenUsers(getAdminUser(true));
|
||||
mUserCapabilities.mCanAddGuest = true;
|
||||
mUserCapabilities.mUserSwitcherEnabled = false;
|
||||
@@ -533,18 +636,18 @@ public class UserSettingsTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateUserList_existingSecondaryUser_shouldAddOnlyCurrUser_MultiUserIsDisabled() {
|
||||
public void updateUserList_existingSecondaryUser_shouldAddAllUsers_MultiUserIsDisabled() {
|
||||
givenUsers(getAdminUser(true), getSecondaryUser(false));
|
||||
mUserCapabilities.mUserSwitcherEnabled = false;
|
||||
|
||||
mFragment.updateUserList();
|
||||
|
||||
ArgumentCaptor<UserPreference> captor = ArgumentCaptor.forClass(UserPreference.class);
|
||||
verify(mFragment.mUserListCategory, times(1))
|
||||
verify(mFragment.mUserListCategory, times(2))
|
||||
.addPreference(captor.capture());
|
||||
|
||||
List<UserPreference> userPrefs = captor.getAllValues();
|
||||
assertThat(userPrefs.size()).isEqualTo(1);
|
||||
assertThat(userPrefs.size()).isEqualTo(2);
|
||||
assertThat(userPrefs.get(0)).isSameInstanceAs(mMePreference);
|
||||
}
|
||||
|
||||
@@ -631,6 +734,7 @@ public class UserSettingsTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsDisabled({Flags.FLAG_NEW_MULTIUSER_SETTINGS_UX})
|
||||
public void updateUserList_uninitializedUserAndCanNotSwitchUser_shouldDisablePref() {
|
||||
UserInfo uninitializedUser = getSecondaryUser(false);
|
||||
removeFlag(uninitializedUser, UserInfo.FLAG_INITIALIZED);
|
||||
|
||||
Reference in New Issue
Block a user