Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e2964ce9 authored by Austin Delgado's avatar Austin Delgado
Browse files

Dismiss biometric prompt on shade expansion

Bug: 415256796
Flag: EXEMPT bugfix
Test: atest AuthContainerViewTest
Change-Id: I120ead4ea9932c627a9150ed6d54ff072a0f459c
parent fba71b13
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -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
@@ -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)
+10 −1
Original line number Diff line number Diff line
@@ -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
@@ -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) =
@@ -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) =
+8 −0
Original line number Diff line number Diff line
@@ -301,6 +301,14 @@ object BiometricViewBinder {
                        }
                }

                launch {
                    viewModel.isShadeExpanded.collect { isShadeExpanded ->
                        if (isShadeExpanded) {
                            legacyCallback.onUserCanceled()
                        }
                    }
                }

                // set messages
                launch {
                    viewModel.isIndicatorMessageVisible.collect { show ->
+8 −0
Original line number Diff line number Diff line
@@ -145,6 +145,14 @@ object CredentialViewBinder {
                        }
                }

                launch {
                    viewModel.isShadeExpanded.collect { isShadeExpanded ->
                        if (isShadeExpanded) {
                            host.onCredentialAborted()
                        }
                    }
                }

                try {
                    awaitCancellation()
                } catch (_: Throwable) {
+5 −1
Original line number Diff line number Diff line
@@ -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
@@ -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(
@@ -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