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

Commit a415f72f authored by Min Chen's avatar Min Chen Committed by Android (Google) Code Review
Browse files

Merge "Add `displayId` to `GroupedTaskInfo`" into main

parents 09db53bb a6465e6a
Loading
Loading
Loading
Loading
+34 −7
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.wm.shell.shared;

import static android.app.WindowConfiguration.windowingModeToString;
import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
import static android.view.Display.INVALID_DISPLAY;

import android.annotation.IntDef;
import android.app.ActivityManager.RecentTaskInfo;
@@ -64,6 +65,11 @@ public class GroupedTaskInfo implements Parcelable {
     */
    private final int mDeskId;

    /**
     * The ID of the display that desk with [mDeskId] is in.
     */
    private final int mDeskDisplayId;

    /**
     * The type of this particular task info, can be one of TYPE_FULLSCREEN, TYPE_SPLIT or
     * TYPE_DESK.
@@ -109,8 +115,9 @@ public class GroupedTaskInfo implements Parcelable {
     * Create new for a stack of fullscreen tasks
     */
    public static GroupedTaskInfo forFullscreenTasks(@NonNull TaskInfo task) {
        return new GroupedTaskInfo(/* deskId = */ -1, List.of(task), null, TYPE_FULLSCREEN,
                /* minimizedFreeformTaskIds = */ null);
        return new GroupedTaskInfo(/* deskId = */ -1, /* displayId = */ INVALID_DISPLAY,
                List.of(task), null,
                TYPE_FULLSCREEN, /* minimizedFreeformTaskIds = */ null);
    }

    /**
@@ -118,8 +125,9 @@ public class GroupedTaskInfo implements Parcelable {
     */
    public static GroupedTaskInfo forSplitTasks(@NonNull TaskInfo task1,
            @NonNull TaskInfo task2, @NonNull SplitBounds splitBounds) {
        return new GroupedTaskInfo(/* deskId = */ -1, List.of(task1, task2), splitBounds,
                TYPE_SPLIT, /* minimizedFreeformTaskIds = */ null);
        return new GroupedTaskInfo(/* deskId = */ -1, /* displayId = */ INVALID_DISPLAY,
                List.of(task1, task2),
                splitBounds, TYPE_SPLIT, /* minimizedFreeformTaskIds = */ null);
    }

    /**
@@ -127,9 +135,11 @@ public class GroupedTaskInfo implements Parcelable {
     */
    public static GroupedTaskInfo forDeskTasks(
            int deskId,
            int deskDisplayId,
            @NonNull List<TaskInfo> tasks,
            @NonNull Set<Integer> minimizedFreeformTaskIds) {
        return new GroupedTaskInfo(deskId, tasks, /* splitBounds = */ null, TYPE_DESK,
        return new GroupedTaskInfo(deskId, deskDisplayId, tasks, /* splitBounds = */ null,
                TYPE_DESK,
                minimizedFreeformTaskIds.stream().mapToInt(i -> i).toArray());
    }

@@ -149,11 +159,13 @@ public class GroupedTaskInfo implements Parcelable {

    private GroupedTaskInfo(
            int deskId,
            int deskDisplayId,
            @NonNull List<TaskInfo> tasks,
            @Nullable SplitBounds splitBounds,
            @GroupType int type,
            @Nullable int[] minimizedFreeformTaskIds) {
        mDeskId = deskId;
        mDeskDisplayId = deskDisplayId;
        mTasks = tasks;
        mGroupedTasks = null;
        mSplitBounds = splitBounds;
@@ -164,6 +176,7 @@ public class GroupedTaskInfo implements Parcelable {

    private GroupedTaskInfo(@NonNull List<GroupedTaskInfo> groupedTasks) {
        mDeskId = -1;
        mDeskDisplayId = INVALID_DISPLAY;
        mTasks = null;
        mGroupedTasks = groupedTasks;
        mSplitBounds = null;
@@ -185,6 +198,7 @@ public class GroupedTaskInfo implements Parcelable {

    protected GroupedTaskInfo(@NonNull Parcel parcel) {
        mDeskId = parcel.readInt();
        mDeskDisplayId = parcel.readInt();
        mTasks = new ArrayList();
        final int numTasks = parcel.readInt();
        for (int i = 0; i < numTasks; i++) {
@@ -294,6 +308,16 @@ public class GroupedTaskInfo implements Parcelable {
        return mDeskId;
    }

    /**
     * Returns the ID of the display that hosts the desk represented by [mDeskId].
     */
    public int getDeskDisplayId() {
        if (mType != TYPE_DESK) {
            throw new IllegalStateException("No display ID for non desktop task");
        }
        return mDeskDisplayId;
    }

    /**
     * Get type of this recents entry. One of {@link GroupType}.
     * Note: This is deprecated, callers should use `isBaseType()` and not make assumptions about
@@ -323,6 +347,7 @@ public class GroupedTaskInfo implements Parcelable {
        }
        GroupedTaskInfo other = (GroupedTaskInfo) obj;
        return mDeskId == other.mDeskId
                && mDeskDisplayId == other.mDeskDisplayId
                && mType == other.mType
                && Objects.equals(mTasks, other.mTasks)
                && Objects.equals(mGroupedTasks, other.mGroupedTasks)
@@ -332,7 +357,7 @@ public class GroupedTaskInfo implements Parcelable {

    @Override
    public int hashCode() {
        return Objects.hash(mDeskId, mType, mTasks, mGroupedTasks, mSplitBounds,
        return Objects.hash(mDeskId, mDeskDisplayId, mType, mTasks, mGroupedTasks, mSplitBounds,
                Arrays.hashCode(mMinimizedTaskIds));
    }

@@ -345,6 +370,7 @@ public class GroupedTaskInfo implements Parcelable {
                    .collect(Collectors.joining(",\n\t", "[\n\t", "\n]")));
        } else {
            taskString.append("Desk ID= ").append(mDeskId).append(", ");
            taskString.append("Desk Display ID=").append(mDeskDisplayId).append(", ");
            taskString.append("Tasks=" + mTasks.stream()
                    .map(taskInfo -> getTaskInfoDumpString(taskInfo))
                    .collect(Collectors.joining(", ", "[", "]")));
@@ -377,6 +403,7 @@ public class GroupedTaskInfo implements Parcelable {
    @Override
    public void writeToParcel(Parcel parcel, int flags) {
        parcel.writeInt(mDeskId);
        parcel.writeInt(mDeskDisplayId);
        // We don't use the parcel list methods because we want to only write the TaskInfo state
        // and not the subclasses (Recents/RunningTaskInfo) whose fields are all deprecated
        final int tasksSize = mTasks != null ? mTasks.size() : 0;
+10 −5
Original line number Diff line number Diff line
@@ -536,17 +536,20 @@ public class RecentTasksController implements TaskStackListenerCallback,
    }

    /**
     * Represents a desk whose ID is `mDeskId` and contains the tasks in `mDeskTasks`. Some of these
     * tasks are minimized and their IDs are contained in the `mMinimizedDeskTasks` set.
     * Represents a desk whose ID is `mDeskId` inside the display with `mDisplayId` and contains
     * the tasks in `mDeskTasks`. Some of these tasks are minimized and their IDs are contained
     * in the `mMinimizedDeskTasks` set.
     */
    private static class Desk {
        final int mDeskId;
        final int mDisplayId;
        boolean mHasVisibleTasks = false;
        final ArrayList<TaskInfo> mDeskTasks = new ArrayList<>();
        final Set<Integer> mMinimizedDeskTasks = new HashSet<>();

        Desk(int deskId) {
        Desk(int deskId, int displayId) {
            mDeskId = deskId;
            mDisplayId = displayId;
        }

        void addTask(TaskInfo taskInfo, boolean isMinimized, boolean isVisible) {
@@ -562,7 +565,8 @@ public class RecentTasksController implements TaskStackListenerCallback,
        }

        GroupedTaskInfo createDeskTaskInfo() {
            return GroupedTaskInfo.forDeskTasks(mDeskId, mDeskTasks, mMinimizedDeskTasks);
            return GroupedTaskInfo.forDeskTasks(mDeskId, mDisplayId, mDeskTasks,
                    mMinimizedDeskTasks);
        }
    }

@@ -601,7 +605,8 @@ public class RecentTasksController implements TaskStackListenerCallback,
    private Desk getOrCreateDesk(int deskId) {
        var desk = mTmpDesks.get(deskId);
        if (desk == null) {
            desk = new Desk(deskId);
            desk = new Desk(deskId,
                    mDesktopUserRepositories.get().getCurrent().getDisplayForDesk(deskId));
            mTmpDesks.put(deskId, desk);
        }
        return desk;
+4 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.app.TaskInfo
import android.graphics.Rect
import android.os.Parcel
import android.testing.AndroidTestingRunner
import android.view.Display.DEFAULT_DISPLAY
import android.window.IWindowContainerToken
import android.window.WindowContainerToken
import androidx.test.filters.SmallTest
@@ -281,7 +282,8 @@ class GroupedTaskInfoTest : ShellTestCase() {
        val task2 = createTaskInfo(id = 2)

        val taskInfo = GroupedTaskInfo.forDeskTasks(
            /* deskId = */ 500, listOf(task1, task2), setOf())
            /* deskId = */ 500, DEFAULT_DISPLAY, listOf(task1, task2), setOf()
        )

        assertThat(taskInfo.deskId).isEqualTo(500)
        assertThat(taskInfo.getTaskById(1)).isEqualTo(task1)
@@ -335,6 +337,7 @@ class GroupedTaskInfoTest : ShellTestCase() {
    ): GroupedTaskInfo {
        return GroupedTaskInfo.forDeskTasks(
            deskId,
            DEFAULT_DISPLAY,
            freeformTaskIds.map { createTaskInfo(it) }.toList(),
            minimizedTaskIds.toSet())
    }