summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepositoryTest.kt46
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepository.kt3
2 files changed, 48 insertions, 1 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepositoryTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepositoryTest.kt
index 4e8a2a349283..49d324b27bb1 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepositoryTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepositoryTest.kt
@@ -79,6 +79,7 @@ import org.mockito.Mockito.clearInvocations
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
+import org.mockito.kotlin.doAnswer
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.stub
@@ -473,6 +474,51 @@ class BiometricSettingsRepositoryTest : SysuiTestCase() {
}
@Test
+ @EnableFlags(com.android.settings.flags.Flags.FLAG_BIOMETRICS_ONBOARDING_EDUCATION)
+ fun registerEnabledOnKeyguardCallback_multipleUsers_shouldSendAllUpdates() =
+ testScope.runTest {
+
+ // Simulate call to register callback when in multiple users setup
+ biometricManager.stub {
+ on { registerEnabledOnKeyguardCallback(any()) } doAnswer
+ { invocation ->
+ val callback =
+ invocation.arguments[0] as IBiometricEnabledOnKeyguardCallback
+ callback.onChanged(true, PRIMARY_USER_ID, TYPE_FACE)
+ callback.onChanged(true, PRIMARY_USER_ID, TYPE_FINGERPRINT)
+ callback.onChanged(true, ANOTHER_USER_ID, TYPE_FACE)
+ callback.onChanged(true, ANOTHER_USER_ID, TYPE_FINGERPRINT)
+ }
+ }
+ authController.stub {
+ on { isFingerprintEnrolled(anyInt()) } doReturn true
+ on { isFaceAuthEnrolled(anyInt()) } doReturn true
+ }
+
+ // Check primary user status
+ createBiometricSettingsRepository()
+ var fingerprintAllowed = collectLastValue(underTest.isFingerprintEnrolledAndEnabled)
+ var faceAllowed = collectLastValue(underTest.isFaceAuthEnrolledAndEnabled)
+ runCurrent()
+
+ enrollmentChange(UNDER_DISPLAY_FINGERPRINT, PRIMARY_USER_ID, true)
+ enrollmentChange(FACE, PRIMARY_USER_ID, true)
+ assertThat(fingerprintAllowed()).isTrue()
+ assertThat(faceAllowed()).isTrue()
+
+ // Check secondary user status
+ userRepository.setSelectedUserInfo(ANOTHER_USER)
+ fingerprintAllowed = collectLastValue(underTest.isFingerprintEnrolledAndEnabled)
+ faceAllowed = collectLastValue(underTest.isFaceAuthEnrolledAndEnabled)
+ runCurrent()
+
+ enrollmentChange(UNDER_DISPLAY_FINGERPRINT, ANOTHER_USER_ID, true)
+ enrollmentChange(FACE, ANOTHER_USER_ID, true)
+ assertThat(fingerprintAllowed()).isTrue()
+ assertThat(faceAllowed()).isTrue()
+ }
+
+ @Test
fun devicePolicyControlsFaceAuthenticationEnabledState() =
testScope.runTest {
faceAuthIsEnrolled()
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepository.kt
index dd2bec143292..0f5f31302670 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepository.kt
@@ -55,6 +55,7 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
@@ -289,7 +290,7 @@ constructor(
}
private val areBiometricsEnabledForDeviceEntryFromUserSetting: Flow<Triple<Int, Boolean, Int>> =
- conflatedCallbackFlow {
+ callbackFlow {
val callback =
object : IBiometricEnabledOnKeyguardCallback.Stub() {
override fun onChanged(enabled: Boolean, userId: Int, modality: Int) {