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
This commit is contained in:
felkachang
2018-07-19 20:06:50 +08:00
parent c879386e5a
commit c2b6764057
2 changed files with 162 additions and 2 deletions

View File

@@ -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);

View File

@@ -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);
}
}