diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/RootWindowContainer.java | 13 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/TaskDisplayArea.java | 3 |
2 files changed, 10 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 7a442e708130..a2aea27614c9 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -2040,6 +2040,12 @@ class RootWindowContainer extends WindowContainer<DisplayContent> transitionController.deferTransitionReady(); mService.deferWindowLayout(); + boolean localVisibilityDeferred = false; + // If the caller is from WindowOrganizerController, it should be already deferred. + if (!mTaskSupervisor.isRootVisibilityUpdateDeferred()) { + mTaskSupervisor.setDeferRootVisibilityUpdate(true); + localVisibilityDeferred = true; + } try { // This will change the root pinned task's windowing mode to its original mode, ensuring // we only have one root task that is in pinned mode. @@ -2211,14 +2217,11 @@ class RootWindowContainer extends WindowContainer<DisplayContent> mService.mTaskFragmentOrganizerController.dispatchPendingInfoChangedEvent( organizedTf); } - - if (taskDisplayArea.getFocusedRootTask() == rootTask) { - taskDisplayArea.clearPreferredTopFocusableRootTask(); - } } finally { mService.continueWindowLayout(); try { - if (!isPip2ExperimentEnabled()) { + if (localVisibilityDeferred) { + mTaskSupervisor.setDeferRootVisibilityUpdate(false); ensureActivitiesVisible(null, 0, false /* preserveWindows */); } } finally { diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index ae794a89480a..f0a66540061d 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -412,7 +412,8 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> { // wasContained} restricts the preferred root task is set only when moving an existing // root task to top instead of adding a new root task that may be too early (e.g. in the // middle of launching or reparenting). - final boolean isTopFocusableTask = moveToTop && child.isTopActivityFocusable(); + final boolean isTopFocusableTask = moveToTop && child != mRootPinnedTask + && child.isTopActivityFocusable(); if (isTopFocusableTask) { mPreferredTopFocusableRootTask = child.shouldBeVisible(null /* starting */) ? child : null; |