summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author wilsonshih <wilsonshih@google.com> 2024-08-23 10:36:03 +0000
committer wilsonshih <wilsonshih@google.com> 2024-08-26 06:43:13 +0000
commit640808610d06365e117e24e7f28dcfa6d087e684 (patch)
tree323492bf9deda9439dd8e4e94e24d5b6f08c136f
parent8ad726d8cd086fdd249b3a63d921154d7168c55b (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.java1
-rw-r--r--services/core/java/com/android/server/wm/BackNavigationController.java14
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, () -> {