diff options
| author | 2024-06-24 23:58:31 +0000 | |
|---|---|---|
| committer | 2024-06-25 20:32:38 +0000 | |
| commit | 43b2500a97505c5b56e94c47c57c419d06be863b (patch) | |
| tree | 56e87696ad7f0767b3f48ab8b68a83a78f810248 | |
| parent | 672d707f3b4ff39373c5c43867eb9f3d9191eac3 (diff) | |
Shell transitions not received when activity already open on another display
- Add condition to not abort the transition when the task has some change which is yet to be applied.
- Example - Display change in this case such as an activity that is already open on display 1 (distant display) and the activity is opened on display 2 (default display)
Flag: NONE (bugfix)
Bug: 349196013
Test: m
Test: Open Youtube when it is already open on the distant display and verify if the shell transitions are received or not.
Change-Id: Ib4949721eb77fb96eaa19e210f97b44163d4e4a5
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityStarter.java | 4 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/Transition.java | 6 |
2 files changed, 9 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index e9c08e0ac29d..717c3998aba4 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -1649,7 +1649,8 @@ class ActivityStarter { // activity, so this isn't just deliver-to-top && mMovedToTopActivity == null && !transitionController.hasOrderChanges() - && !transitionController.isTransientHide(startedActivityRootTask)) { + && !transitionController.isTransientHide(startedActivityRootTask) + && !newTransition.hasChanged(mLastStartActivityRecord)) { // We just delivered to top, so there isn't an actual transition here. if (!forceTransientTransition) { newTransition.abort(); @@ -1792,6 +1793,7 @@ class ActivityStarter { activity.destroyIfPossible("Removes redundant singleInstance"); } } + targetTaskTop.mTransitionController.collect(targetTaskTop); recordTransientLaunchIfNeeded(targetTaskTop); // Recycle the target task for this launch. startResult = diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index a029f38de128..a0d65f30ccb1 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -3230,6 +3230,12 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_WINDOW_MANAGER, TAG, cookie); } + boolean hasChanged(WindowContainer wc) { + final ChangeInfo chg = mChanges.get(wc); + if (chg == null) return false; + return chg.hasChanged(); + } + @VisibleForTesting static class ChangeInfo { private static final int FLAG_NONE = 0; |