Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fa922697 authored by Ben Murdoch's avatar Ben Murdoch
Browse files

Revert "Revert "Show "Add users from lock screen" dependent on secure lock screen.""

And fix the failing test that caused the revert.

Bug: 148015798
Bug: 149209670
Test: make -j64 RunSettingsRoboTests

This reverts commit 666dacc3.

Change-Id: I34bb82e621e009ec26c28835f309e7a5b996e9b3
parent 040c548d
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -16,22 +16,29 @@
package com.android.settings.users;

import android.content.Context;
import android.os.UserHandle;
import android.provider.Settings;

import androidx.preference.Preference;

import com.android.internal.widget.LockPatternUtils;
import com.android.settings.core.TogglePreferenceController;
import com.android.settingslib.RestrictedSwitchPreference;

public class AddUserWhenLockedPreferenceController extends TogglePreferenceController {

    private final UserCapabilities mUserCaps;
    private LockPatternUtils mLockPatternUtils;

    public AddUserWhenLockedPreferenceController(Context context, String key) {
        super(context, key);
        mUserCaps = UserCapabilities.create(context);
    }

    void setLockPatternUtils(LockPatternUtils lockPatternUtils) {
        mLockPatternUtils = lockPatternUtils;
    }

    @Override
    public void updateState(Preference preference) {
        super.updateState(preference);
@@ -53,6 +60,8 @@ public class AddUserWhenLockedPreferenceController extends TogglePreferenceContr
            return DISABLED_FOR_USER;
        } else if (mUserCaps.disallowAddUser() || mUserCaps.disallowAddUserSetByAdmin()) {
            return DISABLED_FOR_USER;
        } else if (!mLockPatternUtils.isSecure(UserHandle.myUserId())) {
            return CONDITIONALLY_UNAVAILABLE;
        } else {
            return mUserCaps.mUserSwitcherEnabled ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
        }
+8 −2
Original line number Diff line number Diff line
@@ -241,6 +241,9 @@ public class UserSettings extends SettingsPreferenceFragment

        mAddUserWhenLockedPreferenceController = new AddUserWhenLockedPreferenceController(
                activity, KEY_ADD_USER_WHEN_LOCKED);
        mAddUserWhenLockedPreferenceController.setLockPatternUtils(
                new LockPatternUtils(getPrefContext()));

        mMultiUserFooterPreferenceController = new MultiUserFooterPreferenceController(activity,
                KEY_MULTIUSER_FOOTER);

@@ -1290,8 +1293,11 @@ public class UserSettings extends SettingsPreferenceFragment
                        boolean suppressAllPage) {
                    final List<String> niks = super.getNonIndexableKeysFromXml(context, xmlResId,
                            suppressAllPage);
                    new AddUserWhenLockedPreferenceController(context, KEY_ADD_USER_WHEN_LOCKED)
                            .updateNonIndexableKeys(niks);
                    AddUserWhenLockedPreferenceController controller =
                            new AddUserWhenLockedPreferenceController(
                                    context, KEY_ADD_USER_WHEN_LOCKED);
                    controller.setLockPatternUtils(new LockPatternUtils(context));
                    controller.updateNonIndexableKeys(niks);
                    new AutoSyncDataPreferenceController(context, null /* parent */)
                            .updateNonIndexableKeys(niks);
                    new AutoSyncPersonalDataPreferenceController(context, null /* parent */)
+46 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settings.users;
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Answers.RETURNS_DEEP_STUBS;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -27,6 +28,8 @@ import android.provider.Settings.Global;

import androidx.preference.PreferenceScreen;

import com.android.internal.widget.LockPatternUtils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settingslib.RestrictedSwitchPreference;

@@ -51,13 +54,16 @@ public class AddUserWhenLockedPreferenceControllerTest {
    private Context mContext;
    private ShadowUserManager mUserManager;
    private AddUserWhenLockedPreferenceController mController;
    private LockPatternUtils mLockPatternUtils;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mContext = RuntimeEnvironment.application;
        mLockPatternUtils = mock(LockPatternUtils.class);
        mUserManager = ShadowUserManager.getShadow();
        mController = new AddUserWhenLockedPreferenceController(mContext, "fake_key");
        mController.setLockPatternUtils(mLockPatternUtils);
        mUserManager.setSupportsMultipleUsers(true);
    }

@@ -69,6 +75,7 @@ public class AddUserWhenLockedPreferenceControllerTest {
    @Test
    public void displayPref_NotAdmin_shouldNotDisplay() {
        mUserManager.setIsAdminUser(false);
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
        final RestrictedSwitchPreference preference = mock(RestrictedSwitchPreference.class);
        when(preference.getKey()).thenReturn(mController.getPreferenceKey());
        when(mScreen.findPreference(preference.getKey())).thenReturn(preference);
@@ -81,6 +88,7 @@ public class AddUserWhenLockedPreferenceControllerTest {
    @Test
    public void updateState_NotAdmin_shouldNotDisplayPreference() {
        mUserManager.setIsAdminUser(false);
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
        final RestrictedSwitchPreference preference = mock(RestrictedSwitchPreference.class);

        mController.updateState(preference);
@@ -93,8 +101,10 @@ public class AddUserWhenLockedPreferenceControllerTest {
        mUserManager.setIsAdminUser(true);
        mUserManager.setUserSwitcherEnabled(true);
        mUserManager.setSupportsMultipleUsers(true);
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
        final AddUserWhenLockedPreferenceController controller =
                new AddUserWhenLockedPreferenceController(mContext, "fake_key");
        controller.setLockPatternUtils(mLockPatternUtils);
        final RestrictedSwitchPreference preference = mock(RestrictedSwitchPreference.class);

        controller.updateState(preference);
@@ -143,4 +153,40 @@ public class AddUserWhenLockedPreferenceControllerTest {
        assertThat(Global.getInt(mContext.getContentResolver(), Global.ADD_USERS_WHEN_LOCKED, 0))
                .isEqualTo(0);
    }

    @Test
    public void updateState_insecureLockScreen_shouldNotDisplayPreference() {
        mUserManager.setIsAdminUser(true);
        mUserManager.setUserSwitcherEnabled(true);
        mUserManager.setSupportsMultipleUsers(true);
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
        final AddUserWhenLockedPreferenceController controller =
                new AddUserWhenLockedPreferenceController(mContext, "fake_key");
        controller.setLockPatternUtils(mLockPatternUtils);
        final RestrictedSwitchPreference preference = mock(RestrictedSwitchPreference.class);

        controller.updateState(preference);

        verify(preference).setVisible(false);
        assertThat(controller.getAvailabilityStatus()).isEqualTo(
                BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
    }

    @Test
    public void updateState_secureLockScreen_shouldDisplayPreference() {
        mUserManager.setIsAdminUser(true);
        mUserManager.setUserSwitcherEnabled(true);
        mUserManager.setSupportsMultipleUsers(true);
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
        final AddUserWhenLockedPreferenceController controller =
                new AddUserWhenLockedPreferenceController(mContext, "fake_key");
        controller.setLockPatternUtils(mLockPatternUtils);
        final RestrictedSwitchPreference preference = mock(RestrictedSwitchPreference.class);

        controller.updateState(preference);

        verify(preference).setVisible(true);
        assertThat(controller.getAvailabilityStatus()).isEqualTo(
                BasePreferenceController.AVAILABLE);
    }
}