Updated interactors to use repos

Test: Verified flows still work as expected
Flag: EXEMPT bugfix
Bug: 379113250
Change-Id: I548b98f9e9121e7c0b4e613559817895c33af989
This commit is contained in:
Joshua McCloskey
2024-10-15 03:33:57 +00:00
parent 453aa677e6
commit eb13449593
7 changed files with 59 additions and 40 deletions

View File

@@ -122,24 +122,24 @@ class BiometricsEnvironment(
FingerprintEnrollStageThresholdInteractor(fingerprintEnrollmentRepository) FingerprintEnrollStageThresholdInteractor(fingerprintEnrollmentRepository)
fun createGenerateChallengeInteractor(): GenerateChallengeInteractor = fun createGenerateChallengeInteractor(): GenerateChallengeInteractor =
GenerateChallengeInteractorImpl(fingerprintManager, context.userId, gateKeeperPasswordProvider) GenerateChallengeInteractorImpl(fingerprintManager, userRepo, gateKeeperPasswordProvider)
fun createFingerprintEnrollInteractor(): EnrollFingerprintInteractor = fun createFingerprintEnrollInteractor(): EnrollFingerprintInteractor =
EnrollFingerprintInteractorImpl(context.userId, fingerprintManager, Settings) EnrollFingerprintInteractorImpl(userRepo, fingerprintManager, Settings)
fun createFingerprintsEnrolledInteractor(): EnrolledFingerprintsInteractorImpl = fun createFingerprintsEnrolledInteractor(): EnrolledFingerprintsInteractorImpl =
EnrolledFingerprintsInteractorImpl(fingerprintEnrollmentRepository) EnrolledFingerprintsInteractorImpl(fingerprintEnrollmentRepository)
fun createAuthenticateInteractor(): AuthenitcateInteractor = fun createAuthenticateInteractor(): AuthenitcateInteractor =
AuthenticateInteractorImpl(fingerprintManager, context.userId) AuthenticateInteractorImpl(fingerprintManager, userRepo)
fun createUserInteractor(): UserInteractor = UserInteractorImpl(userRepo) fun createUserInteractor(): UserInteractor = UserInteractorImpl(userRepo)
fun createRemoveFingerprintInteractor(): RemoveFingerprintInteractor = fun createRemoveFingerprintInteractor(): RemoveFingerprintInteractor =
RemoveFingerprintsInteractorImpl(fingerprintManager, context.userId) RemoveFingerprintsInteractorImpl(fingerprintManager, userRepo)
fun createRenameFingerprintInteractor(): RenameFingerprintInteractor = fun createRenameFingerprintInteractor(): RenameFingerprintInteractor =
RenameFingerprintsInteractorImpl(fingerprintManager, context.userId, backgroundDispatcher) RenameFingerprintsInteractorImpl(fingerprintManager, userRepo, backgroundDispatcher)
fun createAccessibilityInteractor(): AccessibilityInteractor { fun createAccessibilityInteractor(): AccessibilityInteractor {
return AccessibilityInteractorImpl(context.getSystemService(AccessibilityManager::class.java)!!) return AccessibilityInteractorImpl(context.getSystemService(AccessibilityManager::class.java)!!)

View File

@@ -19,19 +19,22 @@ package com.android.settings.biometrics.fingerprint2.domain.interactor
import android.hardware.fingerprint.FingerprintManager import android.hardware.fingerprint.FingerprintManager
import android.os.CancellationSignal import android.os.CancellationSignal
import android.util.Log import android.util.Log
import com.android.settings.biometrics.fingerprint2.data.repository.UserRepo
import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.AuthenitcateInteractor import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.AuthenitcateInteractor
import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintAuthAttemptModel import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintAuthAttemptModel
import kotlin.coroutines.resume import kotlin.coroutines.resume
import kotlinx.coroutines.CancellableContinuation import kotlinx.coroutines.CancellableContinuation
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.suspendCancellableCoroutine
class AuthenticateInteractorImpl( class AuthenticateInteractorImpl(
private val fingerprintManager: FingerprintManager, private val fingerprintManager: FingerprintManager,
private val userId: Int, private val userRepo: UserRepo,
) : AuthenitcateInteractor { ) : AuthenitcateInteractor {
override suspend fun authenticate(): FingerprintAuthAttemptModel = override suspend fun authenticate(): FingerprintAuthAttemptModel {
suspendCancellableCoroutine { c: CancellableContinuation<FingerprintAuthAttemptModel> -> val userId = userRepo.currentUser.first()
return suspendCancellableCoroutine { c: CancellableContinuation<FingerprintAuthAttemptModel> ->
val authenticationCallback = val authenticationCallback =
object : FingerprintManager.AuthenticationCallback() { object : FingerprintManager.AuthenticationCallback() {
@@ -64,6 +67,7 @@ class AuthenticateInteractorImpl(
userId, userId,
) )
} }
}
companion object { companion object {
private const val TAG = "AuthenticateInteractor" private const val TAG = "AuthenticateInteractor"

View File

@@ -22,6 +22,7 @@ import android.os.CancellationSignal
import android.util.Log import android.util.Log
import com.android.settings.biometrics.fingerprint2.conversion.Util.toEnrollError import com.android.settings.biometrics.fingerprint2.conversion.Util.toEnrollError
import com.android.settings.biometrics.fingerprint2.conversion.Util.toOriginalReason import com.android.settings.biometrics.fingerprint2.conversion.Util.toOriginalReason
import com.android.settings.biometrics.fingerprint2.data.repository.UserRepo
import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.EnrollFingerprintInteractor import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.EnrollFingerprintInteractor
import com.android.settings.biometrics.fingerprint2.lib.model.EnrollReason import com.android.settings.biometrics.fingerprint2.lib.model.EnrollReason
import com.android.settings.biometrics.fingerprint2.lib.model.FingerEnrollState import com.android.settings.biometrics.fingerprint2.lib.model.FingerEnrollState
@@ -33,10 +34,11 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
class EnrollFingerprintInteractorImpl( class EnrollFingerprintInteractorImpl(
private val userId: Int, private val userRepo: UserRepo,
private val fingerprintManager: FingerprintManager, private val fingerprintManager: FingerprintManager,
private val fingerprintFlow: FingerprintFlow, private val fingerprintFlow: FingerprintFlow,
) : EnrollFingerprintInteractor { ) : EnrollFingerprintInteractor {
@@ -47,6 +49,7 @@ class EnrollFingerprintInteractorImpl(
enrollReason: EnrollReason, enrollReason: EnrollReason,
fingerprintEnrollOptions: FingerprintEnrollOptions, fingerprintEnrollOptions: FingerprintEnrollOptions,
): Flow<FingerEnrollState> = callbackFlow { ): Flow<FingerEnrollState> = callbackFlow {
val userId = userRepo.currentUser.first()
// TODO (b/308456120) Improve this logic // TODO (b/308456120) Improve this logic
if (enrollRequestOutstanding.value) { if (enrollRequestOutstanding.value) {
Log.d(TAG, "Outstanding enroll request, waiting 150ms") Log.d(TAG, "Outstanding enroll request, waiting 150ms")

View File

@@ -19,19 +19,22 @@ package com.android.settings.biometrics.fingerprint2.domain.interactor
import android.content.Intent import android.content.Intent
import android.hardware.fingerprint.FingerprintManager import android.hardware.fingerprint.FingerprintManager
import com.android.settings.biometrics.GatekeeperPasswordProvider import com.android.settings.biometrics.GatekeeperPasswordProvider
import com.android.settings.biometrics.fingerprint2.data.repository.UserRepo
import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.GenerateChallengeInteractor import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.GenerateChallengeInteractor
import com.android.settings.password.ChooseLockSettingsHelper import com.android.settings.password.ChooseLockSettingsHelper
import kotlinx.coroutines.flow.first
import kotlin.coroutines.resume import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine import kotlin.coroutines.suspendCoroutine
class GenerateChallengeInteractorImpl( class GenerateChallengeInteractorImpl(
private val fingerprintManager: FingerprintManager, private val fingerprintManager: FingerprintManager,
private val userId: Int, private val userRepo: UserRepo,
private val gatekeeperPasswordProvider: GatekeeperPasswordProvider, private val gatekeeperPasswordProvider: GatekeeperPasswordProvider,
) : GenerateChallengeInteractor { ) : GenerateChallengeInteractor {
override suspend fun generateChallenge(gateKeeperPasswordHandle: Long): Pair<Long, ByteArray> = override suspend fun generateChallenge(gateKeeperPasswordHandle: Long): Pair<Long, ByteArray> {
suspendCoroutine { val userId = userRepo.currentUser.first()
return suspendCoroutine {
val callback = val callback =
FingerprintManager.GenerateChallengeCallback { _, userId, challenge -> FingerprintManager.GenerateChallengeCallback { _, userId, challenge ->
val intent = Intent() val intent = Intent()
@@ -46,3 +49,4 @@ class GenerateChallengeInteractorImpl(
fingerprintManager.generateChallenge(userId, callback) fingerprintManager.generateChallenge(userId, callback)
} }
} }
}

View File

@@ -18,17 +18,21 @@ package com.android.settings.biometrics.fingerprint2.domain.interactor
import android.hardware.fingerprint.FingerprintManager import android.hardware.fingerprint.FingerprintManager
import android.hardware.fingerprint.FingerprintManager.RemovalCallback import android.hardware.fingerprint.FingerprintManager.RemovalCallback
import com.android.settings.biometrics.fingerprint2.data.repository.UserRepo
import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.RemoveFingerprintInteractor import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.RemoveFingerprintInteractor
import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintData import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintData
import kotlinx.coroutines.flow.first
import kotlin.coroutines.resume import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine import kotlin.coroutines.suspendCoroutine
class RemoveFingerprintsInteractorImpl( class RemoveFingerprintsInteractorImpl(
private val fingerprintManager: FingerprintManager, private val fingerprintManager: FingerprintManager,
private val userId: Int, private val userRepo: UserRepo,
) : RemoveFingerprintInteractor { ) : RemoveFingerprintInteractor {
override suspend fun removeFingerprint(fp: FingerprintData): Boolean = suspendCoroutine { override suspend fun removeFingerprint(fp: FingerprintData): Boolean {
val userId = userRepo.currentUser.first()
return suspendCoroutine {
val callback = val callback =
object : RemovalCallback() { object : RemovalCallback() {
override fun onRemovalError( override fun onRemovalError(
@@ -53,3 +57,4 @@ class RemoveFingerprintsInteractorImpl(
) )
} }
} }
}

View File

@@ -17,18 +17,21 @@
package com.android.settings.biometrics.fingerprint2.domain.interactor package com.android.settings.biometrics.fingerprint2.domain.interactor
import android.hardware.fingerprint.FingerprintManager import android.hardware.fingerprint.FingerprintManager
import com.android.settings.biometrics.fingerprint2.data.repository.UserRepo
import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.RenameFingerprintInteractor import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.RenameFingerprintInteractor
import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintData import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintData
import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
class RenameFingerprintsInteractorImpl( class RenameFingerprintsInteractorImpl(
private val fingerprintManager: FingerprintManager, private val fingerprintManager: FingerprintManager,
private val userId: Int, private val userRepo: UserRepo,
private val backgroundDispatcher: CoroutineDispatcher, private val backgroundDispatcher: CoroutineDispatcher,
) : RenameFingerprintInteractor { ) : RenameFingerprintInteractor {
override suspend fun renameFingerprint(fp: FingerprintData, newName: String) { override suspend fun renameFingerprint(fp: FingerprintData, newName: String) {
val userId = userRepo.currentUser.first()
withContext(backgroundDispatcher) { fingerprintManager.rename(fp.fingerId, userId, newName) } withContext(backgroundDispatcher) { fingerprintManager.rename(fp.fingerId, userId, newName) }
} }
} }

View File

@@ -152,17 +152,17 @@ class FingerprintManagerInteractorTest {
enrolledFingerprintsInteractorUnderTest = enrolledFingerprintsInteractorUnderTest =
EnrolledFingerprintsInteractorImpl(fingerprintEnrollRepo) EnrolledFingerprintsInteractorImpl(fingerprintEnrollRepo)
generateChallengeInteractorUnderTest = generateChallengeInteractorUnderTest =
GenerateChallengeInteractorImpl(fingerprintManager, userId, gateKeeperPasswordProvider) GenerateChallengeInteractorImpl(fingerprintManager, userRepo, gateKeeperPasswordProvider)
removeFingerprintsInteractorUnderTest = removeFingerprintsInteractorUnderTest =
RemoveFingerprintsInteractorImpl(fingerprintManager, userId) RemoveFingerprintsInteractorImpl(fingerprintManager, userRepo)
renameFingerprintsInteractorUnderTest = renameFingerprintsInteractorUnderTest =
RenameFingerprintsInteractorImpl(fingerprintManager, userId, backgroundDispatcher) RenameFingerprintsInteractorImpl(fingerprintManager, userRepo, backgroundDispatcher)
authenticateInteractorImplUnderTest = AuthenticateInteractorImpl(fingerprintManager, userId) authenticateInteractorImplUnderTest = AuthenticateInteractorImpl(fingerprintManager, userRepo)
canEnrollFingerprintsInteractorUnderTest = canEnrollFingerprintsInteractorUnderTest =
CanEnrollFingerprintsInteractorImpl(fingerprintEnrollRepo) CanEnrollFingerprintsInteractorImpl(fingerprintEnrollRepo)
enrollInteractorUnderTest = EnrollFingerprintInteractorImpl(userId, fingerprintManager, flow) enrollInteractorUnderTest = EnrollFingerprintInteractorImpl(userRepo, fingerprintManager, flow)
} }
@Test @Test