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

Commit f80b9cda authored by William Leshner's avatar William Leshner Committed by Android (Google) Code Review
Browse files

Merge "Fix an issue with editing communal widgets on fingerprint failure." into main

parents edf9f33b a871e9f0
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,
        )
    }