Merge "Rename BiometricRepository to BiometricSettingsRepository." into tm-qpr-dev am: e9dce6e327

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21008159

Change-Id: Iafe5b0c1821316e324f39710c21bd76bf9e66150
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Chandru S
2023-01-31 20:56:07 +00:00
committed by Automerger Merge Worker
8 changed files with 38 additions and 34 deletions

View File

@@ -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 {

View File

@@ -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(

View File

@@ -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 &&

View File

@@ -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),

View File

@@ -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),

View File

@@ -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()

View File

@@ -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)
} }
} }

View File

@@ -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()