diff options
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) { |