diff options
| author | 2024-10-03 18:46:11 +0000 | |
|---|---|---|
| committer | 2024-10-03 18:46:11 +0000 | |
| commit | 7a8d64bc32414da5cd4ab5ef30fade2d1092e32c (patch) | |
| tree | 9d5efb1e37cb2ab0bb02b9b1f3b14c390e60c9bd | |
| parent | 44f00e6ec66542a706b92af7f740e6f8a29e8c27 (diff) | |
Revert^2 "Partially revert ag/27263995"
This reverts commit 44f00e6ec66542a706b92af7f740e6f8a29e8c27.
Reason for revert: b/368877710
Change-Id: If8f84d1a93baec0b33271a9ab830f70bc875c248
| -rw-r--r-- | packages/SystemUI/animation/src/com/android/systemui/animation/DialogTransitionAnimator.kt | 23 | ||||
| -rw-r--r-- | packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt | 27 |
2 files changed, 27 insertions, 23 deletions
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/DialogTransitionAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/DialogTransitionAnimator.kt index f5d01d70e077..907c39d842ce 100644 --- a/packages/SystemUI/animation/src/com/android/systemui/animation/DialogTransitionAnimator.kt +++ b/packages/SystemUI/animation/src/com/android/systemui/animation/DialogTransitionAnimator.kt @@ -944,9 +944,26 @@ private class AnimatedDialog( } override fun onTransitionAnimationEnd(isExpandingFullyAbove: Boolean) { - startController.onTransitionAnimationEnd(isExpandingFullyAbove) - endController.onTransitionAnimationEnd(isExpandingFullyAbove) - onLaunchAnimationEnd() + // onLaunchAnimationEnd is called by an Animator at the end of the animation, + // on a Choreographer animation tick. The following calls will move the animated + // content from the dialog overlay back to its original position, and this + // change must be reflected in the next frame given that we then sync the next + // frame of both the content and dialog ViewRoots. However, in case that content + // is rendered by Compose, whose compositions are also scheduled on a + // Choreographer frame, any state change made *right now* won't be reflected in + // the next frame given that a Choreographer frame can't schedule another and + // have it happen in the same frame. So we post the forwarded calls to + // [Controller.onLaunchAnimationEnd], leaving this Choreographer frame, ensuring + // that the move of the content back to its original window will be reflected in + // the next frame right after [onLaunchAnimationEnd] is called. + // + // TODO(b/330672236): Move this to TransitionAnimator. + dialog.context.mainExecutor.execute { + startController.onTransitionAnimationEnd(isExpandingFullyAbove) + endController.onTransitionAnimationEnd(isExpandingFullyAbove) + + onLaunchAnimationEnd() + } } override fun onTransitionAnimationProgress( diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt index cc55df129c33..8e824e60d449 100644 --- a/packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt +++ b/packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt @@ -357,26 +357,13 @@ class TransitionAnimator( Log.d(TAG, "Animation ended") } - // onAnimationEnd is called at the end of the animation, on a Choreographer - // animation tick. During dialog launches, the following calls will move the - // animated content from the dialog overlay back to its original position, and - // this change must be reflected in the next frame given that we then sync the - // next frame of both the content and dialog ViewRoots. During SysUI activity - // launches, we will instantly collapse the shade at the end of the transition. - // However, if those are rendered by Compose, whose compositions are also - // scheduled on a Choreographer frame, any state change made *right now* won't - // be reflected in the next frame given that a Choreographer frame can't - // schedule another and have it happen in the same frame. So we post the - // forwarded calls to [Controller.onLaunchAnimationEnd] in the main executor, - // leaving this Choreographer frame, ensuring that any state change applied by - // onTransitionAnimationEnd() will be reflected in the same frame. - mainExecutor.execute { - controller.onTransitionAnimationEnd(isExpandingFullyAbove) - transitionContainerOverlay.remove(windowBackgroundLayer) - - if (moveBackgroundLayerWhenAppVisibilityChanges && controller.isLaunching) { - openingWindowSyncViewOverlay?.remove(windowBackgroundLayer) - } + // TODO(b/330672236): Post this to the main thread instead so that it does not + // flicker with Flexiglass enabled. + controller.onTransitionAnimationEnd(isExpandingFullyAbove) + transitionContainerOverlay.remove(windowBackgroundLayer) + + if (moveBackgroundLayerWhenAppVisibilityChanges && controller.isLaunching) { + openingWindowSyncViewOverlay?.remove(windowBackgroundLayer) } } } |