diff options
3 files changed, 47 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractor.kt b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractor.kt index 195aa5f4d31f..28db3b861278 100644 --- a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractor.kt @@ -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() } diff --git a/packages/SystemUI/tests/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractorTest.kt index 79e312fec5f8..77337d36a6b1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractorTest.kt @@ -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 @@ -143,6 +149,20 @@ class OccludingAppDeviceEntryInteractorTest : SysuiTestCase() { } @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 { val message by collectLastValue(underTest.message) @@ -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, diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractorKosmos.kt index d5411ad77ce4..3680e651246b 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractorKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractorKosmos.kt @@ -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, ) } |