Merge "Fix black screen after moving top activity to another display" into sc-dev am: 4c0806317a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15226381

Change-Id: I1d86e6060214563a53a4936bd5fe0a38749b8c20
This commit is contained in:
TreeHugger Robot
2021-07-08 04:28:08 +00:00
committed by Automerger Merge Worker
4 changed files with 7 additions and 11 deletions

View File

@@ -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 // Only update focus/visibility for the last one because there may be many root tasks are
// reparented and the intermediate states are unnecessary. // reparented and the intermediate states are unnecessary.
if (lastReparentedRootTask != null) { if (lastReparentedRootTask != null) {
lastReparentedRootTask.postReparent(); lastReparentedRootTask.resumeNextFocusAfterReparent();
} }
} }
} }

View File

@@ -5683,7 +5683,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
// Only update focus/visibility for the last one because there may be many root tasks are // Only update focus/visibility for the last one because there may be many root tasks are
// reparented and the intermediate states are unnecessary. // reparented and the intermediate states are unnecessary.
if (lastReparentedRootTask != null) { if (lastReparentedRootTask != null) {
lastReparentedRootTask.postReparent(); lastReparentedRootTask.resumeNextFocusAfterReparent();
} }
releaseSelfIfNeeded(); releaseSelfIfNeeded();
mDisplayPolicy.release(); mDisplayPolicy.release();

View File

@@ -66,7 +66,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.PRESERVE_WINDOWS;
import static com.android.server.wm.ActivityTaskSupervisor.dumpHistoryList; import static com.android.server.wm.ActivityTaskSupervisor.dumpHistoryList;
import static com.android.server.wm.ActivityTaskSupervisor.printThisActivity; 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.IS_HOME_RECENTS_COMPONENT;
import static com.android.server.wm.RootWindowContainerProto.KEYGUARD_CONTROLLER; import static com.android.server.wm.RootWindowContainerProto.KEYGUARD_CONTROLLER;
import static com.android.server.wm.RootWindowContainerProto.WINDOW_CONTAINER; import static com.android.server.wm.RootWindowContainerProto.WINDOW_CONTAINER;
@@ -2077,6 +2076,10 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
+ " to its current taskDisplayArea=" + taskDisplayArea); + " to its current taskDisplayArea=" + taskDisplayArea);
} }
rootTask.reparent(taskDisplayArea, onTop); 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. // TODO(multi-display): resize rootTasks properly if moved from split-screen.
} }

View File

@@ -1464,12 +1464,6 @@ class Task extends WindowContainer<WindowContainer> {
adjustBoundsForDisplayChangeIfNeeded(getDisplayContent()); adjustBoundsForDisplayChangeIfNeeded(getDisplayContent());
mRootWindowContainer.updateUIDsPresentOnDisplay(); 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();
}
} }
void cleanUpActivityReferences(ActivityRecord r) { void cleanUpActivityReferences(ActivityRecord r) {
@@ -5462,8 +5456,7 @@ class Task extends WindowContainer<WindowContainer> {
mRootWindowContainer.resumeFocusedTasksTopActivities(); mRootWindowContainer.resumeFocusedTasksTopActivities();
} }
/** Resume next focusable root task after reparenting to another display. */ void resumeNextFocusAfterReparent() {
void postReparent() {
adjustFocusToNextFocusableTask("reparent", true /* allowFocusSelf */, adjustFocusToNextFocusableTask("reparent", true /* allowFocusSelf */,
true /* moveDisplayToTop */); true /* moveDisplayToTop */);
mRootWindowContainer.resumeFocusedTasksTopActivities(); mRootWindowContainer.resumeFocusedTasksTopActivities();