Reset NSSL translationY after a transision gets cancelled

We update the translationY of the NSSL upon multiple transitions. If the
Occluded -> LockScreen transition is cancelled, there is no other
transition that is taking over. It causes the NSSL to get stuck with some negative translateY value. This caused the Notifications and the NotificationShelf to be shifted slightly upwards.

This fix resets the translation to 0 if the transition was interrupted
and not completed successfully.

Fixes: 273591201
Test: atest OccludedToLockscreenTransitionViewModelTest
Change-Id: If0c162a7f1b8a2cf3d261692f5ce333331c36a7b
This commit is contained in:
András Kurucz
2023-04-14 16:49:31 +00:00
parent a579d6085d
commit 3a23e91c1a
2 changed files with 16 additions and 0 deletions

View File

@@ -47,6 +47,7 @@ constructor(
duration = TO_LOCKSCREEN_DURATION,
onStep = { value -> -translatePx + value * translatePx },
interpolator = EMPHASIZED_DECELERATE,
onCancel = { 0f },
)
}

View File

@@ -92,6 +92,21 @@ class OccludedToLockscreenTransitionViewModelTest : SysuiTestCase() {
job.cancel()
}
@Test
fun lockscreenTranslationYResettedAfterJobCancelled() =
runTest(UnconfinedTestDispatcher()) {
val values = mutableListOf<Float>()
val pixels = 100
val job =
underTest.lockscreenTranslationY(pixels).onEach { values.add(it) }.launchIn(this)
repository.sendTransitionStep(step(0.5f, TransitionState.CANCELED))
assertThat(values.last()).isEqualTo(0f)
job.cancel()
}
private fun step(
value: Float,
state: TransitionState = TransitionState.RUNNING