Loading packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractor.kt +13 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -64,6 +66,7 @@ constructor( activityStarter: ActivityStarter, powerInteractor: PowerInteractor, keyguardTransitionInteractor: KeyguardTransitionInteractor, communalSceneInteractor: CommunalSceneInteractor, ) { private val keyguardOccludedByApp: Flow<Boolean> = if (KeyguardWmStateRefactor.isEnabled) { Loading @@ -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() } Loading packages/SystemUI/tests/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractorTest.kt +32 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 { Loading Loading @@ -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) Loading @@ -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, Loading packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractorKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -42,5 +43,6 @@ val Kosmos.occludingAppDeviceEntryInteractor by activityStarter = activityStarter, powerInteractor = powerInteractor, keyguardTransitionInteractor = keyguardTransitionInteractor, communalSceneInteractor = communalSceneInteractor, ) } Loading
packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractor.kt +13 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -64,6 +66,7 @@ constructor( activityStarter: ActivityStarter, powerInteractor: PowerInteractor, keyguardTransitionInteractor: KeyguardTransitionInteractor, communalSceneInteractor: CommunalSceneInteractor, ) { private val keyguardOccludedByApp: Flow<Boolean> = if (KeyguardWmStateRefactor.isEnabled) { Loading @@ -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() } Loading
packages/SystemUI/tests/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractorTest.kt +32 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 { Loading Loading @@ -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) Loading @@ -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, Loading
packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/OccludingAppDeviceEntryInteractorKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -42,5 +43,6 @@ val Kosmos.occludingAppDeviceEntryInteractor by activityStarter = activityStarter, powerInteractor = powerInteractor, keyguardTransitionInteractor = keyguardTransitionInteractor, communalSceneInteractor = communalSceneInteractor, ) }