diff options
| author | 2023-10-31 06:02:47 +0000 | |
|---|---|---|
| committer | 2023-10-31 06:02:47 +0000 | |
| commit | bea6f32ea8a2d9a56c06dc0b664f296bfa185e9c (patch) | |
| tree | c671355bbf41f166b95d3559490914a0a3ff4790 | |
| parent | 1372869193780620f7be1e68cf1395a31a9b7b0b (diff) | |
| parent | 9fb47fbafce7ce638581e294bde483e80190ce9e (diff) | |
Merge "Avoid additional focus change when entering PiP from fullscreen" into main
| -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 c81105a11cee..4a467dfbcd14 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -2054,6 +2054,12 @@ class RootWindowContainer extends WindowContainer<DisplayContent> Transition.ReadyCondition pipChangesApplied = new Transition.ReadyCondition("movedToPip"); transitionController.waitFor(pipChangesApplied); 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. @@ -2225,14 +2231,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; |