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

Commit c793e454 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix the empty preference after clicking gear icon"

parents 9d377388 c2b67640
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -84,8 +84,7 @@ public class ChangeScreenLockPreferenceController extends AbstractPreferenceCont
    @Override
    public void updateState(Preference preference) {
        if (mPreference != null && mPreference instanceof GearPreference) {
            if (mLockPatternUtils.isSecure(mUserId)
                    || !mLockPatternUtils.isLockScreenDisabled(mUserId)) {
            if (mLockPatternUtils.isSecure(mUserId)) {
                ((GearPreference) mPreference).setOnGearClickListener(this);
            } else {
                ((GearPreference) mPreference).setOnGearClickListener(null);
+161 −0
Original line number Diff line number Diff line
@@ -17,17 +17,28 @@
package com.android.settings.security;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.os.UserManager;
import android.view.LayoutInflater;
import android.view.View;

import androidx.preference.PreferenceScreen;
import androidx.preference.PreferenceViewHolder;

import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settings.widget.GearPreference;

import org.junit.Before;
import org.junit.Test;
@@ -47,10 +58,15 @@ public class ChangeScreenLockPreferenceControllerTest {
    private UserManager mUserManager;
    @Mock
    private DevicePolicyManager mDevicePolicyManager;
    @Mock
    private PreferenceScreen mPreferenceScreen;

    private Context mContext;
    private FakeFeatureFactory mFeatureFactory;
    private ChangeScreenLockPreferenceController mController;
    private View mGearView;
    private GearPreference mGearPreference;
    private PreferenceViewHolder mPreferenceViewHolder;

    @Before
    public void setUp() {
@@ -75,4 +91,149 @@ public class ChangeScreenLockPreferenceControllerTest {
    public void testDeviceAdministrators_ifDisabled_shouldNotBeShown() {
        assertThat(mController.isAvailable()).isFalse();
    }

    @Test
    public void updateState_notSecureDisableKeyguard_shouldNotShowGear() {
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
        when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(true);
        mockGearPreferenceAndViewHolder();

        showPreference();

        assertThat(mGearView.getVisibility()).isEqualTo(View.GONE);
    }

    @Test
    public void updateState_notSecureDisableKeyguard_summaryShouldShowOff() {
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
        when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(true);
        mockGearPreferenceAndViewHolder();

        showPreference();

        assertThat(mGearPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_off));
    }

    @Test
    public void updateState_notSecureWithSwipeKeyguard_shouldNotShowGear() {
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
        when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
        mockGearPreferenceAndViewHolder();

        showPreference();

        assertThat(mGearView.getVisibility()).isEqualTo(View.GONE);
    }

    @Test
    public void updateState_notSecureWithSwipeKeyguard_summaryShouldShowSwipe() {
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
        when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
        mockGearPreferenceAndViewHolder();

        showPreference();

        assertThat(mGearPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_none));
    }

    @Test
    public void updateState_secureWithPinKeyguard_shouldShowGear() {
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
        when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
        doReturn(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX).when(mLockPatternUtils)
                .getKeyguardStoredPasswordQuality(anyInt());
        mockGearPreferenceAndViewHolder();

        showPreference();

        assertThat(mGearView.getVisibility()).isEqualTo(View.VISIBLE);
    }

    @Test
    public void updateState_secureWithPinKeyguard_summaryShouldShowPin() {
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
        when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
        doReturn(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX).when(mLockPatternUtils)
                .getKeyguardStoredPasswordQuality(anyInt());

        mockGearPreferenceAndViewHolder();

        showPreference();

        assertThat(mGearPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_pin));
    }

    @Test
    public void updateState_secureWithPasswordKeyguard_shouldShowGear() {
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
        when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
        doReturn(DevicePolicyManager.PASSWORD_QUALITY_COMPLEX).when(mLockPatternUtils)
                .getKeyguardStoredPasswordQuality(anyInt());
        mockGearPreferenceAndViewHolder();

        showPreference();

        assertThat(mGearView.getVisibility()).isEqualTo(View.VISIBLE);
    }

    @Test
    public void updateState_secureWithPasswordKeyguard_summaryShouldShowPassword() {
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
        when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
        doReturn(DevicePolicyManager.PASSWORD_QUALITY_COMPLEX).when(mLockPatternUtils)
                .getKeyguardStoredPasswordQuality(anyInt());
        mockGearPreferenceAndViewHolder();

        showPreference();

        assertThat(mGearPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_password));
    }

    @Test
    public void updateState_secureWithPatternKeyguard_shouldShowGear() {
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
        when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
        doReturn(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING).when(mLockPatternUtils)
                .getKeyguardStoredPasswordQuality(anyInt());
        mockGearPreferenceAndViewHolder();

        showPreference();

        assertThat(mGearView.getVisibility()).isEqualTo(View.VISIBLE);
    }

    @Test
    public void updateState_secureWithPatternKeyguard_summaryShouldShowPattern() {
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
        when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
        doReturn(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING).when(mLockPatternUtils)
                .getKeyguardStoredPasswordQuality(anyInt());
        mockGearPreferenceAndViewHolder();

        showPreference();

        assertThat(mGearPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_pattern));
    }

    private void mockGearPreferenceAndViewHolder() {
        mGearPreference = new GearPreference(mContext, null);
        mGearView = new View(mContext);
        PreferenceViewHolder viewHolder = PreferenceViewHolder.createInstanceForTests(
                LayoutInflater.from(mContext).inflate(
                        mGearPreference.getLayoutResource(), null, false));
        mPreferenceViewHolder = spy(viewHolder);
        doReturn(mGearView).when(mPreferenceViewHolder).findViewById(R.id.settings_button);
        when(mPreferenceScreen.findPreference(anyString())).thenReturn(mGearPreference);
    }

    private void showPreference() {
        mController.displayPreference(mPreferenceScreen);
        mController.updateState(mGearPreference);
        mGearPreference.onBindViewHolder(mPreferenceViewHolder);
    }
}
 No newline at end of file