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

Commit 6038dd56 authored by Matt Pietal's avatar Matt Pietal Committed by Android (Google) Code Review
Browse files

Merge changes Ib464245c,I63650f76 into main

* changes:
  Ensure translationX gets reset
  Clean up newAodTranstion() flag
parents c8ab79dc 2b28d8a2
Loading
Loading
Loading
Loading
+47 −0
Original line number Diff line number Diff line
@@ -128,6 +128,53 @@ class AodBurnInViewModelTest : SysuiTestCase() {
            assertThat(movement?.scaleClockOnly).isEqualTo(true)
        }

    @Test
    fun translationX_aodToLockscreen() =
        testScope.runTest {
            underTest.updateBurnInParams(burnInParameters.copy(translationX = { -100f }))
            val movement by collectLastValue(underTest.movement)
            assertThat(movement?.translationX).isEqualTo(0)

            // Trigger a change to the burn-in model
            burnInFlow.value = BurnInModel(translationX = 20, translationY = 30, scale = 0.5f)

            // Set to not dozing (on lockscreen)
            keyguardTransitionRepository.sendTransitionStep(
                TransitionStep(
                    from = KeyguardState.AOD,
                    to = KeyguardState.LOCKSCREEN,
                    value = 0f,
                    transitionState = TransitionState.STARTED,
                ),
                validateStep = false,
            )
            // Set to not dozing (on lockscreen)
            keyguardTransitionRepository.sendTransitionStep(
                TransitionStep(
                    from = KeyguardState.AOD,
                    to = KeyguardState.LOCKSCREEN,
                    value = 0f,
                    transitionState = TransitionState.RUNNING,
                ),
                validateStep = false,
            )
            assertThat(movement?.translationX).isEqualTo(-100)
            keyguardTransitionRepository.sendTransitionStep(
                TransitionStep(
                    from = KeyguardState.AOD,
                    to = KeyguardState.LOCKSCREEN,
                    value = 1f,
                    transitionState = TransitionState.FINISHED,
                ),
                validateStep = false,
            )

            assertThat(movement?.translationX).isEqualTo(0)
            assertThat(movement?.translationY).isEqualTo(0)
            assertThat(movement?.scale).isEqualTo(1f)
            assertThat(movement?.scaleClockOnly).isEqualTo(true)
        }

    @Test
    fun translationAndScale_whenFullyDozing() =
        testScope.runTest {
+1 −6
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.systemui.Flags.FLAG_KEYGUARD_BOTTOM_AREA_REFACTOR
import com.android.systemui.Flags.FLAG_MIGRATE_CLOCKS_TO_BLUEPRINT
import com.android.systemui.Flags.FLAG_NEW_AOD_TRANSITION
import com.android.systemui.SysuiTestCase
import com.android.systemui.communal.data.repository.communalSceneRepository
import com.android.systemui.communal.shared.model.CommunalScenes
@@ -74,11 +73,7 @@ import platform.test.runner.parameterized.Parameters

@SmallTest
@RunWith(ParameterizedAndroidJunit4::class)
@EnableFlags(
    FLAG_MIGRATE_CLOCKS_TO_BLUEPRINT,
    FLAG_NEW_AOD_TRANSITION,
    FLAG_KEYGUARD_BOTTOM_AREA_REFACTOR,
)
@EnableFlags(FLAG_MIGRATE_CLOCKS_TO_BLUEPRINT, FLAG_KEYGUARD_BOTTOM_AREA_REFACTOR)
class KeyguardRootViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
    private val kosmos = testKosmos()
    private val testScope = kosmos.testScope
+5 −49
Original line number Diff line number Diff line
@@ -45,7 +45,6 @@ import com.android.internal.jank.InteractionJankMonitor.CUJ_SCREEN_OFF_SHOW_AOD
import com.android.keyguard.AuthInteractionProperties
import com.android.systemui.Flags
import com.android.systemui.Flags.msdlFeedback
import com.android.systemui.Flags.newAodTransition
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.common.shared.model.Text
import com.android.systemui.common.shared.model.TintedIcon
@@ -414,7 +413,10 @@ object KeyguardRootViewBinder {

        if (MigrateClocksToBlueprint.isEnabled) {
            burnInParams.update { current ->
                current.copy(translationY = { childViews[burnInLayerId]?.translationY })
                current.copy(
                    translationX = { childViews[burnInLayerId]?.translationX },
                    translationY = { childViews[burnInLayerId]?.translationY },
                )
            }
        }

@@ -593,7 +595,7 @@ object KeyguardRootViewBinder {
                        View.INVISIBLE
                    }
            }
            newAodTransition() -> {
            else -> {
                animateInIconTranslation()
                if (isVisible.value) {
                    CrossFadeHelper.fadeIn(this, animatorListener)
@@ -601,52 +603,6 @@ object KeyguardRootViewBinder {
                    CrossFadeHelper.fadeOut(this, animatorListener)
                }
            }
            !isVisible.value -> {
                // Let's make sure the icon are translated to 0, since we cancelled it above
                animateInIconTranslation()
                CrossFadeHelper.fadeOut(this, animatorListener)
            }
            visibility != View.VISIBLE -> {
                // No fading here, let's just appear the icons instead!
                visibility = View.VISIBLE
                alpha = 1f
                appearIcons(
                    animate = screenOffAnimationController.shouldAnimateAodIcons(),
                    iconsAppearTranslationPx,
                    animatorListener,
                )
            }
            else -> {
                // Let's make sure the icons are translated to 0, since we cancelled it above
                animateInIconTranslation()
                // We were fading out, let's fade in instead
                CrossFadeHelper.fadeIn(this, animatorListener)
            }
        }
    }

    private fun View.appearIcons(
        animate: Boolean,
        iconAppearTranslation: Int,
        animatorListener: Animator.AnimatorListener,
    ) {
        if (animate) {
            if (!MigrateClocksToBlueprint.isEnabled) {
                translationY = -iconAppearTranslation.toFloat()
            }
            alpha = 0f
            animate()
                .alpha(1f)
                .setInterpolator(Interpolators.LINEAR)
                .setDuration(AOD_ICONS_APPEAR_DURATION)
                .apply { if (MigrateClocksToBlueprint.isEnabled) animateInIconTranslation() }
                .setListener(animatorListener)
                .start()
        } else {
            alpha = 1.0f
            if (!MigrateClocksToBlueprint.isEnabled) {
                translationY = 0f
            }
        }
    }

+16 −6
Original line number Diff line number Diff line
@@ -113,6 +113,9 @@ constructor(
                            occludedToLockscreenTransitionViewModel.lockscreenTranslationY.onStart {
                                emit(0f)
                            },
                            aodToLockscreenTransitionViewModel
                                .translationX(params.translationX)
                                .onStart { emit(StateToValue()) },
                            aodToLockscreenTransitionViewModel
                                .translationY(params.translationY)
                                .onStart { emit(StateToValue()) },
@@ -123,11 +126,12 @@ constructor(
                            val goneToAodTranslationX = flows[3] as StateToValue
                            val lockscreenToAodTranslationX = flows[4] as StateToValue
                            val occludedToLockscreen = flows[5] as Float
                            val aodToLockscreen = flows[6] as StateToValue
                            val aodToLockscreenTranslationX = flows[6] as StateToValue
                            val aodToLockscreenTranslationY = flows[7] as StateToValue

                            val translationY =
                                if (aodToLockscreen.transitionState.isTransitioning()) {
                                    aodToLockscreen.value ?: 0f
                                if (aodToLockscreenTranslationY.transitionState.isTransitioning()) {
                                    aodToLockscreenTranslationY.value ?: 0f
                                } else if (
                                    goneToAodTranslationY.transitionState.isTransitioning()
                                ) {
@@ -138,9 +142,13 @@ constructor(
                                        keyguardTranslationY
                                }
                            val translationX =
                                if (aodToLockscreenTranslationX.transitionState.isTransitioning()) {
                                    aodToLockscreenTranslationX.value ?: 0f
                                } else {
                                    burnInModel.translationX +
                                        (goneToAodTranslationX.value ?: 0f) +
                                        (lockscreenToAodTranslationX.value ?: 0f)
                                }
                            burnInModel.copy(
                                translationX = translationX.toInt(),
                                translationY = translationY.toInt(),
@@ -198,6 +206,8 @@ data class BurnInParameters(
    val minViewY: Int = Int.MAX_VALUE,
    /** The current y translation of the view */
    val translationY: () -> Float? = { null },
    /** The current x translation of the view */
    val translationX: () -> Float? = { null },
)

/**
+16 −5
Original line number Diff line number Diff line
@@ -39,10 +39,8 @@ import kotlinx.coroutines.flow.Flow
@SysUISingleton
class AodToLockscreenTransitionViewModel
@Inject
constructor(
    shadeInteractor: ShadeInteractor,
    animationFlow: KeyguardTransitionAnimationFlow,
) : DeviceEntryIconTransition {
constructor(shadeInteractor: ShadeInteractor, animationFlow: KeyguardTransitionAnimationFlow) :
    DeviceEntryIconTransition {

    private val transitionAnimation =
        animationFlow.setup(
@@ -54,7 +52,7 @@ constructor(

    /**
     * Begin the transition from wherever the y-translation value is currently. This helps ensure a
     * smooth transition if a transition in canceled.
     * smooth transition if the prior transition was canceled.
     */
    fun translationY(currentTranslationY: () -> Float?): Flow<StateToValue> {
        var startValue = 0f
@@ -65,6 +63,19 @@ constructor(
        )
    }

    /**
     * Begin the transition from wherever the x-translation value is currently. This helps ensure a
     * smooth transition if the prior transition was canceled.
     */
    fun translationX(currentTranslationX: () -> Float?): Flow<StateToValue> {
        var startValue = 0f
        return transitionAnimation.sharedFlowWithState(
            duration = 500.milliseconds,
            onStart = { startValue = currentTranslationX() ?: 0f },
            onStep = { MathUtils.lerp(startValue, 0f, FAST_OUT_SLOW_IN.getInterpolation(it)) },
        )
    }

    /** Ensure alpha is set to be visible */
    fun lockscreenAlpha(viewState: ViewStateAccessor): Flow<Float> {
        var startAlpha = 1f
Loading