diff options
3 files changed, 27 insertions, 20 deletions
| diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PromptIconViewBinder.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PromptIconViewBinder.kt index 3469cfa210ba..e457601a6d52 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PromptIconViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PromptIconViewBinder.kt @@ -86,7 +86,12 @@ object PromptIconViewBinder {                  launch {                      var width = 0                      var height = 0 -                    viewModel.activeAuthType.collect { activeAuthType -> +                    combine(promptViewModel.size, viewModel.activeAuthType, ::Pair).collect { +                        (_, activeAuthType) -> +                        // Every time after bp shows, [isIconViewLoaded] is set to false in +                        // [BiometricViewSizeBinder]. Then when biometric prompt view is redrew +                        // (when size or activeAuthType changes), we need to update +                        // [isIconViewLoaded] here to keep it correct.                          when (activeAuthType) {                              AuthType.Fingerprint,                              AuthType.Coex -> { diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt index 61aeffe03b5d..36c7b44d2732 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt @@ -217,18 +217,12 @@ constructor(       */      val faceMode: Flow<Boolean> =          combine(modalities, isConfirmationRequired, fingerprintStartMode) { -                modalities: BiometricModalities, -                isConfirmationRequired: Boolean, -                fingerprintStartMode: FingerprintStartMode -> -                if (modalities.hasFaceAndFingerprint) { -                    if (isConfirmationRequired) { -                        false -                    } else { -                        !fingerprintStartMode.isStarted -                    } -                } else { -                    false -                } +                modalities, +                isConfirmationRequired, +                fingerprintStartMode -> +                modalities.hasFaceAndFingerprint && +                    !isConfirmationRequired && +                    fingerprintStartMode == FingerprintStartMode.Pending              }              .distinctUntilChanged() @@ -248,14 +242,11 @@ constructor(       * asset to be loaded before determining the prompt size.       */      val isIconViewLoaded: Flow<Boolean> = -        combine(credentialKind, _isIconViewLoaded.asStateFlow()) { credentialKind, isIconViewLoaded -            -> -            if (credentialKind is PromptKind.Biometric) { -                isIconViewLoaded -            } else { -                true +        combine(modalities, _isIconViewLoaded.asStateFlow()) { modalities, isIconViewLoaded -> +                val noIcon = modalities.isEmpty +                noIcon || isIconViewLoaded              } -        } +            .distinctUntilChanged()      // Sets whether the prompt's iconView animation has been loaded in the view yet.      fun setIsIconViewLoaded(iconViewLoaded: Boolean) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt index 140849b8e257..2f3bab4458e0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt @@ -1328,6 +1328,17 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa              assertThat(logoDescription).isEqualTo(logoDescriptionFromApp)          } +    @Test +    fun iconViewLoaded() = runGenericTest { +        val isIconViewLoaded by collectLastValue(viewModel.isIconViewLoaded) +        // TODO(b/328677869): Add test for noIcon logic. +        assertThat(isIconViewLoaded).isFalse() + +        viewModel.setIsIconViewLoaded(true) + +        assertThat(isIconViewLoaded).isTrue() +    } +      /** Asserts that the selected buttons are visible now. */      private suspend fun TestScope.assertButtonsVisible(          tryAgain: Boolean = false, |