Merge "Collect tasks when windowing mode of parent display changes" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
cbef171d2f
@@ -549,7 +549,7 @@ public class DisplayRotation {
|
||||
// Go through all tasks and collect them before the rotation
|
||||
// TODO(shell-transitions): move collect() to onConfigurationChange once wallpaper
|
||||
// handling is synchronized.
|
||||
mDisplayContent.mTransitionController.collectForDisplayChange(mDisplayContent,
|
||||
mDisplayContent.mTransitionController.collectForDisplayAreaChange(mDisplayContent,
|
||||
null /* use collecting transition */);
|
||||
}
|
||||
mService.mAtmService.deferWindowLayout();
|
||||
|
||||
@@ -101,7 +101,7 @@ public class PhysicalDisplaySwitchTransitionLauncher {
|
||||
|
||||
if (t != null) {
|
||||
mDisplayContent.mAtmService.startLaunchPowerMode(POWER_MODE_REASON_CHANGE_DISPLAY);
|
||||
mTransitionController.collectForDisplayChange(mDisplayContent, t);
|
||||
mTransitionController.collectForDisplayAreaChange(mDisplayContent, t);
|
||||
mTransition = t;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -460,23 +460,26 @@ class TransitionController {
|
||||
* Collects the window containers which need to be synced with the changing display (e.g.
|
||||
* rotating) to the given transition or the current collecting transition.
|
||||
*/
|
||||
void collectForDisplayChange(@NonNull DisplayContent dc, @Nullable Transition incoming) {
|
||||
void collectForDisplayAreaChange(@NonNull DisplayArea<?> wc, @Nullable Transition incoming) {
|
||||
if (incoming == null) incoming = mCollectingTransition;
|
||||
if (incoming == null) return;
|
||||
final Transition transition = incoming;
|
||||
// Collect all visible tasks.
|
||||
dc.forAllLeafTasks(task -> {
|
||||
wc.forAllLeafTasks(task -> {
|
||||
if (task.isVisible()) {
|
||||
transition.collect(task);
|
||||
}
|
||||
}, true /* traverseTopToBottom */);
|
||||
// Collect all visible non-app windows which need to be drawn before the animation starts.
|
||||
dc.forAllWindows(w -> {
|
||||
if (w.mActivityRecord == null && w.isVisible() && !isCollecting(w.mToken)
|
||||
&& dc.shouldSyncRotationChange(w)) {
|
||||
transition.collect(w.mToken);
|
||||
}
|
||||
}, true /* traverseTopToBottom */);
|
||||
final DisplayContent dc = wc.asDisplayContent();
|
||||
if (dc != null) {
|
||||
wc.forAllWindows(w -> {
|
||||
if (w.mActivityRecord == null && w.isVisible() && !isCollecting(w.mToken)
|
||||
&& dc.shouldSyncRotationChange(w)) {
|
||||
transition.collect(w.mToken);
|
||||
}
|
||||
}, true /* traverseTopToBottom */);
|
||||
}
|
||||
}
|
||||
|
||||
/** @see Transition#mStatusBarTransitionDelay */
|
||||
|
||||
@@ -397,7 +397,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
|
||||
// Go through all tasks and collect them before the rotation
|
||||
// TODO(shell-transitions): move collect() to onConfigurationChange once
|
||||
// wallpaper handling is synchronized.
|
||||
dc.mTransitionController.collectForDisplayChange(dc, transition);
|
||||
dc.mTransitionController.collectForDisplayAreaChange(dc, transition);
|
||||
dc.sendNewConfiguration();
|
||||
effects |= TRANSACT_EFFECTS_LIFECYCLE;
|
||||
}
|
||||
@@ -421,6 +421,15 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
|
||||
addToSyncSet(syncId, wc);
|
||||
}
|
||||
if (transition != null) transition.collect(wc);
|
||||
final DisplayArea da = wc.asDisplayArea();
|
||||
// Only check DisplayArea here as a similar thing is done for DisplayContent above.
|
||||
if (da != null && wc.asDisplayContent() == null
|
||||
&& entry.getValue().getWindowingMode() != da.getWindowingMode()) {
|
||||
// Go through all tasks and collect them before changing the windowing mode of a
|
||||
// display-level container.
|
||||
// TODO(shell-transitions): handle this more elegantly.
|
||||
da.mTransitionController.collectForDisplayAreaChange(da, transition);
|
||||
}
|
||||
|
||||
if ((entry.getValue().getChangeMask()
|
||||
& WindowContainerTransaction.Change.CHANGE_FORCE_NO_PIP) != 0) {
|
||||
|
||||
Reference in New Issue
Block a user