diff options
| author | 2024-08-23 10:36:03 +0000 | |
|---|---|---|
| committer | 2024-08-26 06:43:13 +0000 | |
| commit | 640808610d06365e117e24e7f28dcfa6d087e684 (patch) | |
| tree | 323492bf9deda9439dd8e4e94e24d5b6f08c136f | |
| parent | 8ad726d8cd086fdd249b3a63d921154d7168c55b (diff) | |
[PB] Fix windowless window could be remove too early
After migrate predictive back to shell transition, the opening
target only become visible after transition ready, so the remove
signal should be trigger when transition ready.
Flag: com.android.window.flags.migrate_predictive_back_transition
Bug: 361726487
Test: follow issue description, monitor the windowless window won't
get remove before app window show
Change-Id: I6c586e32ad4663cbc2585cafb26d775380709856
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/BackNavigationController.java | 14 |
2 files changed, 14 insertions, 1 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java index 27194b344780..33949f5d8d5f 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java @@ -1392,6 +1392,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont } // Handle the commit transition if this handler is running the open transition. finishCallback.onTransitionFinished(null); + t.apply(); if (mCloseTransitionRequested) { if (mApps == null || mApps.length == 0) { if (mQueuedTransition == null) { diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java index 2cbd7f22fcba..c44f838b56c1 100644 --- a/services/core/java/com/android/server/wm/BackNavigationController.java +++ b/services/core/java/com/android/server/wm/BackNavigationController.java @@ -1203,7 +1203,7 @@ class BackNavigationController { } void markWindowHasDrawn(ActivityRecord activity) { - if (!mComposed || mWaitTransition || mOpenAnimAdaptor.mPreparedOpenTransition == null + if (!mComposed || mWaitTransition || mOpenAnimAdaptor.mRequestedStartingSurfaceId == INVALID_TASK_ID) { return; } @@ -1215,6 +1215,10 @@ class BackNavigationController { } allWindowDrawn &= next.mAppWindowDrawn; } + // Do not remove until transition ready. + if (!activity.isVisible()) { + return; + } if (allWindowDrawn) { mOpenAnimAdaptor.cleanUpWindowlessSurface(true); } @@ -1289,6 +1293,14 @@ class BackNavigationController { if (mOpenAnimAdaptor.mRequestedStartingSurfaceId == INVALID_TASK_ID) { return; } + boolean allWindowDrawn = true; + for (int i = mOpenAnimAdaptor.mAdaptors.length - 1; i >= 0; --i) { + final BackWindowAnimationAdaptor next = mOpenAnimAdaptor.mAdaptors[i]; + allWindowDrawn &= next.mAppWindowDrawn; + } + if (!allWindowDrawn) { + return; + } final SurfaceControl startingSurface = mOpenAnimAdaptor.mStartingSurface; if (startingSurface != null && startingSurface.isValid()) { startTransaction.addTransactionCommittedListener(Runnable::run, () -> { |