Loading packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt +14 −1 Original line number Diff line number Diff line Loading @@ -138,7 +138,7 @@ open class AuthContainerViewTest : SysuiTestCase() { } @Test fun testDimissOnLock() { fun testDismissOnLock() { val container = initializeFingerprintContainer(addToView = true) assertThat(container.parent).isNotNull() val root = container.rootView Loading @@ -151,6 +151,19 @@ open class AuthContainerViewTest : SysuiTestCase() { assertThat(root.isAttachedToWindow).isFalse() } @Test fun testDismissOnShadeDown() { val container = initializeFingerprintContainer(addToView = true) assertThat(container.parent).isNotNull() val root = container.rootView container.mBiometricCallback.onUserCanceled() waitForIdleSync() assertThat(container.parent).isNull() assertThat(root.isAttachedToWindow).isFalse() } @Test fun testCredentialPasswordDismissesOnBack() { val container = initializeCredentialPasswordContainer(addToView = true) Loading packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/ui/viewmodel/CredentialViewModelTest.kt +10 −1 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ import com.android.systemui.biometrics.domain.interactor.FakeCredentialInteracto import com.android.systemui.biometrics.domain.interactor.PromptCredentialInteractor import com.android.systemui.biometrics.promptInfo import com.android.systemui.biometrics.shared.model.PromptKind import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.toList Loading @@ -34,17 +36,22 @@ class CredentialViewModelTest : SysuiTestCase() { private lateinit var viewModel: CredentialViewModel private val kosmos = testKosmos() @Before fun setup() { viewModel = CredentialViewModel( mContext, PromptCredentialInteractor(dispatcher, promptRepository, credentialInteractor) PromptCredentialInteractor(dispatcher, promptRepository, credentialInteractor), kosmos.shadeInteractor, ) } @Test fun setsPinInputFlags() = setsInputFlags(PromptKind.Pin, expectFlags = true) @Test fun setsPasswordInputFlags() = setsInputFlags(PromptKind.Password, expectFlags = false) @Test fun setsPatternInputFlags() = setsInputFlags(PromptKind.Pattern, expectFlags = false) private fun setsInputFlags(type: PromptKind, expectFlags: Boolean) = Loading @@ -61,8 +68,10 @@ class CredentialViewModelTest : SysuiTestCase() { } @Test fun isStealthIgnoredByPin() = isStealthMode(PromptKind.Pin, expectStealth = false) @Test fun isStealthIgnoredByPassword() = isStealthMode(PromptKind.Password, expectStealth = false) @Test fun isStealthUsedByPattern() = isStealthMode(PromptKind.Pattern, expectStealth = true) private fun isStealthMode(type: PromptKind, expectStealth: Boolean) = Loading packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricViewBinder.kt +8 −0 Original line number Diff line number Diff line Loading @@ -301,6 +301,14 @@ object BiometricViewBinder { } } launch { viewModel.isShadeExpanded.collect { isShadeExpanded -> if (isShadeExpanded) { legacyCallback.onUserCanceled() } } } // set messages launch { viewModel.isIndicatorMessageVisible.collect { show -> Loading packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/CredentialViewBinder.kt +8 −0 Original line number Diff line number Diff line Loading @@ -145,6 +145,14 @@ object CredentialViewBinder { } } launch { viewModel.isShadeExpanded.collect { isShadeExpanded -> if (isShadeExpanded) { host.onCredentialAborted() } } } try { awaitCancellation() } catch (_: Throwable) { Loading packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/CredentialViewModel.kt +5 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ import com.android.systemui.biometrics.domain.model.BiometricPromptRequest import com.android.systemui.biometrics.shared.model.BiometricUserInfo import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.res.R import com.android.systemui.shade.domain.interactor.ShadeInteractor import javax.inject.Inject import kotlin.reflect.KClass import kotlinx.coroutines.flow.Flow Loading @@ -29,8 +30,8 @@ class CredentialViewModel constructor( @Application private val applicationContext: Context, private val credentialInteractor: PromptCredentialInteractor, private val shadeInteractor: ShadeInteractor, ) { /** Top level information about the prompt. */ val header: Flow<CredentialHeaderViewModel> = combine( Loading @@ -49,6 +50,9 @@ constructor( ) } /** Whether the shade is expanded */ val isShadeExpanded = shadeInteractor.isShadeAnyExpanded /** Input flags for text based credential views */ val inputFlags: Flow<Int?> = credentialInteractor.prompt.map { Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt +14 −1 Original line number Diff line number Diff line Loading @@ -138,7 +138,7 @@ open class AuthContainerViewTest : SysuiTestCase() { } @Test fun testDimissOnLock() { fun testDismissOnLock() { val container = initializeFingerprintContainer(addToView = true) assertThat(container.parent).isNotNull() val root = container.rootView Loading @@ -151,6 +151,19 @@ open class AuthContainerViewTest : SysuiTestCase() { assertThat(root.isAttachedToWindow).isFalse() } @Test fun testDismissOnShadeDown() { val container = initializeFingerprintContainer(addToView = true) assertThat(container.parent).isNotNull() val root = container.rootView container.mBiometricCallback.onUserCanceled() waitForIdleSync() assertThat(container.parent).isNull() assertThat(root.isAttachedToWindow).isFalse() } @Test fun testCredentialPasswordDismissesOnBack() { val container = initializeCredentialPasswordContainer(addToView = true) Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/ui/viewmodel/CredentialViewModelTest.kt +10 −1 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ import com.android.systemui.biometrics.domain.interactor.FakeCredentialInteracto import com.android.systemui.biometrics.domain.interactor.PromptCredentialInteractor import com.android.systemui.biometrics.promptInfo import com.android.systemui.biometrics.shared.model.PromptKind import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.toList Loading @@ -34,17 +36,22 @@ class CredentialViewModelTest : SysuiTestCase() { private lateinit var viewModel: CredentialViewModel private val kosmos = testKosmos() @Before fun setup() { viewModel = CredentialViewModel( mContext, PromptCredentialInteractor(dispatcher, promptRepository, credentialInteractor) PromptCredentialInteractor(dispatcher, promptRepository, credentialInteractor), kosmos.shadeInteractor, ) } @Test fun setsPinInputFlags() = setsInputFlags(PromptKind.Pin, expectFlags = true) @Test fun setsPasswordInputFlags() = setsInputFlags(PromptKind.Password, expectFlags = false) @Test fun setsPatternInputFlags() = setsInputFlags(PromptKind.Pattern, expectFlags = false) private fun setsInputFlags(type: PromptKind, expectFlags: Boolean) = Loading @@ -61,8 +68,10 @@ class CredentialViewModelTest : SysuiTestCase() { } @Test fun isStealthIgnoredByPin() = isStealthMode(PromptKind.Pin, expectStealth = false) @Test fun isStealthIgnoredByPassword() = isStealthMode(PromptKind.Password, expectStealth = false) @Test fun isStealthUsedByPattern() = isStealthMode(PromptKind.Pattern, expectStealth = true) private fun isStealthMode(type: PromptKind, expectStealth: Boolean) = Loading
packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricViewBinder.kt +8 −0 Original line number Diff line number Diff line Loading @@ -301,6 +301,14 @@ object BiometricViewBinder { } } launch { viewModel.isShadeExpanded.collect { isShadeExpanded -> if (isShadeExpanded) { legacyCallback.onUserCanceled() } } } // set messages launch { viewModel.isIndicatorMessageVisible.collect { show -> Loading
packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/CredentialViewBinder.kt +8 −0 Original line number Diff line number Diff line Loading @@ -145,6 +145,14 @@ object CredentialViewBinder { } } launch { viewModel.isShadeExpanded.collect { isShadeExpanded -> if (isShadeExpanded) { host.onCredentialAborted() } } } try { awaitCancellation() } catch (_: Throwable) { Loading
packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/CredentialViewModel.kt +5 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ import com.android.systemui.biometrics.domain.model.BiometricPromptRequest import com.android.systemui.biometrics.shared.model.BiometricUserInfo import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.res.R import com.android.systemui.shade.domain.interactor.ShadeInteractor import javax.inject.Inject import kotlin.reflect.KClass import kotlinx.coroutines.flow.Flow Loading @@ -29,8 +30,8 @@ class CredentialViewModel constructor( @Application private val applicationContext: Context, private val credentialInteractor: PromptCredentialInteractor, private val shadeInteractor: ShadeInteractor, ) { /** Top level information about the prompt. */ val header: Flow<CredentialHeaderViewModel> = combine( Loading @@ -49,6 +50,9 @@ constructor( ) } /** Whether the shade is expanded */ val isShadeExpanded = shadeInteractor.isShadeAnyExpanded /** Input flags for text based credential views */ val inputFlags: Flow<Int?> = credentialInteractor.prompt.map { Loading