From 1e76eb50aaade0308fb7bcd51a04f415adb435dd Mon Sep 17 00:00:00 2001 From: Evan Rosky Date: Tue, 28 Mar 2023 17:35:36 -0700 Subject: [PATCH] Fix some places where we could abort an already-requested transition This can leave the player in a confused state since the contract is that, once we send a request, then we will send a corresponding ready. Bug: 270228517 Test: Just moved code around a little, so existing tests should pass. Change-Id: I6871befadc2603029af6402f4cb4d4b2ac55f8b8 --- .../server/wm/ActivityClientController.java | 14 ++++++-------- services/core/java/com/android/server/wm/Task.java | 4 ++-- .../android/server/wm/WindowManagerService.java | 7 ------- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityClientController.java b/services/core/java/com/android/server/wm/ActivityClientController.java index f14a432f73aec..ff1c28ad19731 100644 --- a/services/core/java/com/android/server/wm/ActivityClientController.java +++ b/services/core/java/com/android/server/wm/ActivityClientController.java @@ -778,13 +778,12 @@ class ActivityClientController extends IActivityClientController.Stub { && r.mTransitionController.inPlayingTransition(r) && !r.mTransitionController.isCollecting() ? r.mTransitionController.createTransition(TRANSIT_TO_BACK) : null; - if (transition != null) { - r.mTransitionController.requestStartTransition(transition, null /*startTask */, - null /* remoteTransition */, null /* displayChange */); - } final boolean changed = r != null && r.setOccludesParent(true); if (transition != null) { if (changed) { + r.mTransitionController.requestStartTransition(transition, + null /*startTask */, null /* remoteTransition */, + null /* displayChange */); r.mTransitionController.setReady(r.getDisplayContent()); } else { transition.abort(); @@ -818,13 +817,12 @@ class ActivityClientController extends IActivityClientController.Stub { final Transition transition = r.mTransitionController.inPlayingTransition(r) && !r.mTransitionController.isCollecting() ? r.mTransitionController.createTransition(TRANSIT_TO_FRONT) : null; - if (transition != null) { - r.mTransitionController.requestStartTransition(transition, null /*startTask */, - null /* remoteTransition */, null /* displayChange */); - } final boolean changed = r.setOccludesParent(false); if (transition != null) { if (changed) { + r.mTransitionController.requestStartTransition(transition, + null /*startTask */, null /* remoteTransition */, + null /* displayChange */); r.mTransitionController.setReady(r.getDisplayContent()); } else { transition.abort(); diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 5a4615ad95780..b7e2265e3a16f 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -5636,8 +5636,6 @@ class Task extends TaskFragment { mWmService.mSyncEngine.queueSyncSet( () -> mTransitionController.moveToCollecting(transition), () -> { - mTransitionController.requestStartTransition(transition, tr, - null /* remoteTransition */, null /* displayChange */); // Need to check again since this happens later and the system might // be in a different state. if (!canMoveTaskToBack(tr)) { @@ -5646,6 +5644,8 @@ class Task extends TaskFragment { transition.abort(); return; } + mTransitionController.requestStartTransition(transition, tr, + null /* remoteTransition */, null /* displayChange */); moveTaskToBackInner(tr); }); } else { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 14c826d71af70..a7a90604f2286 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -88,7 +88,6 @@ import static android.view.WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; import static android.view.WindowManager.REMOVE_CONTENT_MODE_UNDEFINED; import static android.view.WindowManager.TRANSIT_NONE; -import static android.view.WindowManager.TRANSIT_TO_FRONT; import static android.view.WindowManager.fixScale; import static android.view.WindowManagerGlobal.ADD_OKAY; import static android.view.WindowManagerGlobal.RELAYOUT_RES_CANCEL_AND_REDRAW; @@ -8537,13 +8536,7 @@ public class WindowManagerService extends IWindowManager.Stub } } - // focus-transfer can re-order windows and thus potentially causes visible changes: - final Transition transition = mAtmService.getTransitionController() - .requestTransitionIfNeeded(TRANSIT_TO_FRONT, task); mAtmService.setFocusedTask(task.mTaskId, touchedActivity); - if (transition != null) { - transition.setReady(task, true /* ready */); - } } /**