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

Commit 0c854e41 authored by Chandru S's avatar Chandru S
Browse files

Fix glanceable hub screen not getting blurred based on whether bouncer is showing or not

Landing this again with more test fixes.

Bug: 388068805
Test: verified manually
Flag: com.android.systemui.scene_container
Change-Id: I40a4094c73b086c0499360f3ae3a77355d4e5679
parent 9a15ab28
Loading
Loading
Loading
Loading
+23 −1
Original line number Diff line number Diff line
@@ -97,6 +97,7 @@ import com.android.systemui.scene.data.repository.Transition
import com.android.systemui.scene.data.repository.setTransition
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.settings.fakeUserTracker
import com.android.systemui.shade.domain.interactor.shadeInteractor
@@ -947,11 +948,32 @@ class CommunalViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
        kosmos.runTest {
            val viewModel = createViewModel()
            val isUiBlurred by collectLastValue(viewModel.isUiBlurred)

            kosmos.sceneInteractor.changeScene(
                Scenes.Lockscreen,
                "go to lockscreen",
                hideAllOverlays = false,
            )
            kosmos.sceneInteractor.instantlyShowOverlay(Overlays.Bouncer, "go to bouncer")
            kosmos.sceneInteractor.setTransitionState(
                flowOf(
                    ObservableTransitionState.Idle(
                        sceneInteractor.currentScene.value,
                        setOf(Overlays.Bouncer),
                    )
                )
            )
            fakeKeyguardBouncerRepository.setPrimaryShow(true)
            runCurrent()

            assertThat(isUiBlurred).isTrue()

            fakeKeyguardBouncerRepository.setPrimaryShow(false)
            kosmos.sceneInteractor.instantlyHideOverlay(Overlays.Bouncer, "go to bouncer")
            kosmos.sceneInteractor.setTransitionState(
                flowOf(ObservableTransitionState.Idle(sceneInteractor.currentScene.value))
            )
            runCurrent()

            assertThat(isUiBlurred).isFalse()
        }

+4 −0
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ import com.android.systemui.Flags as AConfigFlags
import com.android.systemui.SysuiTestCase
import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor
import com.android.systemui.bouncer.domain.interactor.bouncerIsNotShowing
import com.android.systemui.bouncer.domain.interactor.bouncerIsShowing
import com.android.systemui.concurrency.fakeExecutor
import com.android.systemui.coroutines.FlowValue
import com.android.systemui.coroutines.collectLastValue
@@ -679,6 +681,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
            allPreconditionsToRunFaceAuthAreTrue()
            bouncerRepository.setAlternateVisible(false)
            bouncerRepository.setPrimaryShow(false)
            kosmos.bouncerIsNotShowing()

            assertThat(canFaceAuthRun()).isTrue()

@@ -693,6 +696,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {

            // but bouncer is shown after that.
            bouncerRepository.setPrimaryShow(true)
            kosmos.bouncerIsShowing()
            assertThat(canFaceAuthRun()).isTrue()
        }

+7 −0
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import com.android.compose.animation.scene.ObservableTransitionState
import com.android.systemui.Flags.FLAG_KEYGUARD_WM_STATE_REFACTOR
import com.android.systemui.SysuiTestCase
import com.android.systemui.bouncer.data.repository.keyguardBouncerRepository
import com.android.systemui.bouncer.domain.interactor.bouncerIsNotShowing
import com.android.systemui.bouncer.domain.interactor.bouncerIsShowing
import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectValues
@@ -163,6 +165,7 @@ class KeyguardInteractorTest : SysuiTestCase() {
            assertThat(secureCameraActive()).isTrue()

            bouncerRepository.setPrimaryShow(true)
            kosmos.bouncerIsShowing()
            assertThat(secureCameraActive()).isFalse()
        }

@@ -254,10 +257,12 @@ class KeyguardInteractorTest : SysuiTestCase() {

            // Show bouncer
            bouncerRepository.setPrimaryShow(true)
            kosmos.bouncerIsShowing()
            assertThat(secureCameraActive()).isFalse()

            // WHEN device is unlocked (and therefore the bouncer is no longer showing)
            bouncerRepository.setPrimaryShow(false)
            kosmos.bouncerIsNotShowing()

            // THEN we still show secure camera as *not* active
            assertThat(secureCameraActive()).isFalse()
@@ -675,6 +680,7 @@ class KeyguardInteractorTest : SysuiTestCase() {
        testScope.runTest {
            val primaryBouncerShowing by collectLastValue(underTest.primaryBouncerShowing)
            bouncerRepository.setPrimaryShow(true)
            kosmos.bouncerIsShowing()
            runCurrent()
            assertThat(primaryBouncerShowing).isTrue()
        }
@@ -684,6 +690,7 @@ class KeyguardInteractorTest : SysuiTestCase() {
        testScope.runTest {
            val primaryBouncerShowing by collectLastValue(underTest.primaryBouncerShowing)
            bouncerRepository.setPrimaryShowingSoon(true)
            kosmos.bouncerIsShowing()
            runCurrent()
            assertThat(primaryBouncerShowing).isTrue()
        }
+2 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import androidx.test.filters.SmallTest
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
import com.android.systemui.bouncer.domain.interactor.bouncerIsShowing
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.testKosmos
@@ -44,6 +45,7 @@ class WindowRootViewBlurInteractorTest : SysuiTestCase() {
    fun shadeBlurIsNotAppliedWhenBouncerBlurIsActive() =
        testScope.runTest {
            kosmos.fakeKeyguardBouncerRepository.setPrimaryShow(true)
            kosmos.bouncerIsShowing()

            assertThat(underTest.requestBlurForShade(30, 1.0f)).isFalse()
        }
+12 −5
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import com.android.systemui.log.table.logDiffsForTable
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.ShadeDisplayAware
import com.android.systemui.shade.data.repository.ShadeRepository
@@ -278,12 +279,18 @@ constructor(
    /** Whether the primary bouncer is showing or about to show soon. */
    @JvmField
    val primaryBouncerShowing: StateFlow<Boolean> =
        if (SceneContainerFlag.isEnabled) {
                sceneInteractorProvider.get().transitionState.map {
                    it.isIdle(Overlays.Bouncer) || it.isTransitioning(to = Overlays.Bouncer)
                }
            } else {
                combine(
                    bouncerRepository.primaryBouncerShow,
                    bouncerRepository.primaryBouncerShowingSoon,
                ) { showing, showingSoon ->
                    showing || showingSoon
                }
            }
            .stateIn(
                scope = applicationScope,
                started = SharingStarted.WhileSubscribed(),
Loading