summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/RootWindowContainer.java13
-rw-r--r--services/core/java/com/android/server/wm/TaskDisplayArea.java3
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;