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

Commit 96e18faa authored by Matt Pietal's avatar Matt Pietal
Browse files

Consume drag events on main dispatcher

Swiping up to bouncer should be processed on the main dispatcher,
to avoid delays in setting alpha on elements.

Also, remove the interpolator on swipe up. It looks too janky.
The result should be a smoother transition.

Bug: 393087652
Test: atest KeyguardInteractorTest
Flag: EXEMPT bugfix
Change-Id: Ie3710fe4526e4e571b16acb6e37744eac9d64393
parent f618ab4c
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -263,6 +263,29 @@ class KeyguardInteractorTest : SysuiTestCase() {
            assertThat(dismissAlpha.size).isEqualTo(3)
        }

    @Test
    fun dismissAlpha_doesNotEmitWhenNotDismissible() =
        testScope.runTest {
            val dismissAlpha by collectValues(underTest.dismissAlpha)
            assertThat(dismissAlpha[0]).isEqualTo(1f)
            assertThat(dismissAlpha.size).isEqualTo(1)

            keyguardTransitionRepository.sendTransitionSteps(from = AOD, to = LOCKSCREEN, testScope)

            // User begins to swipe up when not dimissible, which would show bouncer
            repository.setStatusBarState(StatusBarState.KEYGUARD)
            repository.setKeyguardDismissible(false)
            shadeRepository.setLegacyShadeExpansion(0.98f)

            assertThat(dismissAlpha[0]).isEqualTo(1f)
            assertThat(dismissAlpha.size).isEqualTo(1)

            // Shade reset should not affect dismiss alpha when not dismissible
            shadeRepository.setLegacyShadeExpansion(0f)
            assertThat(dismissAlpha[0]).isEqualTo(1f)
            assertThat(dismissAlpha.size).isEqualTo(1)
        }

    @Test
    fun dismissAlpha_onGlanceableHub_doesNotEmitWhenShadeResets() =
        testScope.runTest {
+1 −1
Original line number Diff line number Diff line
@@ -989,7 +989,7 @@

    <dimen name="keyguard_security_container_padding_top">20dp</dimen>

    <dimen name="keyguard_translate_distance_on_swipe_up">-200dp</dimen>
    <dimen name="keyguard_translate_distance_on_swipe_up">-180dp</dimen>

    <dimen name="keyguard_indication_margin_bottom">32dp</dimen>
    <dimen name="ambient_indication_margin_bottom">71dp</dimen>
+4 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.systemui.communal.domain.interactor.CommunalSceneInteractor
import com.android.systemui.communal.domain.interactor.CommunalSettingsInteractor
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.KeyguardWmStateRefactor
@@ -62,6 +63,7 @@ constructor(
    override val internalTransitionInteractor: InternalKeyguardTransitionInteractor,
    transitionInteractor: KeyguardTransitionInteractor,
    @Background private val scope: CoroutineScope,
    @Application private val applicationScope: CoroutineScope,
    @Background bgDispatcher: CoroutineDispatcher,
    @Main mainDispatcher: CoroutineDispatcher,
    keyguardInteractor: KeyguardInteractor,
@@ -175,7 +177,7 @@ constructor(
    private fun listenForLockscreenToPrimaryBouncerDragging() {
        if (SceneContainerFlag.isEnabled) return
        var transitionId: UUID? = null
        scope.launch("$TAG#listenForLockscreenToPrimaryBouncerDragging") {
        applicationScope.launch("$TAG#listenForLockscreenToPrimaryBouncerDragging") {
            shadeRepository.legacyShadeExpansion.collect { shadeExpansion ->
                val statusBarState = keyguardInteractor.statusBarState.value
                val isKeyguardUnlocked = keyguardInteractor.isKeyguardDismissible.value
@@ -204,7 +206,7 @@ constructor(
                                id,
                                // This maps the shadeExpansion to a much faster curve, to match
                                // the existing logic
                                1f - MathUtils.constrainedMap(0f, 1f, 0.95f, 1f, shadeExpansion),
                                1f - MathUtils.constrainedMap(0f, 1f, 0.88f, 1f, shadeExpansion),
                                nextState,
                            )
                        }
+5 −12
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ import android.app.StatusBarManager
import android.graphics.Point
import android.util.Log
import android.util.MathUtils
import com.android.app.animation.Interpolators
import com.android.systemui.bouncer.data.repository.KeyguardBouncerRepository
import com.android.systemui.common.shared.model.NotificationContainerBounds
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
@@ -371,9 +370,11 @@ constructor(
                        currentKeyguardState == LOCKSCREEN &&
                        legacyShadeExpansion != 1f
                ) {
                    emit(MathUtils.constrainedMap(0f, 1f, 0.95f, 1f, legacyShadeExpansion))
                    emit(MathUtils.constrainedMap(0f, 1f, 0.82f, 1f, legacyShadeExpansion))
                } else if (
                    (legacyShadeExpansion == 0f || legacyShadeExpansion == 1f) && !onGlanceableHub
                    !onGlanceableHub &&
                        isKeyguardDismissible &&
                        (legacyShadeExpansion == 0f || legacyShadeExpansion == 1f)
                ) {
                    // Resets alpha state
                    emit(1f)
@@ -401,15 +402,7 @@ constructor(
                        // 0f and 1f need to be ignored in the legacy shade expansion. These can
                        // flip arbitrarily as the legacy shade is reset, and would cause the
                        // translation value to jump around unexpectedly.
                        emit(
                            MathUtils.lerp(
                                translationDistance,
                                0,
                                Interpolators.FAST_OUT_LINEAR_IN.getInterpolation(
                                    legacyShadeExpansion
                                ),
                            )
                        )
                        emit(MathUtils.lerp(translationDistance, 0, legacyShadeExpansion))
                    }
                }
            }
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ var Kosmos.fromLockscreenTransitionInteractor by
            transitionInteractor = keyguardTransitionInteractor,
            internalTransitionInteractor = internalKeyguardTransitionInteractor,
            scope = applicationCoroutineScope,
            applicationScope = applicationCoroutineScope,
            bgDispatcher = testDispatcher,
            mainDispatcher = testDispatcher,
            keyguardInteractor = keyguardInteractor,