Allows the system window to be shown during the PB animation...

...if the predictive back animation triggers a fixed rotation animation.
So if the edge back window is drawn after the async rotation animation
has started, it won't remain hidden.

Flag: EXEMPT bugfix
Bug: 368296326
Test: launch app then rotation device, trigger back-to-home. Verify
the edge back window can be visible after gesture started.

Change-Id: Ib3f52357ea02a929348c97c86577eedb53243f47
diff --git a/services/core/java/com/android/server/wm/AsyncRotationController.java b/services/core/java/com/android/server/wm/AsyncRotationController.java
index f0a6e9e..dd1af0a 100644
--- a/services/core/java/com/android/server/wm/AsyncRotationController.java
+++ b/services/core/java/com/android/server/wm/AsyncRotationController.java
@@ -653,7 +653,9 @@
             // 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) && !mDisplayContent.hasFixedRotationTransientLaunch()) {
+                    && canBeAsync(w.mToken) && !mDisplayContent.hasFixedRotationTransientLaunch()
+                    && !mService.mAtmService.mBackNavigationController.hasFixedRotationAnimation(
+                            mDisplayContent)) {
                 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/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java
index 4ed8b09..3968b52 100644
--- a/services/core/java/com/android/server/wm/BackNavigationController.java
+++ b/services/core/java/com/android/server/wm/BackNavigationController.java
@@ -622,6 +622,15 @@
         }
     }
 
+    boolean hasFixedRotationAnimation(@NonNull DisplayContent displayContent) {
+        if (!mAnimationHandler.mComposed) {
+            return false;
+        }
+        final ActivityRecord openActivity = mAnimationHandler.mOpenActivities[0];
+        return displayContent == openActivity.mDisplayContent
+                && displayContent.isFixedRotationLaunchingApp(openActivity);
+    }
+
     private boolean isWaitBackTransition() {
         // Ignore mWaitTransition while flag is enabled.
         return mAnimationHandler.mComposed && (Flags.migratePredictiveBackTransition()