diff options
| author | 2023-04-06 10:13:47 +0000 | |
|---|---|---|
| committer | 2023-04-06 10:13:47 +0000 | |
| commit | 09e278cbb7abc898b4d4bb4601cbebbf40a9ccff (patch) | |
| tree | 9f85ce32369fd5fcf2c8573069250eebe890f0e3 | |
| parent | ff7b6fab86c5e69bea176278ec299ae1bd74fc30 (diff) | |
| parent | d0dd3403872c5ab526ffdb848e98cb47110fa1c8 (diff) | |
Merge "Fix a regression from miss detect cross-task target." into udc-dev
| -rw-r--r-- | data/etc/services.core.protolog.json | 6 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/BackNavigationController.java | 19 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/Transition.java | 5 |
3 files changed, 22 insertions, 8 deletions
diff --git a/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json index 2afd54b984a4..c106854c700b 100644 --- a/data/etc/services.core.protolog.json +++ b/data/etc/services.core.protolog.json @@ -883,6 +883,12 @@ "group": "WM_SHOW_TRANSACTIONS", "at": "com\/android\/server\/wm\/WindowSurfaceController.java" }, + "-1258739769": { + "message": "onTransactionReady, opening: %s, closing: %s, animating: %s, match: %b", + "level": "DEBUG", + "group": "WM_DEBUG_BACK_PREVIEW", + "at": "com\/android\/server\/wm\/BackNavigationController.java" + }, "-1257821162": { "message": "OUT SURFACE %s: copied", "level": "INFO", diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java index 587e7204f993..be80b010962b 100644 --- a/services/core/java/com/android/server/wm/BackNavigationController.java +++ b/services/core/java/com/android/server/wm/BackNavigationController.java @@ -585,14 +585,14 @@ class BackNavigationController { * The closing target should only exist in close list, but the opening target can be either in * open or close list. */ - void onTransactionReady(Transition transition) { + void onTransactionReady(Transition transition, ArrayList<Transition.ChangeInfo> targets) { if (!isMonitoringTransition()) { return; } - final ArraySet<WindowContainer> targets = transition.mParticipants; for (int i = targets.size() - 1; i >= 0; --i) { - final WindowContainer wc = targets.valueAt(i); - if (wc.asActivityRecord() == null && wc.asTask() == null) { + final WindowContainer wc = targets.get(i).mContainer; + if (wc.asActivityRecord() == null && wc.asTask() == null + && wc.asTaskFragment() == null) { continue; } // WC can be visible due to setLaunchBehind @@ -605,6 +605,9 @@ class BackNavigationController { final boolean matchAnimationTargets = isWaitBackTransition() && (transition.mType == TRANSIT_CLOSE || transition.mType == TRANSIT_TO_BACK) && mAnimationHandler.containsBackAnimationTargets(mTmpOpenApps, mTmpCloseApps); + ProtoLog.d(WM_DEBUG_BACK_PREVIEW, + "onTransactionReady, opening: %s, closing: %s, animating: %s, match: %b", + mTmpOpenApps, mTmpCloseApps, mAnimationHandler, matchAnimationTargets); if (!matchAnimationTargets) { mNavigationMonitor.onTransitionReadyWhileNavigate(mTmpOpenApps, mTmpCloseApps); } else { @@ -829,10 +832,16 @@ class BackNavigationController { if (!mComposed) { return false; } + + // WC must be ActivityRecord in legacy transition, but it also can be Task or + // TaskFragment when using Shell transition. + // Open target: Can be Task or ActivityRecord or TaskFragment + // Close target: Limit to the top activity for now, to reduce the chance of misjudgment. final WindowContainer target = open ? mOpenAdaptor.mTarget : mCloseAdaptor.mTarget; if (mSwitchType == TASK_SWITCH) { return wc == target - || (wc.asTask() != null && wc.hasChild(target)); + || (wc.asTask() != null && wc.hasChild(target)) + || (wc.asActivityRecord() != null && target.hasChild(wc)); } else if (mSwitchType == ACTIVITY_SWITCH) { return wc == target || (wc.asTaskFragment() != null && wc.hasChild(target)); } diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 1fb353476592..3cc154892e33 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -1199,13 +1199,12 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { if (primaryDisplay.isKeyguardLocked()) { mFlags |= TRANSIT_FLAG_KEYGUARD_LOCKED; } - // Check whether the participants were animated from back navigation. - mController.mAtm.mBackNavigationController.onTransactionReady(this); - collectOrderChanges(); // Resolve the animating targets from the participants. mTargets = calculateTargets(mParticipants, mChanges); + // Check whether the participants were animated from back navigation. + mController.mAtm.mBackNavigationController.onTransactionReady(this, mTargets); final TransitionInfo info = calculateTransitionInfo(mType, mFlags, mTargets, transaction); info.setDebugId(mSyncId); |