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