Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d152502a authored by Joshua Mccloskey's avatar Joshua Mccloskey Committed by Android (Google) Code Review
Browse files

Merge "Updated FakeFingerprintManagerInteractor" into main

parents f5355752 fb8069ae
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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)
+19 −4
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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)
+19 −11
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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
@@ -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 {
@@ -84,5 +93,4 @@ class FakeFingerprintManagerInteractor : FingerprintManagerInteractor {
  override suspend fun hasSideFps(): Boolean {
    return sensorProp.sensorType == FingerprintSensorType.POWER_BUTTON
  }

}
+24 −9
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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)
@@ -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(
@@ -160,7 +175,7 @@ class FingerprintManagerInteractorTest {
          gateKeeperPasswordProvider.requestGatekeeperHat(
            any(Intent::class.java),
            anyLong(),
            anyInt()
            anyInt(),
          )
        )
        .thenReturn(byteArray)
@@ -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()
@@ -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)
@@ -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!!")

+52 −17
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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(
@@ -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 } }
@@ -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 } }
@@ -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