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

Commit bcc055a5 authored by Chaitanya Cheemala (xWF)'s avatar Chaitanya Cheemala (xWF) Committed by Android (Google) Code Review
Browse files

Revert "A few fixes for animation takeovers."

Revert submission 30509816-raf-timing

Reason for revert: Likely culprit for b/381006945  - verifying through ABTD before revert submission. This is part of the standard investigation process, and does not mean your CL will be reverted.

Reverted changes: /q/submissionid:30509816-raf-timing

Change-Id: If82b674cc4b9b292eefc3859e770b6d7059e9f18
parent e62bbe81
Loading
Loading
Loading
Loading
+24 −12
Original line number Diff line number Diff line
@@ -867,9 +867,6 @@ constructor(
                    ) {
                        // Raise closing task to "above" layer so it isn't covered.
                        t.setLayer(target.leash, aboveLayers - i)
                    } else if (TransitionUtil.isOpeningType(change.mode)) {
                        // Put into the "below" layer space.
                        t.setLayer(target.leash, belowLayers - i)
                    }
                } else if (TransitionInfo.isIndependent(change, info)) {
                    // Root tasks
@@ -1136,7 +1133,7 @@ constructor(
                // If a [controller.windowAnimatorState] exists, treat this like a takeover.
                takeOverAnimationInternal(
                    window,
                    startWindowState = null,
                    startWindowStates = null,
                    startTransaction = null,
                    callback,
                )
@@ -1151,23 +1148,22 @@ constructor(
            callback: IRemoteAnimationFinishedCallback?,
        ) {
            val window = setUpAnimation(apps, callback) ?: return
            val startWindowState = startWindowStates[apps!!.indexOf(window)]
            takeOverAnimationInternal(window, startWindowState, startTransaction, callback)
            takeOverAnimationInternal(window, startWindowStates, startTransaction, callback)
        }

        private fun takeOverAnimationInternal(
            window: RemoteAnimationTarget,
            startWindowState: WindowAnimationState?,
            startWindowStates: Array<WindowAnimationState>?,
            startTransaction: SurfaceControl.Transaction?,
            callback: IRemoteAnimationFinishedCallback?,
        ) {
            val useSpring =
                !controller.isLaunching && startWindowState != null && startTransaction != null
                !controller.isLaunching && startWindowStates != null && startTransaction != null
            startAnimation(
                window,
                navigationBar = null,
                useSpring,
                startWindowState,
                startWindowStates,
                startTransaction,
                callback,
            )
@@ -1277,7 +1273,7 @@ constructor(
            window: RemoteAnimationTarget,
            navigationBar: RemoteAnimationTarget? = null,
            useSpring: Boolean = false,
            startingWindowState: WindowAnimationState? = null,
            startingWindowStates: Array<WindowAnimationState>? = null,
            startTransaction: SurfaceControl.Transaction? = null,
            iCallback: IRemoteAnimationFinishedCallback? = null,
        ) {
@@ -1323,7 +1319,6 @@ constructor(

            val isExpandingFullyAbove =
                transitionAnimator.isExpandingFullyAbove(controller.transitionContainer, endState)
            val windowState = startingWindowState ?: controller.windowAnimatorState

            // We animate the opening window and delegate the view expansion to [this.controller].
            val delegate = this.controller
@@ -1346,6 +1341,18 @@ constructor(
                                }
                        }

                        // The states are sorted matching the changes inside the transition info.
                        // Using this info, the RemoteAnimationTargets are created, with their
                        // prefixOrderIndex fields in reverse order to that of changes. To extract
                        // the right state, we need to invert again.
                        val windowState =
                            if (startingWindowStates != null) {
                                startingWindowStates[
                                    startingWindowStates.size - window.prefixOrderIndex]
                            } else {
                                controller.windowAnimatorState
                            }

                        // TODO(b/323863002): use the timestamp and velocity to update the initial
                        //   position.
                        val bounds = windowState?.bounds
@@ -1434,6 +1441,12 @@ constructor(
                        delegate.onTransitionAnimationProgress(state, progress, linearProgress)
                    }
                }
            val windowState =
                if (startingWindowStates != null) {
                    startingWindowStates[startingWindowStates.size - window.prefixOrderIndex]
                } else {
                    controller.windowAnimatorState
                }
            val velocityPxPerS =
                if (longLivedReturnAnimationsEnabled() && windowState?.velocityPxPerMs != null) {
                    val xVelocityPxPerS = windowState.velocityPxPerMs.x * 1000
@@ -1452,7 +1465,6 @@ constructor(
                    fadeWindowBackgroundLayer = !controller.isBelowAnimatingWindow,
                    drawHole = !controller.isBelowAnimatingWindow,
                    startVelocity = velocityPxPerS,
                    startFrameTime = windowState?.timestamp ?: -1,
                )
        }

+2 −48
Original line number Diff line number Diff line
@@ -27,8 +27,6 @@ import android.graphics.drawable.GradientDrawable
import android.util.FloatProperty
import android.util.Log
import android.util.MathUtils
import android.util.TimeUtils
import android.view.Choreographer
import android.view.View
import android.view.ViewGroup
import android.view.ViewGroupOverlay
@@ -368,7 +366,6 @@ class TransitionAnimator(
        @get:VisibleForTesting val springY: SpringAnimation,
        @get:VisibleForTesting val springScale: SpringAnimation,
        private val springState: SpringState,
        private val startFrameTime: Long,
        private val onAnimationStart: Runnable,
    ) : Animation {
        @get:VisibleForTesting
@@ -377,42 +374,6 @@ class TransitionAnimator(

        override fun start() {
            onAnimationStart.run()

            // If no start frame time is provided, we start the springs normally.
            if (startFrameTime < 0) {
                startSprings()
                return
            }

            // This function is not guaranteed to be called inside a frame. We try to access the
            // frame time immediately, but if we're not inside a frame this will throw an exception.
            // We must then post a callback to be run at the beginning of the next frame.
            try {
                initAndStartSprings(Choreographer.getInstance().frameTime)
            } catch (_: IllegalStateException) {
                Choreographer.getInstance().postFrameCallback { frameTimeNanos ->
                    initAndStartSprings(frameTimeNanos / TimeUtils.NANOS_PER_MS)
                }
            }
        }

        private fun initAndStartSprings(frameTime: Long) {
            // Initialize the spring as if it had started at the time that its start state
            // was created.
            springX.doAnimationFrame(startFrameTime)
            springY.doAnimationFrame(startFrameTime)
            springScale.doAnimationFrame(startFrameTime)
            // Move the spring time forward to the current frame, so it updates its internal state
            // following the initial momentum over the elapsed time.
            springX.doAnimationFrame(frameTime)
            springY.doAnimationFrame(frameTime)
            springScale.doAnimationFrame(frameTime)
            // Actually start the spring. We do this after the previous calls because the framework
            // doesn't like it when you call doAnimationFrame() after start() with an earlier time.
            startSprings()
        }

        private fun startSprings() {
            springX.start()
            springY.start()
            springScale.start()
@@ -510,9 +471,7 @@ class TransitionAnimator(
     * is true.
     *
     * If [startVelocity] (expressed in pixels per second) is not null, a multi-spring animation
     * using it for the initial momentum will be used instead of the default interpolators. In this
     * case, [startFrameTime] (if non-negative) represents the frame time at which the springs
     * should be started.
     * using it for the initial momentum will be used instead of the default interpolators.
     */
    fun startAnimation(
        controller: Controller,
@@ -521,7 +480,6 @@ class TransitionAnimator(
        fadeWindowBackgroundLayer: Boolean = true,
        drawHole: Boolean = false,
        startVelocity: PointF? = null,
        startFrameTime: Long = -1,
    ): Animation {
        if (!controller.isLaunching) assertReturnAnimations()
        if (startVelocity != null) assertLongLivedReturnAnimations()
@@ -544,7 +502,6 @@ class TransitionAnimator(
                fadeWindowBackgroundLayer,
                drawHole,
                startVelocity,
                startFrameTime,
            )
            .apply { start() }
    }
@@ -558,7 +515,6 @@ class TransitionAnimator(
        fadeWindowBackgroundLayer: Boolean = true,
        drawHole: Boolean = false,
        startVelocity: PointF? = null,
        startFrameTime: Long = -1,
    ): Animation {
        val transitionContainer = controller.transitionContainer
        val transitionContainerOverlay = transitionContainer.overlay
@@ -581,7 +537,6 @@ class TransitionAnimator(
                startState,
                endState,
                startVelocity,
                startFrameTime,
                windowBackgroundLayer,
                transitionContainer,
                transitionContainerOverlay,
@@ -767,7 +722,6 @@ class TransitionAnimator(
        startState: State,
        endState: State,
        startVelocity: PointF,
        startFrameTime: Long,
        windowBackgroundLayer: GradientDrawable,
        transitionContainer: View,
        transitionContainerOverlay: ViewGroupOverlay,
@@ -958,7 +912,7 @@ class TransitionAnimator(
                    }
                }

        return MultiSpringAnimation(springX, springY, springScale, springState, startFrameTime) {
        return MultiSpringAnimation(springX, springY, springScale, springState) {
            onAnimationStart(
                controller,
                isExpandingFullyAbove,