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

Commit 910089a8 authored by Evan Rosky's avatar Evan Rosky
Browse files

Track recents like home for times when it is separated

when using 3p launchers, recents is a separate stack. As
such we need to make sure that the recents root is provided
when asked for just like home is.

Bug: 158851728
Test: Using 3p launcher in split-secondary, open recents
Change-Id: I90dc6e75a718aa142c870b87bd93081e259acdea
parent 0b2bb19d
Loading
Loading
Loading
Loading
+22 −0
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.wm;
package com.android.server.wm;


import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
@@ -99,6 +100,9 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
    private ActivityStack mRootPinnedTask;
    private ActivityStack mRootPinnedTask;
    private ActivityStack mRootSplitScreenPrimaryTask;
    private ActivityStack mRootSplitScreenPrimaryTask;


    // TODO(b/159029784): Remove when getStack() behavior is cleaned-up
    private ActivityStack mRootRecentsTask;

    private final ArrayList<ActivityStack> mTmpAlwaysOnTopStacks = new ArrayList<>();
    private final ArrayList<ActivityStack> mTmpAlwaysOnTopStacks = new ArrayList<>();
    private final ArrayList<ActivityStack> mTmpNormalStacks = new ArrayList<>();
    private final ArrayList<ActivityStack> mTmpNormalStacks = new ArrayList<>();
    private final ArrayList<ActivityStack> mTmpHomeStacks = new ArrayList<>();
    private final ArrayList<ActivityStack> mTmpHomeStacks = new ArrayList<>();
@@ -163,6 +167,8 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
    ActivityStack getStack(int windowingMode, int activityType) {
    ActivityStack getStack(int windowingMode, int activityType) {
        if (activityType == ACTIVITY_TYPE_HOME) {
        if (activityType == ACTIVITY_TYPE_HOME) {
            return mRootHomeTask;
            return mRootHomeTask;
        } else if (activityType == ACTIVITY_TYPE_RECENTS) {
            return mRootRecentsTask;
        }
        }
        if (windowingMode == WINDOWING_MODE_PINNED) {
        if (windowingMode == WINDOWING_MODE_PINNED) {
            return mRootPinnedTask;
            return mRootPinnedTask;
@@ -199,6 +205,10 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
        return mRootHomeTask;
        return mRootHomeTask;
    }
    }


    @Nullable ActivityStack getRootRecentsTask() {
        return mRootRecentsTask;
    }

    ActivityStack getRootPinnedTask() {
    ActivityStack getRootPinnedTask() {
        return mRootPinnedTask;
        return mRootPinnedTask;
    }
    }
@@ -237,6 +247,16 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
            } else {
            } else {
                mRootHomeTask = stack;
                mRootHomeTask = stack;
            }
            }
        } else if (stack.isActivityTypeRecents()) {
            if (mRootRecentsTask != null) {
                if (!stack.isDescendantOf(mRootRecentsTask)) {
                    throw new IllegalArgumentException("addStackReferenceIfNeeded: recents stack="
                            + mRootRecentsTask + " already exist on display=" + this
                            + " stack=" + stack);
                }
            } else {
                mRootRecentsTask = stack;
            }
        }
        }


        if (!stack.isRootTask()) {
        if (!stack.isRootTask()) {
@@ -264,6 +284,8 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
    void removeStackReferenceIfNeeded(ActivityStack stack) {
    void removeStackReferenceIfNeeded(ActivityStack stack) {
        if (stack == mRootHomeTask) {
        if (stack == mRootHomeTask) {
            mRootHomeTask = null;
            mRootHomeTask = null;
        } else if (stack == mRootRecentsTask) {
            mRootRecentsTask = null;
        } else if (stack == mRootPinnedTask) {
        } else if (stack == mRootPinnedTask) {
            mRootPinnedTask = null;
            mRootPinnedTask = null;
        } else if (stack == mRootSplitScreenPrimaryTask) {
        } else if (stack == mRootSplitScreenPrimaryTask) {