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

Commit 3a256e6a authored by Wale Ogunwale's avatar Wale Ogunwale
Browse files

Removed DisplayWindowController (43/n).

ActivityDisplay and DisplayContent now link directly to each other.

Bug: 80414790
Test: Existing tests pass.
Change-Id: Iae6a9626a238b2cec5562412771cb0a4c4883cad
parent 0b243df3
Loading
Loading
Loading
Loading
+61 −25
Original line number Diff line number Diff line
@@ -48,12 +48,16 @@ import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.RootActivityContainer.FindTaskResult;
import static com.android.server.wm.RootActivityContainer.TAG_STATES;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS_LIGHT;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL;

import android.annotation.Nullable;
import android.app.ActivityOptions;
import android.app.WindowConfiguration;
import android.content.res.Configuration;
import android.graphics.Point;
import android.os.IBinder;
import android.os.UserHandle;
import android.util.IntArray;
import android.util.Slog;
@@ -86,6 +90,8 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack>

    private ActivityTaskManagerService mService;
    private RootActivityContainer mRootActivityContainer;
    // TODO: Remove once unification is complete.
    DisplayContent mDisplayContent;
    /** Actual Display this object tracks. */
    int mDisplayId;
    Display mDisplay;
@@ -138,8 +144,6 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack>
    // Used in updating the display size
    private Point mTmpDisplaySize = new Point();

    private DisplayWindowController mWindowContainerController;

    private final FindTaskResult mTmpFindTaskResult = new FindTaskResult();

    ActivityDisplay(RootActivityContainer root, Display display) {
@@ -147,19 +151,15 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack>
        mService = root.mService;
        mDisplayId = display.getDisplayId();
        mDisplay = display;
        mWindowContainerController = createWindowContainerController();
        mDisplayContent = createDisplayContent();
        updateBounds();
    }

    protected DisplayWindowController createWindowContainerController() {
        return new DisplayWindowController(mDisplay, this);
    }

    DisplayWindowController getWindowContainerController() {
        return mWindowContainerController;
    protected DisplayContent createDisplayContent() {
        return mService.mWindowManager.mRoot.createDisplayContent(mDisplay, this);
    }

    void updateBounds() {
    private void updateBounds() {
        mDisplay.getRealSize(mTmpDisplaySize);
        setBounds(0, 0, mTmpDisplaySize.x, mTmpDisplaySize.y);
    }
@@ -178,7 +178,10 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack>
        }

        updateBounds();
        mWindowContainerController.onDisplayChanged();
        if (mDisplayContent != null) {
            mDisplayContent.updateDisplayInfo();
            mService.mWindowManager.requestTraversal();
        }
    }

    @Override
@@ -270,9 +273,9 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack>
        // ActivityStack#getWindowContainerController() can be null. In this special case,
        // since DisplayContest#positionStackAt() is called in TaskStack#onConfigurationChanged(),
        // we don't have to call WindowContainerController#positionChildAt() here.
        if (stack.getWindowContainerController() != null) {
            mWindowContainerController.positionChildAt(stack.getWindowContainerController(),
                    insertPosition, includingParents);
        if (stack.getWindowContainerController() != null && mDisplayContent != null) {
            mDisplayContent.positionStackAt(insertPosition,
                    stack.getWindowContainerController().mContainer, includingParents);
        }
        if (!wasContained) {
            stack.setParent(this);
@@ -958,17 +961,23 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack>
                getRequestedOverrideConfiguration().windowConfiguration.getRotation();
        if (currRotation != ROTATION_UNDEFINED
                && currRotation != overrideConfiguration.windowConfiguration.getRotation()
                && getWindowContainerController() != null) {
            getWindowContainerController().applyRotation(currRotation,
                && mDisplayContent != null) {
            mDisplayContent.applyRotationLocked(currRotation,
                    overrideConfiguration.windowConfiguration.getRotation());
        }
        super.onRequestedOverrideConfigurationChanged(overrideConfiguration);
        if (mDisplayContent != null) {
            mService.mWindowManager.setNewDisplayOverrideConfiguration(
                    overrideConfiguration, mDisplayContent);
        }
    }

    @Override
    public void onConfigurationChanged(Configuration newParentConfig) {
        // update resources before cascade so that docked/pinned stacks use the correct info
        getWindowContainerController().preOnConfigurationChanged();
        if (mDisplayContent != null) {
            mDisplayContent.preOnConfigurationChanged();
        }
        super.onConfigurationChanged(newParentConfig);
    }

@@ -1099,8 +1108,8 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack>

    private void releaseSelfIfNeeded() {
        if (mStacks.isEmpty() && mRemoved) {
            mWindowContainerController.removeContainer();
            mWindowContainerController = null;
            mDisplayContent.removeIfPossible();
            mDisplayContent = null;
            mRootActivityContainer.removeChild(this);
            mRootActivityContainer.mStackSupervisor
                    .getKeyguardController().onDisplayRemoved(mDisplayId);
@@ -1122,7 +1131,7 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack>
     * @see Display#FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS
     */
    boolean supportsSystemDecorations() {
        return mWindowContainerController.supportsSystemDecorations();
        return mDisplayContent.supportsSystemDecorations();
    }

    @VisibleForTesting
@@ -1136,7 +1145,30 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack>
    }

    void setFocusedApp(ActivityRecord r, boolean moveFocusNow) {
        mWindowContainerController.setFocusedApp(r.appToken, moveFocusNow);
        if (mDisplayContent == null) {
            return;
        }
        final AppWindowToken newFocus;
        final IBinder token = r.appToken;
        if (token == null) {
            if (DEBUG_FOCUS_LIGHT) Slog.v(TAG_WM, "Clearing focused app, displayId="
                    + mDisplayId);
            newFocus = null;
        } else {
            newFocus = mService.mWindowManager.mRoot.getAppWindowToken(token);
            if (newFocus == null) {
                Slog.w(TAG_WM, "Attempted to set focus to non-existing app token: " + token
                        + ", displayId=" + mDisplayId);
            }
            if (DEBUG_FOCUS_LIGHT) Slog.v(TAG_WM, "Set focused app to: " + newFocus
                    + " moveFocusNow=" + moveFocusNow + " displayId=" + mDisplayId);
        }

        final boolean changed = mDisplayContent.setFocusedApp(newFocus);
        if (moveFocusNow && changed) {
            mService.mWindowManager.updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL,
                    true /*updateInputWindows*/);
        }
    }

    /**
@@ -1284,17 +1316,21 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack>
    }

    /**
     * See {@link DisplayWindowController#deferUpdateImeTarget()}
     * See {@link DisplayContent#deferUpdateImeTarget()}
     */
    public void deferUpdateImeTarget() {
        mWindowContainerController.deferUpdateImeTarget();
        if (mDisplayContent != null) {
            mDisplayContent.deferUpdateImeTarget();
        }
    }

    /**
     * See {@link DisplayWindowController#deferUpdateImeTarget()}
     * See {@link DisplayContent#deferUpdateImeTarget()}
     */
    public void continueUpdateImeTarget() {
        mWindowContainerController.continueUpdateImeTarget();
        if (mDisplayContent != null) {
            mDisplayContent.continueUpdateImeTarget();
        }
    }

    public void dump(PrintWriter pw, String prefix) {
+1 −1
Original line number Diff line number Diff line
@@ -2942,7 +2942,7 @@ final class ActivityRecord extends ConfigurationContainer {
            final ActivityLifecycleItem lifecycleItem;
            if (andResume) {
                lifecycleItem = ResumeActivityItem.obtain(
                        getDisplay().getWindowContainerController().isNextTransitionForward());
                        getDisplay().mDisplayContent.isNextTransitionForward());
            } else {
                lifecycleItem = PauseActivityItem.obtain();
            }
+24 −27
Original line number Diff line number Diff line
@@ -574,7 +574,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
                // bounds were on the pre-rotated display.
                if (prevRotation != newRotation) {
                    mTmpRect2.set(mTmpRect);
                    getDisplay().getWindowContainerController().mContainer
                    getDisplay().mDisplayContent
                            .rotateBounds(newParentConfig.windowConfiguration.getBounds(),
                                    prevRotation, newRotation, mTmpRect2);
                    hasNewOverrideBounds = true;
@@ -609,8 +609,8 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
            } else if (
                    getRequestedOverrideWindowingMode() == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY) {
                Rect dockedBounds = display.getSplitScreenPrimaryStack().getBounds();
                final boolean isMinimizedDock = getDisplay().getWindowContainerController()
                        .mContainer.getDockedDividerController().isMinimizedDock();
                final boolean isMinimizedDock =
                        getDisplay().mDisplayContent.getDockedDividerController().isMinimizedDock();
                if (isMinimizedDock) {
                    TaskRecord topTask = display.getSplitScreenPrimaryStack().topTask();
                    if (topTask != null) {
@@ -2714,16 +2714,16 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
        // that the previous one will be hidden soon.  This way it can know
        // to ignore it when computing the desired screen orientation.
        boolean anim = true;
        final DisplayWindowController dwc = getDisplay().getWindowContainerController();
        final DisplayContent dc = getDisplay().mDisplayContent;
        if (prev != null) {
            if (prev.finishing) {
                if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION,
                        "Prepare close transition: prev=" + prev);
                if (mStackSupervisor.mNoAnimActivities.contains(prev)) {
                    anim = false;
                    dwc.prepareAppTransition(TRANSIT_NONE, false);
                    dc.prepareAppTransition(TRANSIT_NONE, false);
                } else {
                    dwc.prepareAppTransition(
                    dc.prepareAppTransition(
                            prev.getTaskRecord() == next.getTaskRecord() ? TRANSIT_ACTIVITY_CLOSE
                                    : TRANSIT_TASK_CLOSE, false);
                }
@@ -2733,9 +2733,9 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
                        "Prepare open transition: prev=" + prev);
                if (mStackSupervisor.mNoAnimActivities.contains(next)) {
                    anim = false;
                    dwc.prepareAppTransition(TRANSIT_NONE, false);
                    dc.prepareAppTransition(TRANSIT_NONE, false);
                } else {
                    dwc.prepareAppTransition(
                    dc.prepareAppTransition(
                            prev.getTaskRecord() == next.getTaskRecord() ? TRANSIT_ACTIVITY_OPEN
                                    : next.mLaunchTaskBehind ? TRANSIT_TASK_OPEN_BEHIND
                                            : TRANSIT_TASK_OPEN, false);
@@ -2745,9 +2745,9 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
            if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare open transition: no previous");
            if (mStackSupervisor.mNoAnimActivities.contains(next)) {
                anim = false;
                dwc.prepareAppTransition(TRANSIT_NONE, false);
                dc.prepareAppTransition(TRANSIT_NONE, false);
            } else {
                dwc.prepareAppTransition(TRANSIT_ACTIVITY_OPEN, false);
                dc.prepareAppTransition(TRANSIT_ACTIVITY_OPEN, false);
            }
        }

@@ -2869,8 +2869,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
                next.clearOptionsLocked();
                transaction.setLifecycleStateRequest(
                        ResumeActivityItem.obtain(next.app.getReportedProcState(),
                                getDisplay().getWindowContainerController()
                                        .isNextTransitionForward()));
                                getDisplay().mDisplayContent.isNextTransitionForward()));
                mService.getLifecycleManager().scheduleTransaction(transaction);

                if (DEBUG_STATES) Slog.d(TAG_STATES, "resumeTopActivityLocked: Resumed "
@@ -3072,11 +3071,11 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
        task.setFrontOfTask();

        if (!isHomeOrRecentsStack() || numActivities() > 0) {
            final DisplayWindowController dwc = getDisplay().getWindowContainerController();
            final DisplayContent dc = getDisplay().mDisplayContent;
            if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION,
                    "Prepare open transition: starting " + r);
            if ((r.intent.getFlags() & Intent.FLAG_ACTIVITY_NO_ANIMATION) != 0) {
                dwc.prepareAppTransition(TRANSIT_NONE, keepCurTransition);
                dc.prepareAppTransition(TRANSIT_NONE, keepCurTransition);
                mStackSupervisor.mNoAnimActivities.add(r);
            } else {
                int transit = TRANSIT_ACTIVITY_OPEN;
@@ -3095,7 +3094,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
                        transit = TRANSIT_TASK_OPEN;
                    }
                }
                dwc.prepareAppTransition(transit, keepCurTransition);
                dc.prepareAppTransition(transit, keepCurTransition);
                mStackSupervisor.mNoAnimActivities.remove(r);
            }
            boolean doShow = true;
@@ -3724,7 +3723,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
        int taskNdx = mTaskHistory.indexOf(finishedTask);
        final TaskRecord task = finishedTask;
        int activityNdx = task.mActivities.indexOf(r);
        getDisplay().getWindowContainerController().prepareAppTransition(
        getDisplay().mDisplayContent.prepareAppTransition(
                TRANSIT_CRASHING_ACTIVITY_CLOSE, false /* alwaysKeepCurrent */);
        finishActivityLocked(r, Activity.RESULT_CANCELED, null, reason, false);
        finishedTask = task;
@@ -3890,7 +3889,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
                    mService.getTaskChangeNotificationController().notifyTaskRemovalStarted(
                            task.taskId);
                }
                getDisplay().getWindowContainerController().prepareAppTransition(transit, false);
                getDisplay().mDisplayContent.prepareAppTransition(transit, false);

                // Tell window manager to prepare for this one to be removed.
                r.setVisibility(false);
@@ -3945,10 +3944,10 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
    }

    private void prepareActivityHideTransitionAnimation(ActivityRecord r, int transit) {
        final DisplayWindowController dwc = getDisplay().getWindowContainerController();
        dwc.prepareAppTransition(transit, false);
        final DisplayContent dc = getDisplay().mDisplayContent;
        dc.prepareAppTransition(transit, false);
        r.setVisibility(false);
        dwc.executeAppTransition();
        dc.executeAppTransition();
        if (!mStackSupervisor.mActivitiesWaitingForVisibleActivity.contains(r)) {
            mStackSupervisor.mActivitiesWaitingForVisibleActivity.add(r);
        }
@@ -4692,7 +4691,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
                ActivityOptions.abort(options);
            }
        }
        getDisplay().getWindowContainerController().prepareAppTransition(transit, false);
        getDisplay().mDisplayContent.prepareAppTransition(transit, false);
    }

    private void updateTaskMovement(TaskRecord task, boolean toFront) {
@@ -4761,8 +4760,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai

            if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare to front transition: task=" + tr);
            if (noAnimation) {
                getDisplay().getWindowContainerController().prepareAppTransition(
                        TRANSIT_NONE, false);
                getDisplay().mDisplayContent.prepareAppTransition(TRANSIT_NONE, false);
                if (r != null) {
                    mStackSupervisor.mNoAnimActivities.add(r);
                }
@@ -4844,8 +4842,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
        mTaskHistory.add(0, tr);
        updateTaskMovement(tr, false);

        getDisplay().getWindowContainerController().prepareAppTransition(
                TRANSIT_TASK_TO_BACK, false);
        getDisplay().mDisplayContent.prepareAppTransition(TRANSIT_TASK_TO_BACK, false);
        moveToBack("moveTaskToBackLocked", tr);

        if (inPinnedWindowingMode()) {
@@ -5170,7 +5167,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
                            + r.intent.getComponent().flattenToShortString());
                    // Force the destroy to skip right to removal.
                    r.app = null;
                    getDisplay().getWindowContainerController().prepareAppTransition(
                    getDisplay().mDisplayContent.prepareAppTransition(
                            TRANSIT_CRASHING_ACTIVITY_CLOSE, false /* alwaysKeepCurrent */);
                    finishCurrentActivityLocked(r, FINISH_IMMEDIATELY, false,
                            "handleAppCrashedLocked");
@@ -5508,7 +5505,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
    }

    void executeAppTransition(ActivityOptions options) {
        getDisplay().getWindowContainerController().executeAppTransition();
        getDisplay().mDisplayContent.executeAppTransition();
        ActivityOptions.abort(options);
    }

+3 −3
Original line number Diff line number Diff line
@@ -818,7 +818,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
                final ClientTransaction clientTransaction = ClientTransaction.obtain(
                        proc.getThread(), r.appToken);

                final DisplayWindowController dwc = r.getDisplay().getWindowContainerController();
                final DisplayContent dc = r.getDisplay().mDisplayContent;
                clientTransaction.addCallback(LaunchActivityItem.obtain(new Intent(r.intent),
                        System.identityHashCode(r), r.info,
                        // TODO: Have this take the merged configuration instead of separate global
@@ -827,12 +827,12 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
                        mergedConfiguration.getOverrideConfiguration(), r.compat,
                        r.launchedFromPackage, task.voiceInteractor, proc.getReportedProcState(),
                        r.icicle, r.persistentState, results, newIntents,
                        dwc.isNextTransitionForward(), profilerInfo));
                        dc.isNextTransitionForward(), profilerInfo));

                // Set desired final state.
                final ActivityLifecycleItem lifecycleItem;
                if (andResume) {
                    lifecycleItem = ResumeActivityItem.obtain(dwc.isNextTransitionForward());
                    lifecycleItem = ResumeActivityItem.obtain(dc.isNextTransitionForward());
                } else {
                    lifecycleItem = PauseActivityItem.obtain();
                }
+1 −1
Original line number Diff line number Diff line
@@ -1565,7 +1565,7 @@ class ActivityStarter {
                mTargetStack.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
                // Go ahead and tell window manager to execute app transition for this activity
                // since the app transition will not be triggered through the resume channel.
                mTargetStack.getDisplay().getWindowContainerController().executeAppTransition();
                mTargetStack.getDisplay().mDisplayContent.executeAppTransition();
            } else {
                // If the target stack was not previously focusable (previous top running activity
                // on that stack was not visible) then any prior calls to move the stack to the
Loading