From 5063db3b73e6c49b985bee4af5c8911c05793a8b Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Fri, 2 Jul 2021 13:55:18 +0800 Subject: [PATCH] Fix black screen after moving top activity to another display The screen was black after moving the top activity to another display. The next top activity did not be resumed and was still invisible. The regression was from bebd8cd, which incidentally reverse the condition. Since the case of removing a display is already handled by 402b440, #postReparent is not needed to call again in #reparent (when display is removing). Fixing the issue forward by resuming the focusable task in #moveRootTaskToTaskDisplayArea. Bug: 192616155 Test: atest ActivityTaskManagerServiceTests Change-Id: Id0971ad8a1c692fdb5376e2c077faa6f00dd61ac --- .../server/wm/DisplayAreaOrganizerController.java | 2 +- .../core/java/com/android/server/wm/DisplayContent.java | 2 +- .../java/com/android/server/wm/RootWindowContainer.java | 5 ++++- services/core/java/com/android/server/wm/Task.java | 9 +-------- 4 files changed, 7 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java b/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java index 2beb3780633e4..35add129309f1 100644 --- a/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java +++ b/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java @@ -353,7 +353,7 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl // Only update focus/visibility for the last one because there may be many root tasks are // reparented and the intermediate states are unnecessary. if (lastReparentedRootTask != null) { - lastReparentedRootTask.postReparent(); + lastReparentedRootTask.resumeNextFocusAfterReparent(); } } } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 8da5f08386c08..3c7ba871e26de 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -5696,7 +5696,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // Only update focus/visibility for the last one because there may be many root tasks are // reparented and the intermediate states are unnecessary. if (lastReparentedRootTask != null) { - lastReparentedRootTask.postReparent(); + lastReparentedRootTask.resumeNextFocusAfterReparent(); } releaseSelfIfNeeded(); mDisplayPolicy.release(); diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index c2b9796a3d940..d240b88965cc8 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -71,7 +71,6 @@ import static com.android.server.wm.ActivityTaskSupervisor.ON_TOP; import static com.android.server.wm.ActivityTaskSupervisor.PRESERVE_WINDOWS; import static com.android.server.wm.ActivityTaskSupervisor.dumpHistoryList; import static com.android.server.wm.ActivityTaskSupervisor.printThisActivity; -import static com.android.server.wm.RecentsAnimationController.REORDER_KEEP_IN_PLACE; import static com.android.server.wm.RootWindowContainerProto.IS_HOME_RECENTS_COMPONENT; import static com.android.server.wm.RootWindowContainerProto.KEYGUARD_CONTROLLER; import static com.android.server.wm.RootWindowContainerProto.WINDOW_CONTAINER; @@ -2078,6 +2077,10 @@ class RootWindowContainer extends WindowContainer + " to its current taskDisplayArea=" + taskDisplayArea); } rootTask.reparent(taskDisplayArea, onTop); + + // Resume focusable root task after reparenting to another display area. + rootTask.resumeNextFocusAfterReparent(); + // TODO(multi-display): resize rootTasks properly if moved from split-screen. } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index a6bf520561acf..42d56e4b9f190 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -1231,12 +1231,6 @@ class Task extends TaskFragment { adjustBoundsForDisplayChangeIfNeeded(getDisplayContent()); mRootWindowContainer.updateUIDsPresentOnDisplay(); - - // Resume next focusable root task after reparenting to another display if we aren't - // removing the prevous display. - if (oldDisplay != null && oldDisplay.isRemoving()) { - postReparent(); - } } /** Returns the currently topmost resumed activity. */ @@ -4514,8 +4508,7 @@ class Task extends TaskFragment { mRootWindowContainer.resumeFocusedTasksTopActivities(); } - /** Resume next focusable root task after reparenting to another display. */ - void postReparent() { + void resumeNextFocusAfterReparent() { adjustFocusToNextFocusableTask("reparent", true /* allowFocusSelf */, true /* moveDisplayToTop */); mRootWindowContainer.resumeFocusedTasksTopActivities();