From 7970e4f95cc5cd1ff2f15f260168c95fd45569b0 Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Tue, 12 Mar 2024 18:19:39 +0800 Subject: Do not hide new adding window for rotated transient launch The hide operation is mainly used to avoid showing navigation bar with inconsistent rotation after recents activity switches to next app. So if the state stays at running recents, let the adding windows show normally. Bug: 302249163 Test: Disable home rotation. Launch landscape app. Enter recents. Long press power key. The power menu should be visible. Test: atest TransitionTests#testAppTransitionWithRotationChange Change-Id: I692df7227773ff4ca49ff50a02a2eb300dfcd241 --- .../java/com/android/server/wm/AsyncRotationController.java | 2 +- services/core/java/com/android/server/wm/DisplayContent.java | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/wm/AsyncRotationController.java b/services/core/java/com/android/server/wm/AsyncRotationController.java index 6ed896751bb3..e7fb26550886 100644 --- a/services/core/java/com/android/server/wm/AsyncRotationController.java +++ b/services/core/java/com/android/server/wm/AsyncRotationController.java @@ -642,7 +642,7 @@ class AsyncRotationController extends FadeAnimationController implements Consume // by drawing the rotated content before applying projection transaction of display. // And it will fade in after the display transition is finished. if (mTransitionOp == OP_APP_SWITCH && !mIsStartTransactionCommitted - && canBeAsync(w.mToken)) { + && canBeAsync(w.mToken) && !mDisplayContent.hasFixedRotationTransientLaunch()) { hideImmediately(w.mToken, Operation.ACTION_FADE); if (DEBUG) Slog.d(TAG, "Hide on finishDrawing " + w.mToken.getTopChild()); } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 282ecc77bd50..d6cd28be011b 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -1950,6 +1950,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp && mFixedRotationLaunchingApp != mFixedRotationTransitionListener.mAnimatingRecents; } + /** It usually means whether the recents activity is launching with a different rotation. */ + boolean hasFixedRotationTransientLaunch() { + return mFixedRotationLaunchingApp != null + && mTransitionController.isTransientLaunch(mFixedRotationLaunchingApp); + } + boolean isFixedRotationLaunchingApp(ActivityRecord r) { return mFixedRotationLaunchingApp == r; } @@ -7008,9 +7014,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp boolean shouldDeferRotation() { ActivityRecord source = null; if (mTransitionController.isShellTransitionsEnabled()) { - final ActivityRecord r = mFixedRotationLaunchingApp; - if (r != null && mTransitionController.isTransientLaunch(r)) { - source = r; + if (hasFixedRotationTransientLaunch()) { + source = mFixedRotationLaunchingApp; } } else if (mAnimatingRecents != null && !hasTopFixedRotationLaunchingApp()) { source = mAnimatingRecents; -- cgit v1.2.3-59-g8ed1b