diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index a68b3cb2a2ea5..12cfa26342449 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -813,7 +813,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { } boolean hasParticipatedDisplay = false; - boolean reportTaskStackChanged = false; + boolean hasVisibleTransientLaunch = false; // Commit all going-invisible containers for (int i = 0; i < mParticipants.size(); ++i) { final WindowContainer participant = mParticipants.valueAt(i); @@ -856,7 +856,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { && ar.isVisible()) { // Transient launch was committed, so report enteringAnimation ar.mEnteringAnimation = true; - reportTaskStackChanged = true; + hasVisibleTransientLaunch = true; // Since transient launches don't automatically take focus, make sure we // synchronize focus since we committed to the launch. @@ -900,8 +900,14 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { } } - if (reportTaskStackChanged) { + if (hasVisibleTransientLaunch) { + // Notify the change about the transient-below task that becomes invisible. mController.mAtm.getTaskChangeNotificationController().notifyTaskStackChanged(); + // Prevent spurious background app switches. + mController.mAtm.stopAppSwitches(); + // The end of transient launch may not reorder task, so make sure to compute the latest + // task rank according to the current visibility. + mController.mAtm.mRootWindowContainer.rankTaskLayers(); } // dispatch legacy callback in a different loop. This is because multiple legacy handlers diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index aa10291a03649..694f1be67d1a9 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -1826,6 +1826,9 @@ public class WindowProcessController extends ConfigurationContainer