Loading tests/robotests/src/com/android/settings/biometrics/fingerprint2/fragment/FingerprintEnrollIntroFragmentTest.kt +17 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,11 @@ package com.android.settings.biometrics.fingerprint2.fragment import android.content.Context import android.hardware.biometrics.ComponentInfoInternal import android.hardware.biometrics.SensorLocationInternal import android.hardware.biometrics.SensorProperties import android.hardware.fingerprint.FingerprintSensorProperties import android.hardware.fingerprint.FingerprintSensorPropertiesInternal import android.os.Bundle import androidx.fragment.app.testing.FragmentScenario import androidx.fragment.app.testing.launchFragmentInContainer Loading Loading @@ -47,6 +52,7 @@ import com.android.settings.testutils2.FakeFingerprintManagerInteractor import com.android.systemui.biometrics.shared.model.FingerprintSensor import com.android.systemui.biometrics.shared.model.FingerprintSensorType import com.android.systemui.biometrics.shared.model.SensorStrength import com.android.systemui.biometrics.shared.model.toFingerprintSensor import com.google.android.setupdesign.GlifLayout import com.google.android.setupdesign.template.RequireScrollMixin import kotlinx.coroutines.test.StandardTestDispatcher Loading @@ -67,7 +73,17 @@ class FingerprintEnrollIntroFragmentTest { private val backgroundDispatcher = StandardTestDispatcher() private lateinit var fragmentScenario: FragmentScenario<FingerprintEnrollIntroV2Fragment> private val fingerprintSensor = FingerprintSensor(1, SensorStrength.STRONG, 5, FingerprintSensorType.POWER_BUTTON) FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_POWER_BUTTON, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() var enrollFlow = Default val flowViewModel = FingerprintFlowViewModel(enrollFlow) Loading tests/screenshot/src/com/android/settings/tests/screenshot/biometrics/fingerprint/Injector.kt +19 −4 Original line number Diff line number Diff line Loading @@ -16,6 +16,11 @@ package com.android.settings.tests.screenshot.biometrics.fingerprint import android.content.res.Configuration import android.hardware.biometrics.ComponentInfoInternal import android.hardware.biometrics.SensorLocationInternal import android.hardware.biometrics.SensorProperties import android.hardware.fingerprint.FingerprintSensorProperties import android.hardware.fingerprint.FingerprintSensorPropertiesInternal import android.view.Surface import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider Loading @@ -39,9 +44,7 @@ import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.Fing import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerprintScrollViewModel import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.GatekeeperInfo import com.android.settings.testutils2.FakeFingerprintManagerInteractor import com.android.systemui.biometrics.shared.model.FingerprintSensor import com.android.systemui.biometrics.shared.model.FingerprintSensorType import com.android.systemui.biometrics.shared.model.SensorStrength import com.android.systemui.biometrics.shared.model.toFingerprintSensor import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow Loading @@ -56,7 +59,19 @@ import platform.test.screenshot.matchers.PixelPerfectMatcher class Injector(step: FingerprintNavigationStep.UiStep) { var enrollFlow = Default var fingerprintSensor = FingerprintSensor(1, SensorStrength.STRONG, 5, FingerprintSensorType.REAR) var fingerprintSensor = FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_REAR, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() var accessibilityInteractor = object : AccessibilityInteractor { override val isAccessibilityEnabled: Flow<Boolean> = flowOf(true) Loading tests/shared/src/com/android/settings/testutils2/FakeFingerprintManagerInteractor.kt +19 −11 Original line number Diff line number Diff line Loading @@ -16,6 +16,11 @@ package com.android.settings.testutils2 import android.hardware.biometrics.ComponentInfoInternal import android.hardware.biometrics.SensorLocationInternal import android.hardware.biometrics.SensorProperties import android.hardware.fingerprint.FingerprintSensorProperties import android.hardware.fingerprint.FingerprintSensorPropertiesInternal import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.FingerprintManagerInteractor import com.android.settings.biometrics.fingerprint2.lib.model.EnrollReason import com.android.settings.biometrics.fingerprint2.lib.model.FingerEnrollState Loading @@ -23,7 +28,7 @@ import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintAuthAtt import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintData import com.android.systemui.biometrics.shared.model.FingerprintSensor import com.android.systemui.biometrics.shared.model.FingerprintSensorType import com.android.systemui.biometrics.shared.model.SensorStrength import com.android.systemui.biometrics.shared.model.toFingerprintSensor import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOf Loading @@ -35,16 +40,20 @@ class FakeFingerprintManagerInteractor : FingerprintManagerInteractor { var enrolledFingerprintsInternal: MutableList<FingerprintData> = mutableListOf() var challengeToGenerate: Pair<Long, ByteArray> = Pair(-1L, byteArrayOf()) var authenticateAttempt = FingerprintAuthAttemptModel.Success(1) var enrollStateViewModel: List<FingerEnrollState> = listOf(FingerEnrollState.EnrollProgress(5, 5)) var enrollStateViewModel: List<FingerEnrollState> = listOf(FingerEnrollState.EnrollProgress(5, 5)) var sensorProp = FingerprintSensor( FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorStrength.STRONG, 5, FingerprintSensorType.POWER_BUTTON SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_POWER_BUTTON, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() override suspend fun authenticate(): FingerprintAuthAttemptModel { return authenticateAttempt Loading @@ -68,7 +77,7 @@ class FakeFingerprintManagerInteractor : FingerprintManagerInteractor { override suspend fun enroll( hardwareAuthToken: ByteArray?, enrollReason: EnrollReason enrollReason: EnrollReason, ): Flow<FingerEnrollState> = flowOf(*enrollStateViewModel.toTypedArray()) override suspend fun removeFingerprint(fp: FingerprintData): Boolean { Loading @@ -84,5 +93,4 @@ class FakeFingerprintManagerInteractor : FingerprintManagerInteractor { override suspend fun hasSideFps(): Boolean { return sensorProp.sensorType == FingerprintSensorType.POWER_BUTTON } } tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FingerprintManagerInteractorTest.kt +24 −9 Original line number Diff line number Diff line Loading @@ -18,18 +18,23 @@ package com.android.settings.fingerprint2.domain.interactor import android.content.Context import android.content.Intent import android.hardware.biometrics.ComponentInfoInternal import android.hardware.biometrics.SensorLocationInternal import android.hardware.biometrics.SensorProperties import android.hardware.fingerprint.Fingerprint import android.hardware.fingerprint.FingerprintEnrollOptions import android.hardware.fingerprint.FingerprintManager import android.hardware.fingerprint.FingerprintManager.CryptoObject import android.hardware.fingerprint.FingerprintManager.FINGERPRINT_ERROR_LOCKOUT_PERMANENT import android.hardware.fingerprint.FingerprintSensorProperties import android.hardware.fingerprint.FingerprintSensorPropertiesInternal import android.os.CancellationSignal import android.os.Handler import androidx.test.core.app.ApplicationProvider import com.android.settings.biometrics.GatekeeperPasswordProvider import com.android.settings.biometrics.fingerprint2.data.repository.FingerprintSensorRepository import com.android.settings.biometrics.fingerprint2.domain.interactor.PressToAuthInteractor import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractorImpl import com.android.settings.biometrics.fingerprint2.domain.interactor.PressToAuthInteractor import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.FingerprintManagerInteractor import com.android.settings.biometrics.fingerprint2.lib.model.Default import com.android.settings.biometrics.fingerprint2.lib.model.EnrollReason Loading @@ -38,8 +43,7 @@ import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintAuthAtt import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintData import com.android.settings.password.ChooseLockSettingsHelper import com.android.systemui.biometrics.shared.model.FingerprintSensor import com.android.systemui.biometrics.shared.model.FingerprintSensorType import com.android.systemui.biometrics.shared.model.SensorStrength import com.android.systemui.biometrics.shared.model.toFingerprintSensor import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.cancelAndJoin import kotlinx.coroutines.flow.Flow Loading Loading @@ -85,7 +89,18 @@ class FingerprintManagerInteractorTest { @Before fun setup() { val sensor = FingerprintSensor(1, SensorStrength.STRONG, 5, FingerprintSensorType.POWER_BUTTON) val sensor = FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_POWER_BUTTON, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() val fingerprintSensorRepository = object : FingerprintSensorRepository { override val fingerprintSensor: Flow<FingerprintSensor> = flowOf(sensor) Loading Loading @@ -135,7 +150,7 @@ class FingerprintManagerInteractorTest { listOf( Fingerprint("Finger 1,", 2, 3L), Fingerprint("Finger 2,", 3, 3L), Fingerprint("Finger 3,", 4, 3L) Fingerprint("Finger 3,", 4, 3L), ) val fingerprintList2: List<Fingerprint> = fingerprintList1.plus( Loading @@ -160,7 +175,7 @@ class FingerprintManagerInteractorTest { gateKeeperPasswordProvider.requestGatekeeperHat( any(Intent::class.java), anyLong(), anyInt() anyInt(), ) ) .thenReturn(byteArray) Loading Loading @@ -223,7 +238,7 @@ class FingerprintManagerInteractorTest { removalCallback.value.onRemovalError( fingerprintToRemove, 100, "Oh no, we couldn't find that one" "Oh no, we couldn't find that one", ) runCurrent() Loading Loading @@ -260,7 +275,7 @@ class FingerprintManagerInteractorTest { any(CancellationSignal::class.java), capture(authCallback), nullable(Handler::class.java), anyInt() anyInt(), ) authCallback.value.onAuthenticationSucceeded( FingerprintManager.AuthenticationResult(null, fingerprint, 1, false) Loading @@ -287,7 +302,7 @@ class FingerprintManagerInteractorTest { any(CancellationSignal::class.java), capture(authCallback), nullable(Handler::class.java), anyInt() anyInt(), ) authCallback.value.onAuthenticationError(FINGERPRINT_ERROR_LOCKOUT_PERMANENT, "Lockout!!") Loading tests/unit/src/com/android/settings/fingerprint2/enrollment/viewmodel/FingerprintEnrollFindSensorViewModelV2Test.kt +52 −17 Original line number Diff line number Diff line Loading @@ -18,6 +18,11 @@ package com.android.settings.fingerprint2.enrollment.viewmodel import android.content.Context import android.content.res.Configuration import android.hardware.biometrics.ComponentInfoInternal import android.hardware.biometrics.SensorLocationInternal import android.hardware.biometrics.SensorProperties import android.hardware.fingerprint.FingerprintSensorProperties import android.hardware.fingerprint.FingerprintSensorPropertiesInternal import android.view.Surface import androidx.arch.core.executor.testing.InstantTaskExecutorRule import androidx.test.core.app.ApplicationProvider Loading @@ -33,9 +38,7 @@ import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.Fing import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerprintNavigationStep import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerprintNavigationViewModel import com.android.settings.testutils2.FakeFingerprintManagerInteractor import com.android.systemui.biometrics.shared.model.FingerprintSensor import com.android.systemui.biometrics.shared.model.FingerprintSensorType import com.android.systemui.biometrics.shared.model.SensorStrength import com.android.systemui.biometrics.shared.model.toFingerprintSensor import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow Loading Loading @@ -94,7 +97,19 @@ class FingerprintEnrollFindSensorViewModelV2Test { ) .create(FingerprintGatekeeperViewModel::class.java) val sensor = FingerprintSensor(1, SensorStrength.STRONG, 5, FingerprintSensorType.POWER_BUTTON) val sensor = FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_POWER_BUTTON, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() val fingerprintFlowViewModel = FingerprintFlowViewModel(Default) navigationViewModel = FingerprintNavigationViewModel( Loading Loading @@ -159,12 +174,17 @@ class FingerprintEnrollFindSensorViewModelV2Test { fun udfpsLottieInfo() = testScope.runTest { fakeFingerprintManagerInteractor.sensorProp = FingerprintSensor( FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorStrength.STRONG, 5, FingerprintSensorType.UDFPS_OPTICAL, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_UDFPS_OPTICAL, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() var udfpsLottieInfo: Boolean? = null val job = launch { underTest.udfpsLottieInfo.collect { udfpsLottieInfo = it } } Loading Loading @@ -218,7 +238,17 @@ class FingerprintEnrollFindSensorViewModelV2Test { fun rfpsAnimation() = testScope.runTest { fakeFingerprintManagerInteractor.sensorProp = FingerprintSensor(0 /* sensorId */, SensorStrength.STRONG, 5, FingerprintSensorType.REAR) FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_REAR, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() var showRfpsAnimation: Boolean? = null val job = launch { underTest.showRfpsAnimation.collect { showRfpsAnimation = it } } Loading @@ -232,12 +262,17 @@ class FingerprintEnrollFindSensorViewModelV2Test { fun showPrimaryButton_ifUdfps() = testScope.runTest { fakeFingerprintManagerInteractor.sensorProp = FingerprintSensor( FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorStrength.STRONG, 5, FingerprintSensorType.UDFPS_OPTICAL, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_UDFPS_OPTICAL, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() var showPrimaryButton: Boolean? = null val job = launch { underTest.showPrimaryButton.collect { showPrimaryButton = it } } Loading Loading
tests/robotests/src/com/android/settings/biometrics/fingerprint2/fragment/FingerprintEnrollIntroFragmentTest.kt +17 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,11 @@ package com.android.settings.biometrics.fingerprint2.fragment import android.content.Context import android.hardware.biometrics.ComponentInfoInternal import android.hardware.biometrics.SensorLocationInternal import android.hardware.biometrics.SensorProperties import android.hardware.fingerprint.FingerprintSensorProperties import android.hardware.fingerprint.FingerprintSensorPropertiesInternal import android.os.Bundle import androidx.fragment.app.testing.FragmentScenario import androidx.fragment.app.testing.launchFragmentInContainer Loading Loading @@ -47,6 +52,7 @@ import com.android.settings.testutils2.FakeFingerprintManagerInteractor import com.android.systemui.biometrics.shared.model.FingerprintSensor import com.android.systemui.biometrics.shared.model.FingerprintSensorType import com.android.systemui.biometrics.shared.model.SensorStrength import com.android.systemui.biometrics.shared.model.toFingerprintSensor import com.google.android.setupdesign.GlifLayout import com.google.android.setupdesign.template.RequireScrollMixin import kotlinx.coroutines.test.StandardTestDispatcher Loading @@ -67,7 +73,17 @@ class FingerprintEnrollIntroFragmentTest { private val backgroundDispatcher = StandardTestDispatcher() private lateinit var fragmentScenario: FragmentScenario<FingerprintEnrollIntroV2Fragment> private val fingerprintSensor = FingerprintSensor(1, SensorStrength.STRONG, 5, FingerprintSensorType.POWER_BUTTON) FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_POWER_BUTTON, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() var enrollFlow = Default val flowViewModel = FingerprintFlowViewModel(enrollFlow) Loading
tests/screenshot/src/com/android/settings/tests/screenshot/biometrics/fingerprint/Injector.kt +19 −4 Original line number Diff line number Diff line Loading @@ -16,6 +16,11 @@ package com.android.settings.tests.screenshot.biometrics.fingerprint import android.content.res.Configuration import android.hardware.biometrics.ComponentInfoInternal import android.hardware.biometrics.SensorLocationInternal import android.hardware.biometrics.SensorProperties import android.hardware.fingerprint.FingerprintSensorProperties import android.hardware.fingerprint.FingerprintSensorPropertiesInternal import android.view.Surface import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider Loading @@ -39,9 +44,7 @@ import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.Fing import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerprintScrollViewModel import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.GatekeeperInfo import com.android.settings.testutils2.FakeFingerprintManagerInteractor import com.android.systemui.biometrics.shared.model.FingerprintSensor import com.android.systemui.biometrics.shared.model.FingerprintSensorType import com.android.systemui.biometrics.shared.model.SensorStrength import com.android.systemui.biometrics.shared.model.toFingerprintSensor import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow Loading @@ -56,7 +59,19 @@ import platform.test.screenshot.matchers.PixelPerfectMatcher class Injector(step: FingerprintNavigationStep.UiStep) { var enrollFlow = Default var fingerprintSensor = FingerprintSensor(1, SensorStrength.STRONG, 5, FingerprintSensorType.REAR) var fingerprintSensor = FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_REAR, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() var accessibilityInteractor = object : AccessibilityInteractor { override val isAccessibilityEnabled: Flow<Boolean> = flowOf(true) Loading
tests/shared/src/com/android/settings/testutils2/FakeFingerprintManagerInteractor.kt +19 −11 Original line number Diff line number Diff line Loading @@ -16,6 +16,11 @@ package com.android.settings.testutils2 import android.hardware.biometrics.ComponentInfoInternal import android.hardware.biometrics.SensorLocationInternal import android.hardware.biometrics.SensorProperties import android.hardware.fingerprint.FingerprintSensorProperties import android.hardware.fingerprint.FingerprintSensorPropertiesInternal import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.FingerprintManagerInteractor import com.android.settings.biometrics.fingerprint2.lib.model.EnrollReason import com.android.settings.biometrics.fingerprint2.lib.model.FingerEnrollState Loading @@ -23,7 +28,7 @@ import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintAuthAtt import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintData import com.android.systemui.biometrics.shared.model.FingerprintSensor import com.android.systemui.biometrics.shared.model.FingerprintSensorType import com.android.systemui.biometrics.shared.model.SensorStrength import com.android.systemui.biometrics.shared.model.toFingerprintSensor import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOf Loading @@ -35,16 +40,20 @@ class FakeFingerprintManagerInteractor : FingerprintManagerInteractor { var enrolledFingerprintsInternal: MutableList<FingerprintData> = mutableListOf() var challengeToGenerate: Pair<Long, ByteArray> = Pair(-1L, byteArrayOf()) var authenticateAttempt = FingerprintAuthAttemptModel.Success(1) var enrollStateViewModel: List<FingerEnrollState> = listOf(FingerEnrollState.EnrollProgress(5, 5)) var enrollStateViewModel: List<FingerEnrollState> = listOf(FingerEnrollState.EnrollProgress(5, 5)) var sensorProp = FingerprintSensor( FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorStrength.STRONG, 5, FingerprintSensorType.POWER_BUTTON SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_POWER_BUTTON, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() override suspend fun authenticate(): FingerprintAuthAttemptModel { return authenticateAttempt Loading @@ -68,7 +77,7 @@ class FakeFingerprintManagerInteractor : FingerprintManagerInteractor { override suspend fun enroll( hardwareAuthToken: ByteArray?, enrollReason: EnrollReason enrollReason: EnrollReason, ): Flow<FingerEnrollState> = flowOf(*enrollStateViewModel.toTypedArray()) override suspend fun removeFingerprint(fp: FingerprintData): Boolean { Loading @@ -84,5 +93,4 @@ class FakeFingerprintManagerInteractor : FingerprintManagerInteractor { override suspend fun hasSideFps(): Boolean { return sensorProp.sensorType == FingerprintSensorType.POWER_BUTTON } }
tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FingerprintManagerInteractorTest.kt +24 −9 Original line number Diff line number Diff line Loading @@ -18,18 +18,23 @@ package com.android.settings.fingerprint2.domain.interactor import android.content.Context import android.content.Intent import android.hardware.biometrics.ComponentInfoInternal import android.hardware.biometrics.SensorLocationInternal import android.hardware.biometrics.SensorProperties import android.hardware.fingerprint.Fingerprint import android.hardware.fingerprint.FingerprintEnrollOptions import android.hardware.fingerprint.FingerprintManager import android.hardware.fingerprint.FingerprintManager.CryptoObject import android.hardware.fingerprint.FingerprintManager.FINGERPRINT_ERROR_LOCKOUT_PERMANENT import android.hardware.fingerprint.FingerprintSensorProperties import android.hardware.fingerprint.FingerprintSensorPropertiesInternal import android.os.CancellationSignal import android.os.Handler import androidx.test.core.app.ApplicationProvider import com.android.settings.biometrics.GatekeeperPasswordProvider import com.android.settings.biometrics.fingerprint2.data.repository.FingerprintSensorRepository import com.android.settings.biometrics.fingerprint2.domain.interactor.PressToAuthInteractor import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractorImpl import com.android.settings.biometrics.fingerprint2.domain.interactor.PressToAuthInteractor import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.FingerprintManagerInteractor import com.android.settings.biometrics.fingerprint2.lib.model.Default import com.android.settings.biometrics.fingerprint2.lib.model.EnrollReason Loading @@ -38,8 +43,7 @@ import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintAuthAtt import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintData import com.android.settings.password.ChooseLockSettingsHelper import com.android.systemui.biometrics.shared.model.FingerprintSensor import com.android.systemui.biometrics.shared.model.FingerprintSensorType import com.android.systemui.biometrics.shared.model.SensorStrength import com.android.systemui.biometrics.shared.model.toFingerprintSensor import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.cancelAndJoin import kotlinx.coroutines.flow.Flow Loading Loading @@ -85,7 +89,18 @@ class FingerprintManagerInteractorTest { @Before fun setup() { val sensor = FingerprintSensor(1, SensorStrength.STRONG, 5, FingerprintSensorType.POWER_BUTTON) val sensor = FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_POWER_BUTTON, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() val fingerprintSensorRepository = object : FingerprintSensorRepository { override val fingerprintSensor: Flow<FingerprintSensor> = flowOf(sensor) Loading Loading @@ -135,7 +150,7 @@ class FingerprintManagerInteractorTest { listOf( Fingerprint("Finger 1,", 2, 3L), Fingerprint("Finger 2,", 3, 3L), Fingerprint("Finger 3,", 4, 3L) Fingerprint("Finger 3,", 4, 3L), ) val fingerprintList2: List<Fingerprint> = fingerprintList1.plus( Loading @@ -160,7 +175,7 @@ class FingerprintManagerInteractorTest { gateKeeperPasswordProvider.requestGatekeeperHat( any(Intent::class.java), anyLong(), anyInt() anyInt(), ) ) .thenReturn(byteArray) Loading Loading @@ -223,7 +238,7 @@ class FingerprintManagerInteractorTest { removalCallback.value.onRemovalError( fingerprintToRemove, 100, "Oh no, we couldn't find that one" "Oh no, we couldn't find that one", ) runCurrent() Loading Loading @@ -260,7 +275,7 @@ class FingerprintManagerInteractorTest { any(CancellationSignal::class.java), capture(authCallback), nullable(Handler::class.java), anyInt() anyInt(), ) authCallback.value.onAuthenticationSucceeded( FingerprintManager.AuthenticationResult(null, fingerprint, 1, false) Loading @@ -287,7 +302,7 @@ class FingerprintManagerInteractorTest { any(CancellationSignal::class.java), capture(authCallback), nullable(Handler::class.java), anyInt() anyInt(), ) authCallback.value.onAuthenticationError(FINGERPRINT_ERROR_LOCKOUT_PERMANENT, "Lockout!!") Loading
tests/unit/src/com/android/settings/fingerprint2/enrollment/viewmodel/FingerprintEnrollFindSensorViewModelV2Test.kt +52 −17 Original line number Diff line number Diff line Loading @@ -18,6 +18,11 @@ package com.android.settings.fingerprint2.enrollment.viewmodel import android.content.Context import android.content.res.Configuration import android.hardware.biometrics.ComponentInfoInternal import android.hardware.biometrics.SensorLocationInternal import android.hardware.biometrics.SensorProperties import android.hardware.fingerprint.FingerprintSensorProperties import android.hardware.fingerprint.FingerprintSensorPropertiesInternal import android.view.Surface import androidx.arch.core.executor.testing.InstantTaskExecutorRule import androidx.test.core.app.ApplicationProvider Loading @@ -33,9 +38,7 @@ import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.Fing import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerprintNavigationStep import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerprintNavigationViewModel import com.android.settings.testutils2.FakeFingerprintManagerInteractor import com.android.systemui.biometrics.shared.model.FingerprintSensor import com.android.systemui.biometrics.shared.model.FingerprintSensorType import com.android.systemui.biometrics.shared.model.SensorStrength import com.android.systemui.biometrics.shared.model.toFingerprintSensor import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow Loading Loading @@ -94,7 +97,19 @@ class FingerprintEnrollFindSensorViewModelV2Test { ) .create(FingerprintGatekeeperViewModel::class.java) val sensor = FingerprintSensor(1, SensorStrength.STRONG, 5, FingerprintSensorType.POWER_BUTTON) val sensor = FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_POWER_BUTTON, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() val fingerprintFlowViewModel = FingerprintFlowViewModel(Default) navigationViewModel = FingerprintNavigationViewModel( Loading Loading @@ -159,12 +174,17 @@ class FingerprintEnrollFindSensorViewModelV2Test { fun udfpsLottieInfo() = testScope.runTest { fakeFingerprintManagerInteractor.sensorProp = FingerprintSensor( FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorStrength.STRONG, 5, FingerprintSensorType.UDFPS_OPTICAL, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_UDFPS_OPTICAL, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() var udfpsLottieInfo: Boolean? = null val job = launch { underTest.udfpsLottieInfo.collect { udfpsLottieInfo = it } } Loading Loading @@ -218,7 +238,17 @@ class FingerprintEnrollFindSensorViewModelV2Test { fun rfpsAnimation() = testScope.runTest { fakeFingerprintManagerInteractor.sensorProp = FingerprintSensor(0 /* sensorId */, SensorStrength.STRONG, 5, FingerprintSensorType.REAR) FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_REAR, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() var showRfpsAnimation: Boolean? = null val job = launch { underTest.showRfpsAnimation.collect { showRfpsAnimation = it } } Loading @@ -232,12 +262,17 @@ class FingerprintEnrollFindSensorViewModelV2Test { fun showPrimaryButton_ifUdfps() = testScope.runTest { fakeFingerprintManagerInteractor.sensorProp = FingerprintSensor( FingerprintSensorPropertiesInternal( 0 /* sensorId */, SensorStrength.STRONG, 5, FingerprintSensorType.UDFPS_OPTICAL, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */, listOf<ComponentInfoInternal>(), FingerprintSensorProperties.TYPE_UDFPS_OPTICAL, false /* halControlsIllumination */, true /* resetLockoutRequiresHardwareAuthToken */, listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT), ) .toFingerprintSensor() var showPrimaryButton: Boolean? = null val job = launch { underTest.showPrimaryButton.collect { showPrimaryButton = it } } Loading