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

Commit a871e9f0 authored by Will Leshner's avatar Will Leshner
Browse files

Fix an issue with editing communal widgets on fingerprint failure.

The edit widgets activity was failing to launch properly on fingerprint
failure.

Bug: 356632565
Test: OccludingAppDeviceEntryInteractorTest
Flag: EXEMPT bugfix
Change-Id: I9f31043586dc18b92d9157b31a76ace973592828
parent bedfe731
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.Context
import android.content.Intent
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.communal.domain.interactor.CommunalSceneInteractor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.deviceentry.shared.model.BiometricMessage
@@ -33,6 +34,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.util.kotlin.combine
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
@@ -64,6 +66,7 @@ constructor(
    activityStarter: ActivityStarter,
    powerInteractor: PowerInteractor,
    keyguardTransitionInteractor: KeyguardTransitionInteractor,
    communalSceneInteractor: CommunalSceneInteractor,
) {
    private val keyguardOccludedByApp: Flow<Boolean> =
        if (KeyguardWmStateRefactor.isEnabled) {
@@ -75,12 +78,20 @@ constructor(
                    primaryBouncerInteractor.isShowing,
                    alternateBouncerInteractor.isVisible,
                    keyguardInteractor.isDozing,
                ) { occluded, showing, primaryBouncerShowing, alternateBouncerVisible, dozing ->
                    communalSceneInteractor.isIdleOnCommunal,
                ) {
                    occluded,
                    showing,
                    primaryBouncerShowing,
                    alternateBouncerVisible,
                    dozing,
                    isIdleOnCommunal ->
                    occluded &&
                        showing &&
                        !primaryBouncerShowing &&
                        !alternateBouncerVisible &&
                        !dozing
                        !dozing &&
                        !isIdleOnCommunal
                }
                .distinctUntilChanged()
        }
+32 −1
Original line number Diff line number Diff line
@@ -21,8 +21,12 @@ import android.content.mockedContext
import android.hardware.fingerprint.FingerprintManager
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.systemui.SysuiTestCase
import com.android.systemui.bouncer.data.repository.keyguardBouncerRepository
import com.android.systemui.communal.data.repository.communalSceneRepository
import com.android.systemui.communal.data.repository.fakeCommunalSceneRepository
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.data.repository.biometricSettingsRepository
import com.android.systemui.keyguard.data.repository.deviceEntryFingerprintAuthRepository
@@ -41,6 +45,7 @@ import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.any
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Test
@@ -65,6 +70,7 @@ class OccludingAppDeviceEntryInteractorTest : SysuiTestCase() {
    private val bouncerRepository = kosmos.keyguardBouncerRepository
    private val powerRepository = kosmos.fakePowerRepository
    private val biometricSettingsRepository = kosmos.biometricSettingsRepository
    private val communalSceneRepository = kosmos.communalSceneRepository
    private val mockedContext = kosmos.mockedContext
    private val mockedActivityStarter = kosmos.activityStarter

@@ -142,6 +148,20 @@ class OccludingAppDeviceEntryInteractorTest : SysuiTestCase() {
            verifyNeverGoToHomeScreen()
        }

    @Test
    fun lockout_onOccludingApp_onCommunal_neverGoToHomeScreen() =
        testScope.runTest {
            givenOnOccludingApp(isOnOccludingApp = true, isOnCommunal = true)
            fingerprintAuthRepository.setAuthenticationStatus(
                ErrorFingerprintAuthenticationStatus(
                    FingerprintManager.FINGERPRINT_ERROR_LOCKOUT,
                    "lockoutTest"
                )
            )
            runCurrent()
            verifyNeverGoToHomeScreen()
        }

    @Test
    fun message_fpFailOnOccludingApp_thenNotOnOccludingApp() =
        testScope.runTest {
@@ -261,7 +281,10 @@ class OccludingAppDeviceEntryInteractorTest : SysuiTestCase() {
            assertThat(message).isNull()
        }

    private suspend fun givenOnOccludingApp(isOnOccludingApp: Boolean) {
    private suspend fun givenOnOccludingApp(
        isOnOccludingApp: Boolean,
        isOnCommunal: Boolean = false
    ) {
        powerRepository.setInteractive(true)
        keyguardRepository.setIsDozing(false)
        keyguardRepository.setKeyguardOccluded(isOnOccludingApp)
@@ -270,6 +293,14 @@ class OccludingAppDeviceEntryInteractorTest : SysuiTestCase() {
        bouncerRepository.setPrimaryShow(!isOnOccludingApp)
        bouncerRepository.setAlternateVisible(!isOnOccludingApp)

        kosmos.fakeCommunalSceneRepository.setTransitionState(
            flowOf(
                ObservableTransitionState.Idle(
                    if (isOnCommunal) CommunalScenes.Communal else CommunalScenes.Blank
                )
            )
        )

        if (isOnOccludingApp) {
            kosmos.fakeKeyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.LOCKSCREEN,
+2 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.deviceentry.domain.interactor
import android.content.mockedContext
import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor
import com.android.systemui.bouncer.domain.interactor.primaryBouncerInteractor
import com.android.systemui.communal.domain.interactor.communalSceneInteractor
import com.android.systemui.keyguard.data.repository.deviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
@@ -42,5 +43,6 @@ val Kosmos.occludingAppDeviceEntryInteractor by
            activityStarter = activityStarter,
            powerInteractor = powerInteractor,
            keyguardTransitionInteractor = keyguardTransitionInteractor,
            communalSceneInteractor = communalSceneInteractor,
        )
    }