Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 88f0f08b authored by Kazuki Takise's avatar Kazuki Takise
Browse files

Collect tasks when windowing mode of parent display changes

When the windowing mode of a display is updated, the tasks in it
can change, but it's not collected now.

Bug: 225295924
Test: manual
Change-Id: Ief58575e99f51afe6ecfe79dd270d67863cfa0ea
parent 9fcf0aac
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -549,7 +549,7 @@ public class DisplayRotation {
            // Go through all tasks and collect them before the rotation
            // Go through all tasks and collect them before the rotation
            // TODO(shell-transitions): move collect() to onConfigurationChange once wallpaper
            // TODO(shell-transitions): move collect() to onConfigurationChange once wallpaper
            //       handling is synchronized.
            //       handling is synchronized.
            mDisplayContent.mTransitionController.collectForDisplayChange(mDisplayContent,
            mDisplayContent.mTransitionController.collectForDisplayAreaChange(mDisplayContent,
                    null /* use collecting transition */);
                    null /* use collecting transition */);
        }
        }
        mService.mAtmService.deferWindowLayout();
        mService.mAtmService.deferWindowLayout();
+1 −1
Original line number Original line Diff line number Diff line
@@ -101,7 +101,7 @@ public class PhysicalDisplaySwitchTransitionLauncher {


        if (t != null) {
        if (t != null) {
            mDisplayContent.mAtmService.startLaunchPowerMode(POWER_MODE_REASON_CHANGE_DISPLAY);
            mDisplayContent.mAtmService.startLaunchPowerMode(POWER_MODE_REASON_CHANGE_DISPLAY);
            mTransitionController.collectForDisplayChange(mDisplayContent, t);
            mTransitionController.collectForDisplayAreaChange(mDisplayContent, t);
            mTransition = t;
            mTransition = t;
        }
        }
    }
    }
+11 −8
Original line number Original line Diff line number Diff line
@@ -460,24 +460,27 @@ class TransitionController {
     * Collects the window containers which need to be synced with the changing display (e.g.
     * 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.
     * 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) incoming = mCollectingTransition;
        if (incoming == null) return;
        if (incoming == null) return;
        final Transition transition = incoming;
        final Transition transition = incoming;
        // Collect all visible tasks.
        // Collect all visible tasks.
        dc.forAllLeafTasks(task -> {
        wc.forAllLeafTasks(task -> {
            if (task.isVisible()) {
            if (task.isVisible()) {
                transition.collect(task);
                transition.collect(task);
            }
            }
        }, true /* traverseTopToBottom */);
        }, true /* traverseTopToBottom */);
        // Collect all visible non-app windows which need to be drawn before the animation starts.
        // Collect all visible non-app windows which need to be drawn before the animation starts.
        dc.forAllWindows(w -> {
        final DisplayContent dc = wc.asDisplayContent();
        if (dc != null) {
            wc.forAllWindows(w -> {
                if (w.mActivityRecord == null && w.isVisible() && !isCollecting(w.mToken)
                if (w.mActivityRecord == null && w.isVisible() && !isCollecting(w.mToken)
                        && dc.shouldSyncRotationChange(w)) {
                        && dc.shouldSyncRotationChange(w)) {
                    transition.collect(w.mToken);
                    transition.collect(w.mToken);
                }
                }
            }, true /* traverseTopToBottom */);
            }, true /* traverseTopToBottom */);
        }
        }
    }


    /** @see Transition#mStatusBarTransitionDelay */
    /** @see Transition#mStatusBarTransitionDelay */
    void setStatusBarTransitionDelay(long delay) {
    void setStatusBarTransitionDelay(long delay) {
+10 −1
Original line number Original line Diff line number Diff line
@@ -397,7 +397,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
                    // Go through all tasks and collect them before the rotation
                    // Go through all tasks and collect them before the rotation
                    // TODO(shell-transitions): move collect() to onConfigurationChange once
                    // TODO(shell-transitions): move collect() to onConfigurationChange once
                    //       wallpaper handling is synchronized.
                    //       wallpaper handling is synchronized.
                    dc.mTransitionController.collectForDisplayChange(dc, transition);
                    dc.mTransitionController.collectForDisplayAreaChange(dc, transition);
                    dc.sendNewConfiguration();
                    dc.sendNewConfiguration();
                    effects |= TRANSACT_EFFECTS_LIFECYCLE;
                    effects |= TRANSACT_EFFECTS_LIFECYCLE;
                }
                }
@@ -421,6 +421,15 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
                    addToSyncSet(syncId, wc);
                    addToSyncSet(syncId, wc);
                }
                }
                if (transition != null) transition.collect(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()
                if ((entry.getValue().getChangeMask()
                        & WindowContainerTransaction.Change.CHANGE_FORCE_NO_PIP) != 0) {
                        & WindowContainerTransaction.Change.CHANGE_FORCE_NO_PIP) != 0) {