Merge "[conflict] Merge "Rename BiometricRepository to BiometricSettingsRepository." into tm-qpr-dev am: e9dce6e327 am: 8990f8eebf"
This commit is contained in:
@@ -33,7 +33,6 @@ import com.android.systemui.dagger.qualifiers.Background
|
||||
import com.android.systemui.dagger.qualifiers.Main
|
||||
import com.android.systemui.user.data.repository.UserRepository
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.channels.awaitClose
|
||||
@@ -48,12 +47,13 @@ import kotlinx.coroutines.flow.stateIn
|
||||
import kotlinx.coroutines.flow.transformLatest
|
||||
|
||||
/**
|
||||
* Acts as source of truth for biometric features.
|
||||
* Acts as source of truth for biometric authentication related settings like enrollments, device
|
||||
* policy, etc.
|
||||
*
|
||||
* Abstracts-away data sources and their schemas so the rest of the app doesn't need to worry about
|
||||
* upstream changes.
|
||||
*/
|
||||
interface BiometricRepository {
|
||||
interface BiometricSettingsRepository {
|
||||
/** Whether any fingerprints are enrolled for the current user. */
|
||||
val isFingerprintEnrolled: StateFlow<Boolean>
|
||||
|
||||
@@ -68,9 +68,8 @@ interface BiometricRepository {
|
||||
val isFingerprintEnabledByDevicePolicy: StateFlow<Boolean>
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
@SysUISingleton
|
||||
class BiometricRepositoryImpl
|
||||
class BiometricSettingsRepositoryImpl
|
||||
@Inject
|
||||
constructor(
|
||||
context: Context,
|
||||
@@ -82,7 +81,7 @@ constructor(
|
||||
@Application scope: CoroutineScope,
|
||||
@Background backgroundDispatcher: CoroutineDispatcher,
|
||||
@Main looper: Looper,
|
||||
) : BiometricRepository {
|
||||
) : BiometricSettingsRepository {
|
||||
|
||||
/** UserId of the current selected user. */
|
||||
private val selectedUserId: Flow<Int> =
|
||||
@@ -90,7 +89,7 @@ constructor(
|
||||
|
||||
override val isFingerprintEnrolled: StateFlow<Boolean> =
|
||||
selectedUserId
|
||||
.flatMapLatest { userId ->
|
||||
.flatMapLatest {
|
||||
conflatedCallbackFlow {
|
||||
val callback =
|
||||
object : AuthController.Callback {
|
||||
@@ -31,7 +31,10 @@ interface KeyguardRepositoryModule {
|
||||
@Binds
|
||||
fun lightRevealScrimRepository(impl: LightRevealScrimRepositoryImpl): LightRevealScrimRepository
|
||||
|
||||
@Binds fun biometricRepository(impl: BiometricRepositoryImpl): BiometricRepository
|
||||
@Binds
|
||||
fun biometricSettingsRepository(
|
||||
impl: BiometricSettingsRepositoryImpl
|
||||
): BiometricSettingsRepository
|
||||
|
||||
@Binds
|
||||
fun deviceEntryFingerprintAuthRepository(
|
||||
|
||||
@@ -20,7 +20,7 @@ import com.android.keyguard.KeyguardUpdateMonitor
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.flags.Flags
|
||||
import com.android.systemui.keyguard.data.repository.BiometricRepository
|
||||
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
|
||||
import com.android.systemui.keyguard.data.repository.DeviceEntryFingerprintAuthRepository
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepository
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager.LegacyAlternateBouncer
|
||||
@@ -34,7 +34,7 @@ class AlternateBouncerInteractor
|
||||
@Inject
|
||||
constructor(
|
||||
private val bouncerRepository: KeyguardBouncerRepository,
|
||||
private val biometricRepository: BiometricRepository,
|
||||
private val biometricSettingsRepository: BiometricSettingsRepository,
|
||||
private val deviceEntryFingerprintAuthRepository: DeviceEntryFingerprintAuthRepository,
|
||||
private val systemClock: SystemClock,
|
||||
private val keyguardUpdateMonitor: KeyguardUpdateMonitor,
|
||||
@@ -99,9 +99,9 @@ constructor(
|
||||
fun canShowAlternateBouncerForFingerprint(): Boolean {
|
||||
return if (isModernAlternateBouncerEnabled) {
|
||||
bouncerRepository.isAlternateBouncerUIAvailable.value &&
|
||||
biometricRepository.isFingerprintEnrolled.value &&
|
||||
biometricRepository.isStrongBiometricAllowed.value &&
|
||||
biometricRepository.isFingerprintEnabledByDevicePolicy.value &&
|
||||
biometricSettingsRepository.isFingerprintEnrolled.value &&
|
||||
biometricSettingsRepository.isStrongBiometricAllowed.value &&
|
||||
biometricSettingsRepository.isFingerprintEnabledByDevicePolicy.value &&
|
||||
!deviceEntryFingerprintAuthRepository.isLockedOut.value
|
||||
} else {
|
||||
legacyAlternateBouncer != null &&
|
||||
|
||||
@@ -58,7 +58,7 @@ import com.android.systemui.SysuiTestableContext
|
||||
import com.android.systemui.dump.DumpManager
|
||||
import com.android.systemui.flags.FakeFeatureFlags
|
||||
import com.android.systemui.flags.Flags.MODERN_ALTERNATE_BOUNCER
|
||||
import com.android.systemui.keyguard.data.repository.FakeBiometricRepository
|
||||
import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository
|
||||
import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFingerprintAuthRepository
|
||||
import com.android.systemui.keyguard.data.repository.FakeKeyguardBouncerRepository
|
||||
import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor
|
||||
@@ -137,7 +137,7 @@ class SideFpsControllerTest : SysuiTestCase() {
|
||||
alternateBouncerInteractor =
|
||||
AlternateBouncerInteractor(
|
||||
keyguardBouncerRepository,
|
||||
FakeBiometricRepository(),
|
||||
FakeBiometricSettingsRepository(),
|
||||
FakeDeviceEntryFingerprintAuthRepository(),
|
||||
FakeSystemClock(),
|
||||
mock(KeyguardUpdateMonitor::class.java),
|
||||
|
||||
@@ -26,7 +26,7 @@ import com.android.systemui.classifier.FalsingCollector
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.keyguard.DismissCallbackRegistry
|
||||
import com.android.systemui.keyguard.data.BouncerView
|
||||
import com.android.systemui.keyguard.data.repository.BiometricRepository
|
||||
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
|
||||
import com.android.systemui.keyguard.data.repository.DeviceEntryFingerprintAuthRepository
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepository
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepositoryImpl
|
||||
@@ -92,7 +92,7 @@ class UdfpsKeyguardViewControllerWithCoroutinesTest : UdfpsKeyguardViewControlle
|
||||
mAlternateBouncerInteractor =
|
||||
AlternateBouncerInteractor(
|
||||
keyguardBouncerRepository,
|
||||
mock(BiometricRepository::class.java),
|
||||
mock(BiometricSettingsRepository::class.java),
|
||||
mock(DeviceEntryFingerprintAuthRepository::class.java),
|
||||
mock(SystemClock::class.java),
|
||||
mock(KeyguardUpdateMonitor::class.java),
|
||||
|
||||
@@ -33,7 +33,6 @@ import com.android.systemui.user.data.repository.FakeUserRepository
|
||||
import com.android.systemui.util.mockito.argumentCaptor
|
||||
import com.android.systemui.util.mockito.whenever
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.test.StandardTestDispatcher
|
||||
import kotlinx.coroutines.test.TestDispatcher
|
||||
import kotlinx.coroutines.test.TestScope
|
||||
@@ -48,12 +47,11 @@ import org.mockito.Mock
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
@SmallTest
|
||||
@TestableLooper.RunWithLooper(setAsMainLooper = true)
|
||||
@RunWith(AndroidTestingRunner::class)
|
||||
class BiometricRepositoryTest : SysuiTestCase() {
|
||||
private lateinit var underTest: BiometricRepository
|
||||
class BiometricSettingsRepositoryTest : SysuiTestCase() {
|
||||
private lateinit var underTest: BiometricSettingsRepository
|
||||
|
||||
@Mock private lateinit var authController: AuthController
|
||||
@Mock private lateinit var lockPatternUtils: LockPatternUtils
|
||||
@@ -73,11 +71,11 @@ class BiometricRepositoryTest : SysuiTestCase() {
|
||||
userRepository = FakeUserRepository()
|
||||
}
|
||||
|
||||
private suspend fun createBiometricRepository() {
|
||||
private suspend fun createBiometricSettingsRepository() {
|
||||
userRepository.setUserInfos(listOf(PRIMARY_USER))
|
||||
userRepository.setSelectedUserInfo(PRIMARY_USER)
|
||||
underTest =
|
||||
BiometricRepositoryImpl(
|
||||
BiometricSettingsRepositoryImpl(
|
||||
context = context,
|
||||
lockPatternUtils = lockPatternUtils,
|
||||
broadcastDispatcher = fakeBroadcastDispatcher,
|
||||
@@ -93,7 +91,7 @@ class BiometricRepositoryTest : SysuiTestCase() {
|
||||
@Test
|
||||
fun fingerprintEnrollmentChange() =
|
||||
testScope.runTest {
|
||||
createBiometricRepository()
|
||||
createBiometricSettingsRepository()
|
||||
val fingerprintEnabledByDevicePolicy = collectLastValue(underTest.isFingerprintEnrolled)
|
||||
runCurrent()
|
||||
|
||||
@@ -119,7 +117,7 @@ class BiometricRepositoryTest : SysuiTestCase() {
|
||||
@Test
|
||||
fun strongBiometricAllowedChange() =
|
||||
testScope.runTest {
|
||||
createBiometricRepository()
|
||||
createBiometricSettingsRepository()
|
||||
val strongBiometricAllowed = collectLastValue(underTest.isStrongBiometricAllowed)
|
||||
runCurrent()
|
||||
|
||||
@@ -142,7 +140,7 @@ class BiometricRepositoryTest : SysuiTestCase() {
|
||||
@Test
|
||||
fun fingerprintDisabledByDpmChange() =
|
||||
testScope.runTest {
|
||||
createBiometricRepository()
|
||||
createBiometricSettingsRepository()
|
||||
val fingerprintEnabledByDevicePolicy =
|
||||
collectLastValue(underTest.isFingerprintEnabledByDevicePolicy)
|
||||
runCurrent()
|
||||
@@ -22,7 +22,7 @@ import com.android.keyguard.ViewMediatorCallback
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.flags.FakeFeatureFlags
|
||||
import com.android.systemui.flags.Flags
|
||||
import com.android.systemui.keyguard.data.repository.FakeBiometricRepository
|
||||
import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository
|
||||
import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFingerprintAuthRepository
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepository
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepositoryImpl
|
||||
@@ -47,7 +47,7 @@ import org.mockito.MockitoAnnotations
|
||||
class AlternateBouncerInteractorTest : SysuiTestCase() {
|
||||
private lateinit var underTest: AlternateBouncerInteractor
|
||||
private lateinit var bouncerRepository: KeyguardBouncerRepository
|
||||
private lateinit var biometricRepository: FakeBiometricRepository
|
||||
private lateinit var biometricSettingsRepository: FakeBiometricSettingsRepository
|
||||
private lateinit var deviceEntryFingerprintAuthRepository:
|
||||
FakeDeviceEntryFingerprintAuthRepository
|
||||
@Mock private lateinit var systemClock: SystemClock
|
||||
@@ -65,13 +65,13 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
|
||||
TestCoroutineScope(),
|
||||
bouncerLogger,
|
||||
)
|
||||
biometricRepository = FakeBiometricRepository()
|
||||
biometricSettingsRepository = FakeBiometricSettingsRepository()
|
||||
deviceEntryFingerprintAuthRepository = FakeDeviceEntryFingerprintAuthRepository()
|
||||
featureFlags = FakeFeatureFlags().apply { this.set(Flags.MODERN_ALTERNATE_BOUNCER, true) }
|
||||
underTest =
|
||||
AlternateBouncerInteractor(
|
||||
bouncerRepository,
|
||||
biometricRepository,
|
||||
biometricSettingsRepository,
|
||||
deviceEntryFingerprintAuthRepository,
|
||||
systemClock,
|
||||
keyguardUpdateMonitor,
|
||||
@@ -96,7 +96,7 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
|
||||
@Test
|
||||
fun canShowAlternateBouncerForFingerprint_noFingerprintsEnrolled() {
|
||||
givenCanShowAlternateBouncer()
|
||||
biometricRepository.setFingerprintEnrolled(false)
|
||||
biometricSettingsRepository.setFingerprintEnrolled(false)
|
||||
|
||||
assertFalse(underTest.canShowAlternateBouncerForFingerprint())
|
||||
}
|
||||
@@ -104,7 +104,7 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
|
||||
@Test
|
||||
fun canShowAlternateBouncerForFingerprint_strongBiometricNotAllowed() {
|
||||
givenCanShowAlternateBouncer()
|
||||
biometricRepository.setStrongBiometricAllowed(false)
|
||||
biometricSettingsRepository.setStrongBiometricAllowed(false)
|
||||
|
||||
assertFalse(underTest.canShowAlternateBouncerForFingerprint())
|
||||
}
|
||||
@@ -112,7 +112,7 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
|
||||
@Test
|
||||
fun canShowAlternateBouncerForFingerprint_devicePolicyDoesNotAllowFingerprint() {
|
||||
givenCanShowAlternateBouncer()
|
||||
biometricRepository.setFingerprintEnabledByDevicePolicy(false)
|
||||
biometricSettingsRepository.setFingerprintEnabledByDevicePolicy(false)
|
||||
|
||||
assertFalse(underTest.canShowAlternateBouncerForFingerprint())
|
||||
}
|
||||
@@ -159,13 +159,13 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
|
||||
|
||||
private fun givenCanShowAlternateBouncer() {
|
||||
bouncerRepository.setAlternateBouncerUIAvailable(true)
|
||||
biometricRepository.setFingerprintEnrolled(true)
|
||||
biometricRepository.setStrongBiometricAllowed(true)
|
||||
biometricRepository.setFingerprintEnabledByDevicePolicy(true)
|
||||
biometricSettingsRepository.setFingerprintEnrolled(true)
|
||||
biometricSettingsRepository.setStrongBiometricAllowed(true)
|
||||
biometricSettingsRepository.setFingerprintEnabledByDevicePolicy(true)
|
||||
deviceEntryFingerprintAuthRepository.setLockedOut(false)
|
||||
}
|
||||
|
||||
private fun givenCannotShowAlternateBouncer() {
|
||||
biometricRepository.setFingerprintEnrolled(false)
|
||||
biometricSettingsRepository.setFingerprintEnrolled(false)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
|
||||
class FakeBiometricRepository : BiometricRepository {
|
||||
class FakeBiometricSettingsRepository : BiometricSettingsRepository {
|
||||
|
||||
private val _isFingerprintEnrolled = MutableStateFlow<Boolean>(false)
|
||||
override val isFingerprintEnrolled: StateFlow<Boolean> = _isFingerprintEnrolled.asStateFlow()
|
||||
Reference in New Issue
Block a user