Change user setup prompt dialog showing logic

- Extract user setup prompt dialog creation logic
- Move user setup prompt dialog showing to UserDetailsSettings
- Rename user click and creation related methods to improve readability
- Set "disabled by admin" for switch pref when switch is disabled
- Cleanup UserSettings and UserDetailsSettings onPreferenceClick
- After a guest is created the details page opens instead of switching

Test: Manual test and robo tests with this command:
  make -j64 RunSettingsRoboTests
Demo: http://shortn/_ACYsnbIKO9
Bug: 156867277
Change-Id: Ifa0cdefcd49d5b865e940a7cc332136ed26ecf57
This commit is contained in:
Andras Kloczl
2020-05-20 19:49:53 +01:00
parent 03b20f864a
commit 4e2a0717c9
5 changed files with 153 additions and 122 deletions

View File

@@ -34,6 +34,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.robolectric.Shadows.shadowOf;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -53,6 +54,8 @@ import com.android.settings.SettingsActivity;
import com.android.settings.SubSettings;
import com.android.settings.testutils.shadow.ShadowDevicePolicyManager;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedPreference;
import org.junit.After;
import org.junit.Before;
@@ -91,7 +94,7 @@ public class UserDetailsSettingsTest {
private ShadowUserManager mUserManager;
@Mock
private Preference mSwitchUserPref;
private RestrictedPreference mSwitchUserPref;
@Mock
private SwitchPreference mPhonePref;
@Mock
@@ -101,6 +104,7 @@ public class UserDetailsSettingsTest {
private FragmentActivity mActivity;
private Context mContext;
private UserCapabilities mUserCapabilities;
private UserDetailsSettings mFragment;
private Bundle mArguments;
private UserInfo mUserInfo;
@@ -111,6 +115,8 @@ public class UserDetailsSettingsTest {
mActivity = spy(ActivityController.of(new FragmentActivity()).get());
mContext = spy(RuntimeEnvironment.application);
mUserCapabilities = UserCapabilities.create(mContext);
mUserCapabilities.mUserSwitcherEnabled = true;
mFragment = spy(new UserDetailsSettings());
mArguments = new Bundle();
@@ -121,6 +127,7 @@ public class UserDetailsSettingsTest {
doReturn(mTelephonyManager).when(mActivity).getSystemService(Context.TELEPHONY_SERVICE);
ReflectionHelpers.setField(mFragment, "mUserManager", userManager);
ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
doReturn(mActivity).when(mFragment).getActivity();
doReturn(mActivity).when(mFragment).getContext();
@@ -426,6 +433,33 @@ public class UserDetailsSettingsTest {
verify(mPhonePref).setChecked(false);
}
@Test
public void initialize_switchUserDisallowed_shouldSetAdminDisabledOnSwitchPreference() {
setupSelectedUser();
mUserCapabilities.mDisallowSwitchUser = true;
DevicePolicyManager devicePolicyManager = mock(DevicePolicyManager.class);
doReturn(devicePolicyManager).when(mActivity)
.getSystemService(Context.DEVICE_POLICY_SERVICE);
doReturn(mock(ComponentName.class)).when(devicePolicyManager)
.getDeviceOwnerComponentOnAnyUser();
mFragment.initialize(mActivity, mArguments);
verify(mSwitchUserPref).setDisabledByAdmin(any(RestrictedLockUtils.EnforcedAdmin.class));
}
@Test
public void initialize_switchUserAllowed_shouldSetSwitchPreferenceEnabled() {
setupSelectedUser();
mUserCapabilities.mDisallowSwitchUser = false;
mFragment.initialize(mActivity, mArguments);
verify(mSwitchUserPref).setDisabledByAdmin(null);
verify(mSwitchUserPref).setSelectable(true);
verify(mSwitchUserPref).setOnPreferenceClickListener(mFragment);
}
@Test
public void onPreferenceClick_switchClicked_canSwitch_shouldSwitch() {
setupSelectedUser();