Merge "Update face & fingerprint pref logic" into main

This commit is contained in:
Joshua Mccloskey
2024-05-08 18:08:06 +00:00
committed by Android (Google) Code Review
18 changed files with 213 additions and 13 deletions

View File

@@ -18,10 +18,15 @@ package com.android.settings.biometrics.combination;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.face.FaceManager;
@@ -30,6 +35,7 @@ import android.os.UserManager;
import com.android.settings.testutils.ActiveUnlockTestUtils;
import com.android.settings.testutils.shadow.ShadowDeviceConfig;
import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedPreference;
import org.junit.After;
@@ -46,7 +52,7 @@ import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowDeviceConfig.class})
@Config(shadows = {ShadowDeviceConfig.class, ShadowRestrictedLockUtilsInternal.class})
public class BiometricFaceStatusPreferenceControllerTest {
@Rule public final MockitoRule mMocks = MockitoJUnit.rule();
@@ -78,6 +84,7 @@ public class BiometricFaceStatusPreferenceControllerTest {
@After
public void tearDown() {
ActiveUnlockTestUtils.disable(mContext);
ShadowRestrictedLockUtilsInternal.reset();
}
@Test
@@ -110,4 +117,43 @@ public class BiometricFaceStatusPreferenceControllerTest {
assertThat(mPreference.isVisible()).isTrue();
}
@Test
public void faceDisabled_whenAdminAndNoFingerprintsEnrolled() {
when(mFaceManager.isHardwareDetected()).thenReturn(true);
when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(false);
ShadowRestrictedLockUtilsInternal
.setKeyguardDisabledFeatures(DevicePolicyManager.KEYGUARD_DISABLE_FACE);
final RestrictedPreference restrictedPreference = mock(RestrictedPreference.class);
mController.updateState(restrictedPreference);
verify(restrictedPreference).setDisabledByAdmin(any());
}
@Test
public void faceNotDisabled_whenAdminAndFingerprintsEnrolled() {
when(mFaceManager.isHardwareDetected()).thenReturn(true);
when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(true);
ShadowRestrictedLockUtilsInternal
.setKeyguardDisabledFeatures(DevicePolicyManager.KEYGUARD_DISABLE_FACE);
final RestrictedPreference restrictedPreference = mock(RestrictedPreference.class);
mController.updateState(restrictedPreference);
verify(restrictedPreference, never()).setDisabledByAdmin(any());
verify(restrictedPreference).setEnabled(true);
}
@Test
public void faceNotDisabled_whenNoAdmin() {
when(mFaceManager.isHardwareDetected()).thenReturn(true);
final RestrictedPreference restrictedPreference = mock(RestrictedPreference.class);
mController.updateState(restrictedPreference);
verify(restrictedPreference, never()).setDisabledByAdmin(any());
verify(restrictedPreference).setEnabled(true);
}
}

View File

@@ -18,10 +18,15 @@ package com.android.settings.biometrics.combination;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.face.FaceManager;
@@ -30,6 +35,7 @@ import android.os.UserManager;
import com.android.settings.testutils.ActiveUnlockTestUtils;
import com.android.settings.testutils.shadow.ShadowDeviceConfig;
import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedPreference;
import org.junit.After;
@@ -46,7 +52,7 @@ import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowDeviceConfig.class})
@Config(shadows = {ShadowDeviceConfig.class, ShadowRestrictedLockUtilsInternal.class})
public class BiometricFingerprintStatusPreferenceControllerTest {
@Rule public final MockitoRule mMocks = MockitoJUnit.rule();
@@ -78,6 +84,7 @@ public class BiometricFingerprintStatusPreferenceControllerTest {
@After
public void tearDown() {
ActiveUnlockTestUtils.disable(mContext);
ShadowRestrictedLockUtilsInternal.reset();
}
@Test
@@ -110,4 +117,45 @@ public class BiometricFingerprintStatusPreferenceControllerTest {
assertThat(mPreference.isVisible()).isTrue();
}
@Test
public void fingerprintDisabled_whenAdminAndNoFingerprintsEnrolled() {
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
when(mFingerprintManager.hasEnrolledFingerprints(anyInt())).thenReturn(false);
ShadowRestrictedLockUtilsInternal
.setKeyguardDisabledFeatures(DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT);
final RestrictedPreference restrictedPreference = mock(RestrictedPreference.class);
mController.updateState(restrictedPreference);
verify(restrictedPreference).setDisabledByAdmin(any());
}
@Test
public void fingerprintNotDisabled_whenAdminAndFingerprintsEnrolled() {
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
when(mFingerprintManager.hasEnrolledFingerprints(anyInt())).thenReturn(true);
ShadowRestrictedLockUtilsInternal
.setKeyguardDisabledFeatures(DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT);
final RestrictedPreference restrictedPreference = mock(RestrictedPreference.class);
mController.updateState(restrictedPreference);
verify(restrictedPreference, never()).setDisabledByAdmin(any());
verify(restrictedPreference).setEnabled(true);
}
@Test
public void fingerprintNotDisabled_whenNoAdmin() {
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
final RestrictedPreference restrictedPreference = mock(RestrictedPreference.class);
mController.updateState(restrictedPreference);
verify(restrictedPreference, never()).setDisabledByAdmin(any());
verify(restrictedPreference).setEnabled(true);
}
}

View File

@@ -127,6 +127,7 @@ public class FaceSettingsLockscreenBypassPreferenceControllerTest {
EnforcedAdmin admin = new EnforcedAdmin();
doReturn(admin).when(mController).getRestrictingAdmin();
mController.updateState(mPreference);
verify(mPreference).setDisabledByAdmin(admin);
verify(mPreference).setEnabled(false);
}
}

View File

@@ -43,6 +43,7 @@ import androidx.preference.Preference;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -55,11 +56,13 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
import java.util.Collections;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowRestrictedLockUtilsInternal.class})
public class FaceStatusPreferenceControllerTest {
private static final String TEST_PREF_KEY = "baz";

View File

@@ -43,6 +43,7 @@ import androidx.preference.Preference;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -56,11 +57,13 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
import java.util.Collections;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowRestrictedLockUtilsInternal.class})
public class FingerprintStatusPreferenceControllerTest {
@Mock