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:
@@ -84,8 +84,7 @@ public class ChangeScreenLockPreferenceController extends AbstractPreferenceCont
|
|||||||
@Override
|
@Override
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
if (mPreference != null && mPreference instanceof GearPreference) {
|
if (mPreference != null && mPreference instanceof GearPreference) {
|
||||||
if (mLockPatternUtils.isSecure(mUserId)
|
if (mLockPatternUtils.isSecure(mUserId)) {
|
||||||
|| !mLockPatternUtils.isLockScreenDisabled(mUserId)) {
|
|
||||||
((GearPreference) mPreference).setOnGearClickListener(this);
|
((GearPreference) mPreference).setOnGearClickListener(this);
|
||||||
} else {
|
} else {
|
||||||
((GearPreference) mPreference).setOnGearClickListener(null);
|
((GearPreference) mPreference).setOnGearClickListener(null);
|
||||||
|
@@ -17,17 +17,28 @@
|
|||||||
package com.android.settings.security;
|
package com.android.settings.security;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
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.spy;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.UserManager;
|
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.internal.widget.LockPatternUtils;
|
||||||
|
import com.android.settings.R;
|
||||||
import com.android.settings.testutils.FakeFeatureFactory;
|
import com.android.settings.testutils.FakeFeatureFactory;
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
import com.android.settings.testutils.shadow.ShadowUtils;
|
import com.android.settings.testutils.shadow.ShadowUtils;
|
||||||
|
import com.android.settings.widget.GearPreference;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -47,10 +58,15 @@ public class ChangeScreenLockPreferenceControllerTest {
|
|||||||
private UserManager mUserManager;
|
private UserManager mUserManager;
|
||||||
@Mock
|
@Mock
|
||||||
private DevicePolicyManager mDevicePolicyManager;
|
private DevicePolicyManager mDevicePolicyManager;
|
||||||
|
@Mock
|
||||||
|
private PreferenceScreen mPreferenceScreen;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private FakeFeatureFactory mFeatureFactory;
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
private ChangeScreenLockPreferenceController mController;
|
private ChangeScreenLockPreferenceController mController;
|
||||||
|
private View mGearView;
|
||||||
|
private GearPreference mGearPreference;
|
||||||
|
private PreferenceViewHolder mPreferenceViewHolder;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -75,4 +91,149 @@ public class ChangeScreenLockPreferenceControllerTest {
|
|||||||
public void testDeviceAdministrators_ifDisabled_shouldNotBeShown() {
|
public void testDeviceAdministrators_ifDisabled_shouldNotBeShown() {
|
||||||
assertThat(mController.isAvailable()).isFalse();
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user