From: felkachang Date: Thu, 19 Jul 2018 12:06:50 +0000 (+0800) Subject: Fix the empty preference after clicking gear icon X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=c2b67640577d505b89ea04d1e91a412d7293c0e6;p=android-x86%2Fpackages-apps-Settings.git Fix the empty preference after clicking gear icon Because there is no other options for 'None' or 'Swipe, there is no necessary for showing the gear icon to show options. 'Lock screen message' could be found in Settings > Display > Lock screen display. Add testcase to verify the ChangeScreenLockPreferenceController's behavior. Test: make ROBOTEST_FILTER=ChangeScreenLockPreferenceControllerTest \ RunSettingsRoboTests -j40 Change-Id: Icdcd672261749d106162053d6f5228cee420a810 Fixes: 110848852 --- diff --git a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java index 156e230c6b..1284b6ad6e 100644 --- a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java +++ b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java @@ -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); diff --git a/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java index 6cc1704bf3..fda5942b21 100644 --- a/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java @@ -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