Loading packages/SystemUI/animation/src/com/android/systemui/animation/ActivityTransitionAnimator.kt +24 −12 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -1150,7 +1147,7 @@ constructor( // If a [controller.windowAnimatorState] exists, treat this like a takeover. takeOverAnimationInternal( window, startWindowState = null, startWindowStates = null, startTransaction = null, callback, ) Loading @@ -1165,23 +1162,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, ) Loading Loading @@ -1291,7 +1287,7 @@ constructor( window: RemoteAnimationTarget, navigationBar: RemoteAnimationTarget? = null, useSpring: Boolean = false, startingWindowState: WindowAnimationState? = null, startingWindowStates: Array<WindowAnimationState>? = null, startTransaction: SurfaceControl.Transaction? = null, iCallback: IRemoteAnimationFinishedCallback? = null, ) { Loading Loading @@ -1337,7 +1333,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 Loading @@ -1360,6 +1355,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 Loading Loading @@ -1448,6 +1455,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 Loading @@ -1466,7 +1479,6 @@ constructor( fadeWindowBackgroundLayer = !controller.isBelowAnimatingWindow, drawHole = !controller.isBelowAnimatingWindow, startVelocity = velocityPxPerS, startFrameTime = windowState?.timestamp ?: -1, ) } Loading packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt +2 −48 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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() Loading Loading @@ -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, Loading @@ -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() Loading @@ -544,7 +502,6 @@ class TransitionAnimator( fadeWindowBackgroundLayer, drawHole, startVelocity, startFrameTime, ) .apply { start() } } Loading @@ -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 Loading @@ -581,7 +537,6 @@ class TransitionAnimator( startState, endState, startVelocity, startFrameTime, windowBackgroundLayer, transitionContainer, transitionContainerOverlay, Loading Loading @@ -767,7 +722,6 @@ class TransitionAnimator( startState: State, endState: State, startVelocity: PointF, startFrameTime: Long, windowBackgroundLayer: GradientDrawable, transitionContainer: View, transitionContainerOverlay: ViewGroupOverlay, Loading Loading @@ -958,7 +912,7 @@ class TransitionAnimator( } } return MultiSpringAnimation(springX, springY, springScale, springState, startFrameTime) { return MultiSpringAnimation(springX, springY, springScale, springState) { onAnimationStart( controller, isExpandingFullyAbove, Loading Loading
packages/SystemUI/animation/src/com/android/systemui/animation/ActivityTransitionAnimator.kt +24 −12 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -1150,7 +1147,7 @@ constructor( // If a [controller.windowAnimatorState] exists, treat this like a takeover. takeOverAnimationInternal( window, startWindowState = null, startWindowStates = null, startTransaction = null, callback, ) Loading @@ -1165,23 +1162,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, ) Loading Loading @@ -1291,7 +1287,7 @@ constructor( window: RemoteAnimationTarget, navigationBar: RemoteAnimationTarget? = null, useSpring: Boolean = false, startingWindowState: WindowAnimationState? = null, startingWindowStates: Array<WindowAnimationState>? = null, startTransaction: SurfaceControl.Transaction? = null, iCallback: IRemoteAnimationFinishedCallback? = null, ) { Loading Loading @@ -1337,7 +1333,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 Loading @@ -1360,6 +1355,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 Loading Loading @@ -1448,6 +1455,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 Loading @@ -1466,7 +1479,6 @@ constructor( fadeWindowBackgroundLayer = !controller.isBelowAnimatingWindow, drawHole = !controller.isBelowAnimatingWindow, startVelocity = velocityPxPerS, startFrameTime = windowState?.timestamp ?: -1, ) } Loading
packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt +2 −48 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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() Loading Loading @@ -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, Loading @@ -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() Loading @@ -544,7 +502,6 @@ class TransitionAnimator( fadeWindowBackgroundLayer, drawHole, startVelocity, startFrameTime, ) .apply { start() } } Loading @@ -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 Loading @@ -581,7 +537,6 @@ class TransitionAnimator( startState, endState, startVelocity, startFrameTime, windowBackgroundLayer, transitionContainer, transitionContainerOverlay, Loading Loading @@ -767,7 +722,6 @@ class TransitionAnimator( startState: State, endState: State, startVelocity: PointF, startFrameTime: Long, windowBackgroundLayer: GradientDrawable, transitionContainer: View, transitionContainerOverlay: ViewGroupOverlay, Loading Loading @@ -958,7 +912,7 @@ class TransitionAnimator( } } return MultiSpringAnimation(springX, springY, springScale, springState, startFrameTime) { return MultiSpringAnimation(springX, springY, springScale, springState) { onAnimationStart( controller, isExpandingFullyAbove, Loading