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

Commit a27d881d authored by András Kurucz's avatar András Kurucz
Browse files

Fix stack bounds when requesting pulsing on AOD

When AOD is enabled, and we are requesting pulsing, a new transition
starts from GONE to AOD. At the end of this transition we receive
multiple steps, where the progress is 1.0f. This breaks the
interpolation, and sends invalid bounds to the NSSL.

Fixes: 346557361
Test: atest SharedNotificationContainerViewModelTest
Test: go to AOD, receive a HUN (pulsing), observe the HUN's position
Flag: com.android.systemui.migrate_clocks_to_blueprint
Change-Id: I9b922834b6378183738bf7c301ad947bfafa076d
parent d233902b
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.shared.model.BurnInModel
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardState.AOD
import com.android.systemui.keyguard.shared.model.KeyguardState.GONE
import com.android.systemui.keyguard.shared.model.KeyguardState.LOCKSCREEN
import com.android.systemui.keyguard.shared.model.StatusBarState
import com.android.systemui.keyguard.shared.model.TransitionState
@@ -841,6 +842,30 @@ class SharedNotificationContainerViewModelTest(flags: FlagsParameterization) : S
            assertThat(bounds).isEqualTo(NotificationContainerBounds(top = top, bottom = bottom))
        }

    @Test
    @DisableSceneContainer
    fun updateBounds_fromGone_withoutTransitions() =
            testScope.runTest {
                // Start step is already at 1.0
                val runningStep = TransitionStep(GONE, AOD, 1.0f, TransitionState.RUNNING)
                val finishStep = TransitionStep(GONE, AOD, 1.0f, TransitionState.FINISHED)

                val bounds by collectLastValue(underTest.bounds)
                val top = 123f
                val bottom = 456f

                kosmos.fakeKeyguardTransitionRepository.sendTransitionStep(runningStep)
                runCurrent()
                kosmos.fakeKeyguardTransitionRepository.sendTransitionStep(finishStep)
                runCurrent()
                keyguardRootViewModel.onNotificationContainerBoundsChanged(top, bottom)
                runCurrent()

                assertThat(bounds).isEqualTo(
                        NotificationContainerBounds(top = top, bottom = bottom)
                )
            }

    @Test
    fun alphaOnFullQsExpansion() =
        testScope.runTest {
+1 −1
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ constructor(
                keyguardTransitionInteractor.transitionState.map { step ->
                    val startingProgress = lastChangeStep.value
                    val progress = step.value
                    if (step.to == AOD && progress >= startingProgress) {
                    if (step.to == AOD && progress >= startingProgress && startingProgress < 1f) {
                        val adjustedProgress =
                            ((progress - startingProgress) / (1F - startingProgress)).coerceIn(
                                0F,