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

Commit dc08c200 authored by Matt Pietal's avatar Matt Pietal
Browse files

Ensure smooth dismiss

When flinging and not releasing your finger, notifications
may flicker due to the shade expansion being reset to 1.

Ignore those values.

Fixes: 333710738
Test: atest KeyguardInteractorTest
Flag: ACONFIG com.android.systemui.migrate_clocks_to_blueprint
TEAMFOOD

Change-Id: If3aeb9afd404fffbf280855877680686d6a0d20c
parent f15aa9f9
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -215,14 +215,16 @@ class KeyguardInteractorTest : SysuiTestCase() {
            )

            repository.setStatusBarState(StatusBarState.KEYGUARD)
            shadeRepository.setLegacyShadeExpansion(1f)
            // User begins to swipe up
            shadeRepository.setLegacyShadeExpansion(0.99f)

            // When not dismissable, no alpha value (null) should emit
            repository.setKeyguardDismissible(false)
            assertThat(dismissAlpha).isNull()

            repository.setKeyguardDismissible(true)
            assertThat(dismissAlpha).isGreaterThan(0.95f)
            shadeRepository.setLegacyShadeExpansion(0.98f)
            assertThat(dismissAlpha).isGreaterThan(0.5f)
        }

    @Test
+10 −4
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.data.repository.ShadeRepository
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.notification.stack.domain.interactor.SharedNotificationContainerInteractor
import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import javax.inject.Provider
@@ -209,7 +210,8 @@ constructor(
                keyguardTransitionInteractor
                    .transitionValue(GONE)
                    .map { it == 1f }
                    .onStart { emit(false) },
                    .onStart { emit(false) }
                    .distinctUntilChanged(),
                repository.topClippingBounds
            ) { _, isGone, topClippingBounds ->
                if (!isGone) {
@@ -279,12 +281,16 @@ constructor(
     * signal should be sent directly to transitions.
     */
    val dismissAlpha: Flow<Float?> =
        combine(
                shadeRepository.legacyShadeExpansion,
        shadeRepository.legacyShadeExpansion
            .filter { it < 1f }
            .sampleCombine(
                statusBarState,
                keyguardTransitionInteractor.currentKeyguardState,
                isKeyguardDismissible,
            ) { legacyShadeExpansion, statusBarState, currentKeyguardState, isKeyguardDismissible ->
            )
            .map {
                (legacyShadeExpansion, statusBarState, currentKeyguardState, isKeyguardDismissible)
                ->
                if (
                    statusBarState == StatusBarState.KEYGUARD &&
                        isKeyguardDismissible &&