diff options
| author | 2025-02-09 19:53:27 -0800 | |
|---|---|---|
| committer | 2025-02-09 19:53:27 -0800 | |
| commit | c1750a40a8e3a11ae598cc628a6b1d0529470df3 (patch) | |
| tree | 8b548101ec24fbd3fde0c3ac53216708d27dd597 | |
| parent | 5433f61b65f5efe5010fdaaafaa68bc338efd5c7 (diff) | |
| parent | 4c22055e9652497e608a174b1c31a89cf062f022 (diff) | |
Merge "Skip running window animation for invisible activity" into main
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 16 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowState.java | 37 |
2 files changed, 13 insertions, 40 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 5078e2f0ee10..20917ba21439 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -246,7 +246,6 @@ import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STARTING_WIND import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL; import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_WILL_PLACE_SURFACES; -import static com.android.server.wm.WindowManagerService.sEnableShellTransitions; import static com.android.server.wm.WindowState.LEGACY_POLICY_VISIBILITY; import static com.android.window.flags.Flags.enablePresentationForConnectedDisplays; @@ -5763,19 +5762,16 @@ final class ActivityRecord extends WindowToken { return; } - final int windowsCount = mChildren.size(); - // With Shell-Transition, the activity will running a transition when it is visible. - // It won't be included when fromTransition is true means the call from finishTransition. - final boolean runningAnimation = sEnableShellTransitions ? visible - : isAnimating(PARENTS, ANIMATION_TYPE_APP_TRANSITION); - for (int i = 0; i < windowsCount; i++) { - mChildren.get(i).onAppVisibilityChanged(visible, runningAnimation); + if (!visible) { + for (int i = mChildren.size() - 1; i >= 0; --i) { + mChildren.get(i).onAppCommitInvisible(); + } } setVisible(visible); setVisibleRequested(visible); ProtoLog.v(WM_DEBUG_APP_TRANSITIONS, "commitVisibility: %s: visible=%b" - + " visibleRequested=%b, isInTransition=%b, runningAnimation=%b, caller=%s", - this, isVisible(), mVisibleRequested, isInTransition(), runningAnimation, + + " visibleRequested=%b, inTransition=%b, caller=%s", + this, visible, mVisibleRequested, inTransition(), Debug.getCallers(5)); if (visible) { // If we are being set visible, and the starting window is not yet displayed, diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 84d8f840d849..f94bbb70befc 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2069,38 +2069,15 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP super.onMovedByResize(); } - void onAppVisibilityChanged(boolean visible, boolean runningAppAnimation) { + void onAppCommitInvisible() { for (int i = mChildren.size() - 1; i >= 0; --i) { - mChildren.get(i).onAppVisibilityChanged(visible, runningAppAnimation); + mChildren.get(i).onAppCommitInvisible(); } - - final boolean isVisibleNow = isVisibleNow(); - if (mAttrs.type == TYPE_APPLICATION_STARTING) { - // Starting window that's exiting will be removed when the animation finishes. - // Mark all relevant flags for that onExitAnimationDone will proceed all the way - // to actually remove it. - if (!visible && isVisibleNow && mActivityRecord.isAnimating(PARENTS | TRANSITION)) { - ProtoLog.d(WM_DEBUG_ANIM, - "Set animatingExit: reason=onAppVisibilityChanged win=%s", this); - mAnimatingExit = true; - mRemoveOnExit = true; - mWindowRemovalAllowed = true; - } - } else if (visible != isVisibleNow) { - // Run exit animation if: - // 1. App visibility and WS visibility are different - // 2. App is not running an animation - // 3. WS is currently visible - if (!runningAppAnimation && isVisibleNow) { - final AccessibilityController accessibilityController = - mWmService.mAccessibilityController; - final int winTransit = TRANSIT_EXIT; - mWinAnimator.applyAnimationLocked(winTransit, false /* isEntrance */); - if (accessibilityController.hasCallbacks()) { - accessibilityController.onWindowTransition(this, winTransit); - } - } - setDisplayLayoutNeeded(); + if (mAttrs.type != TYPE_APPLICATION_STARTING + && mWmService.mAccessibilityController.hasCallbacks() + // It is a change only if App visibility and WS visibility are different. + && isVisible()) { + mWmService.mAccessibilityController.onWindowTransition(this, TRANSIT_EXIT); } } |