diff --git a/src/com/android/settings/biometrics/fingerprint2/BiometricsEnvironment.kt b/src/com/android/settings/biometrics/fingerprint2/BiometricsEnvironment.kt index 030aadb2ea5..790b14af743 100644 --- a/src/com/android/settings/biometrics/fingerprint2/BiometricsEnvironment.kt +++ b/src/com/android/settings/biometrics/fingerprint2/BiometricsEnvironment.kt @@ -122,24 +122,24 @@ class BiometricsEnvironment( FingerprintEnrollStageThresholdInteractor(fingerprintEnrollmentRepository) fun createGenerateChallengeInteractor(): GenerateChallengeInteractor = - GenerateChallengeInteractorImpl(fingerprintManager, context.userId, gateKeeperPasswordProvider) + GenerateChallengeInteractorImpl(fingerprintManager, userRepo, gateKeeperPasswordProvider) fun createFingerprintEnrollInteractor(): EnrollFingerprintInteractor = - EnrollFingerprintInteractorImpl(context.userId, fingerprintManager, Settings) + EnrollFingerprintInteractorImpl(userRepo, fingerprintManager, Settings) fun createFingerprintsEnrolledInteractor(): EnrolledFingerprintsInteractorImpl = EnrolledFingerprintsInteractorImpl(fingerprintEnrollmentRepository) fun createAuthenticateInteractor(): AuthenitcateInteractor = - AuthenticateInteractorImpl(fingerprintManager, context.userId) + AuthenticateInteractorImpl(fingerprintManager, userRepo) fun createUserInteractor(): UserInteractor = UserInteractorImpl(userRepo) fun createRemoveFingerprintInteractor(): RemoveFingerprintInteractor = - RemoveFingerprintsInteractorImpl(fingerprintManager, context.userId) + RemoveFingerprintsInteractorImpl(fingerprintManager, userRepo) fun createRenameFingerprintInteractor(): RenameFingerprintInteractor = - RenameFingerprintsInteractorImpl(fingerprintManager, context.userId, backgroundDispatcher) + RenameFingerprintsInteractorImpl(fingerprintManager, userRepo, backgroundDispatcher) fun createAccessibilityInteractor(): AccessibilityInteractor { return AccessibilityInteractorImpl(context.getSystemService(AccessibilityManager::class.java)!!) diff --git a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/AuthenticateInteractorImpl.kt b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/AuthenticateInteractorImpl.kt index df93092619f..8640177f0e2 100644 --- a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/AuthenticateInteractorImpl.kt +++ b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/AuthenticateInteractorImpl.kt @@ -19,19 +19,22 @@ package com.android.settings.biometrics.fingerprint2.domain.interactor import android.hardware.fingerprint.FingerprintManager import android.os.CancellationSignal 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.model.FingerprintAuthAttemptModel import kotlin.coroutines.resume import kotlinx.coroutines.CancellableContinuation +import kotlinx.coroutines.flow.first import kotlinx.coroutines.suspendCancellableCoroutine class AuthenticateInteractorImpl( private val fingerprintManager: FingerprintManager, - private val userId: Int, + private val userRepo: UserRepo, ) : AuthenitcateInteractor { - override suspend fun authenticate(): FingerprintAuthAttemptModel = - suspendCancellableCoroutine { c: CancellableContinuation -> + override suspend fun authenticate(): FingerprintAuthAttemptModel { + val userId = userRepo.currentUser.first() + return suspendCancellableCoroutine { c: CancellableContinuation -> val authenticationCallback = object : FingerprintManager.AuthenticationCallback() { @@ -64,6 +67,7 @@ class AuthenticateInteractorImpl( userId, ) } + } companion object { private const val TAG = "AuthenticateInteractor" diff --git a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/EnrollFingerprintInteractorImpl.kt b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/EnrollFingerprintInteractorImpl.kt index 3e14a640278..2c1cacab992 100644 --- a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/EnrollFingerprintInteractorImpl.kt +++ b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/EnrollFingerprintInteractorImpl.kt @@ -22,6 +22,7 @@ import android.os.CancellationSignal import android.util.Log import com.android.settings.biometrics.fingerprint2.conversion.Util.toEnrollError 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.model.EnrollReason 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.MutableStateFlow import kotlinx.coroutines.flow.callbackFlow +import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.update class EnrollFingerprintInteractorImpl( - private val userId: Int, + private val userRepo: UserRepo, private val fingerprintManager: FingerprintManager, private val fingerprintFlow: FingerprintFlow, ) : EnrollFingerprintInteractor { @@ -47,6 +49,7 @@ class EnrollFingerprintInteractorImpl( enrollReason: EnrollReason, fingerprintEnrollOptions: FingerprintEnrollOptions, ): Flow = callbackFlow { + val userId = userRepo.currentUser.first() // TODO (b/308456120) Improve this logic if (enrollRequestOutstanding.value) { Log.d(TAG, "Outstanding enroll request, waiting 150ms") diff --git a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/GenerateChallengeInteractorImpl.kt b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/GenerateChallengeInteractorImpl.kt index a2080fbb74f..365e644afdf 100644 --- a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/GenerateChallengeInteractorImpl.kt +++ b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/GenerateChallengeInteractorImpl.kt @@ -19,19 +19,22 @@ package com.android.settings.biometrics.fingerprint2.domain.interactor import android.content.Intent import android.hardware.fingerprint.FingerprintManager 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.password.ChooseLockSettingsHelper +import kotlinx.coroutines.flow.first import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine class GenerateChallengeInteractorImpl( private val fingerprintManager: FingerprintManager, - private val userId: Int, + private val userRepo: UserRepo, private val gatekeeperPasswordProvider: GatekeeperPasswordProvider, ) : GenerateChallengeInteractor { - override suspend fun generateChallenge(gateKeeperPasswordHandle: Long): Pair = - suspendCoroutine { + override suspend fun generateChallenge(gateKeeperPasswordHandle: Long): Pair { + val userId = userRepo.currentUser.first() + return suspendCoroutine { val callback = FingerprintManager.GenerateChallengeCallback { _, userId, challenge -> val intent = Intent() @@ -45,4 +48,5 @@ class GenerateChallengeInteractorImpl( } fingerprintManager.generateChallenge(userId, callback) } + } } diff --git a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/RemoveFingerprintsInteractorImpl.kt b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/RemoveFingerprintsInteractorImpl.kt index 4232963ad55..cb33ff412aa 100644 --- a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/RemoveFingerprintsInteractorImpl.kt +++ b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/RemoveFingerprintsInteractorImpl.kt @@ -18,38 +18,43 @@ package com.android.settings.biometrics.fingerprint2.domain.interactor import android.hardware.fingerprint.FingerprintManager 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.model.FingerprintData +import kotlinx.coroutines.flow.first import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine class RemoveFingerprintsInteractorImpl( private val fingerprintManager: FingerprintManager, - private val userId: Int, + private val userRepo: UserRepo, ) : RemoveFingerprintInteractor { - override suspend fun removeFingerprint(fp: FingerprintData): Boolean = suspendCoroutine { - val callback = - object : RemovalCallback() { - override fun onRemovalError( - fp: android.hardware.fingerprint.Fingerprint, - errMsgId: Int, - errString: CharSequence, - ) { - it.resume(false) - } + override suspend fun removeFingerprint(fp: FingerprintData): Boolean { + val userId = userRepo.currentUser.first() + return suspendCoroutine { + val callback = + object : RemovalCallback() { + override fun onRemovalError( + fp: android.hardware.fingerprint.Fingerprint, + errMsgId: Int, + errString: CharSequence, + ) { + it.resume(false) + } - override fun onRemovalSucceeded( - fp: android.hardware.fingerprint.Fingerprint?, - remaining: Int, - ) { - it.resume(true) + override fun onRemovalSucceeded( + fp: android.hardware.fingerprint.Fingerprint?, + remaining: Int, + ) { + it.resume(true) + } } - } - fingerprintManager.remove( - android.hardware.fingerprint.Fingerprint(fp.name, fp.fingerId, fp.deviceId), - userId, - callback, - ) + fingerprintManager.remove( + android.hardware.fingerprint.Fingerprint(fp.name, fp.fingerId, fp.deviceId), + userId, + callback, + ) + } } } diff --git a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/RenameFingerprintsInteractorImpl.kt b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/RenameFingerprintsInteractorImpl.kt index f238e7c4f2e..5ab702afb9a 100644 --- a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/RenameFingerprintsInteractorImpl.kt +++ b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/RenameFingerprintsInteractorImpl.kt @@ -17,18 +17,21 @@ package com.android.settings.biometrics.fingerprint2.domain.interactor 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.model.FingerprintData import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.flow.first import kotlinx.coroutines.withContext class RenameFingerprintsInteractorImpl( private val fingerprintManager: FingerprintManager, - private val userId: Int, + private val userRepo: UserRepo, private val backgroundDispatcher: CoroutineDispatcher, ) : RenameFingerprintInteractor { override suspend fun renameFingerprint(fp: FingerprintData, newName: String) { + val userId = userRepo.currentUser.first() withContext(backgroundDispatcher) { fingerprintManager.rename(fp.fingerId, userId, newName) } } } diff --git a/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FingerprintManagerInteractorTest.kt b/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FingerprintManagerInteractorTest.kt index 2623206cddd..f479fa31784 100644 --- a/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FingerprintManagerInteractorTest.kt +++ b/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FingerprintManagerInteractorTest.kt @@ -152,17 +152,17 @@ class FingerprintManagerInteractorTest { enrolledFingerprintsInteractorUnderTest = EnrolledFingerprintsInteractorImpl(fingerprintEnrollRepo) generateChallengeInteractorUnderTest = - GenerateChallengeInteractorImpl(fingerprintManager, userId, gateKeeperPasswordProvider) + GenerateChallengeInteractorImpl(fingerprintManager, userRepo, gateKeeperPasswordProvider) removeFingerprintsInteractorUnderTest = - RemoveFingerprintsInteractorImpl(fingerprintManager, userId) + RemoveFingerprintsInteractorImpl(fingerprintManager, userRepo) renameFingerprintsInteractorUnderTest = - RenameFingerprintsInteractorImpl(fingerprintManager, userId, backgroundDispatcher) - authenticateInteractorImplUnderTest = AuthenticateInteractorImpl(fingerprintManager, userId) + RenameFingerprintsInteractorImpl(fingerprintManager, userRepo, backgroundDispatcher) + authenticateInteractorImplUnderTest = AuthenticateInteractorImpl(fingerprintManager, userRepo) canEnrollFingerprintsInteractorUnderTest = CanEnrollFingerprintsInteractorImpl(fingerprintEnrollRepo) - enrollInteractorUnderTest = EnrollFingerprintInteractorImpl(userId, fingerprintManager, flow) + enrollInteractorUnderTest = EnrollFingerprintInteractorImpl(userRepo, fingerprintManager, flow) } @Test