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

Commit 90fc95a9 authored by Chandru S's avatar Chandru S
Browse files

Handle shade being expanded during the primary bouncer -> dreaming transition

Also fixes shade blur dropping when primary bouncer -> dreaming finishes with shade open.

Fixes: 409720192
Test: unit tests
Test: verified manually
Flag: com.android.systemui.bouncer_ui_revamp
Flag: com.android.systemui.notification_shade_blur
Change-Id: I97d65d5c7055f8026b4e55fc11933e6f3aab6722
parent e5c2f095
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -16,8 +16,10 @@

package com.android.systemui.keyguard.ui.viewmodel

import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectValues
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
@@ -52,6 +54,7 @@ class PrimaryBouncerToDreamingTransitionViewModelTest : SysuiTestCase() {
    fun blurRadiusGoesToMinImmediately() =
        testScope.runTest {
            val values by collectValues(underTest.windowBlurRadius)
            kosmos.keyguardWindowBlurTestUtil.shadeExpanded(false)

            kosmos.keyguardWindowBlurTestUtil.assertTransitionToBlurRadius(
                transitionProgress = listOf(0.0f, 0.2f, 0.3f, 0.65f, 0.7f, 1.0f),
@@ -62,6 +65,38 @@ class PrimaryBouncerToDreamingTransitionViewModelTest : SysuiTestCase() {
            )
        }

    @Test
    @EnableFlags(Flags.FLAG_NOTIFICATION_SHADE_BLUR)
    fun blurRadiusRemainsAtMaxIfShadeIsExpandedAndShadeBlurIsEnabled() =
        testScope.runTest {
            val values by collectValues(underTest.windowBlurRadius)
            kosmos.keyguardWindowBlurTestUtil.shadeExpanded(true)

            kosmos.keyguardWindowBlurTestUtil.assertTransitionToBlurRadius(
                transitionProgress = listOf(0.0f, 0.2f, 0.3f, 0.65f, 0.7f, 1.0f),
                startValue = kosmos.blurConfig.maxBlurRadiusPx,
                endValue = kosmos.blurConfig.maxBlurRadiusPx,
                actualValuesProvider = { values },
                transitionFactory = ::step,
                checkInterpolatedValues = false,
            )
        }

    @Test
    fun notificationBlurDropsToMinWhenGoingBackFromPrimaryBouncerToDreaming() =
        testScope.runTest {
            val values by collectValues(underTest.notificationBlurRadius)

            kosmos.keyguardWindowBlurTestUtil.assertTransitionToBlurRadius(
                transitionProgress = listOf(0.0f, 0.2f, 0.3f, 0.65f, 0.7f, 1.0f),
                startValue = kosmos.blurConfig.minBlurRadiusPx,
                endValue = kosmos.blurConfig.minBlurRadiusPx,
                actualValuesProvider = { values },
                transitionFactory = ::step,
                checkInterpolatedValues = false,
            )
        }

    private fun step(value: Float, state: TransitionState = RUNNING): TransitionStep {
        return TransitionStep(
            from = KeyguardState.PRIMARY_BOUNCER,
+21 −11
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.keyguard.ui.viewmodel

import com.android.systemui.Flags
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.domain.interactor.FromPrimaryBouncerTransitionInteractor
import com.android.systemui.keyguard.shared.model.Edge
@@ -27,7 +28,6 @@ import com.android.systemui.keyguard.ui.transitions.PrimaryBouncerTransition
import com.android.systemui.scene.shared.model.Overlays
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.emptyFlow

@SysUISingleton
class PrimaryBouncerToDreamingTransitionViewModel
@@ -43,17 +43,27 @@ constructor(blurConfig: BlurConfig, animationFlow: KeyguardTransitionAnimationFl
            .setupWithoutSceneContainer(edge = Edge.create(from = PRIMARY_BOUNCER, to = DREAMING))

    override val windowBlurRadius: Flow<Float> =
        transitionAnimation.sharedFlow(
            onStart = { blurConfig.maxBlurRadiusPx },
            onStep = {
        transitionAnimation.sharedFlowWithShade(
            onStep = { progress, isShadeExpanded ->
                if (isShadeExpanded && Flags.notificationShadeBlur()) {
                    blurConfig.maxBlurRadiusPx
                } else {
                    transitionProgressToBlurRadius(
                        blurConfig.maxBlurRadiusPx,
                        endBlurRadius = blurConfig.minBlurRadiusPx,
                    transitionProgress = it,
                        transitionProgress = progress,
                    )
                }
            },
            onFinish = { isShadeExpanded ->
                if (isShadeExpanded && Flags.notificationShadeBlur()) {
                    blurConfig.maxBlurRadiusPx
                } else {
                    blurConfig.minBlurRadiusPx
                }
            },
            onFinish = { blurConfig.minBlurRadiusPx },
        )

    override val notificationBlurRadius: Flow<Float> = emptyFlow()
    override val notificationBlurRadius: Flow<Float> =
        transitionAnimation.immediatelyTransitionTo(blurConfig.minBlurRadiusPx)
}
+1 −1
Original line number Diff line number Diff line
@@ -154,7 +154,7 @@ import javax.inject.Provider;
@SysUISingleton
public class NotificationStackScrollLayoutController implements Dumpable {
    private static final String TAG = "StackScrollerController";
    private static final boolean DEBUG = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.DEBUG);
    private static final boolean DEBUG = Compile.IS_DEBUG || Log.isLoggable(TAG, Log.DEBUG);
    private static final String HIGH_PRIORITY = "high_priority";
    /** Delay in milli-seconds before shade closes for clear all. */
    private static final int DELAY_BEFORE_SHADE_CLOSE = 200;