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

Commit 7ca87c78 authored by Winson Chung's avatar Winson Chung
Browse files

Ignore pinned tasks for purposes of gesture nav

Bug: 234170890
Test: Enter content pip, swipe up and see if a duplicate stub taskview
      is created
Change-Id: I62a994749fcaeff48901410ede26b848fa15b830
parent 192b3c31
Loading
Loading
Loading
Loading
+22 −5
Original line number Diff line number Diff line
@@ -15,12 +15,13 @@
 */
package com.android.quickstep;

import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.content.Intent.ACTION_CHOOSER;
import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;

import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITION_TOP_OR_LEFT;
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.ACTIVITY_TYPE_ASSISTANT;

import android.app.ActivityManager.RunningTaskInfo;
import android.content.Context;
@@ -64,6 +65,7 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta

    private final StagedSplitTaskPosition mMainStagePosition = new StagedSplitTaskPosition();
    private final StagedSplitTaskPosition mSideStagePosition = new StagedSplitTaskPosition();
    private int mPinnedTaskId = INVALID_TASK_ID;

    private TopTaskTracker(Context context) {
        mMainStagePosition.stageType = SplitConfigurationOptions.STAGE_TYPE_MAIN;
@@ -132,8 +134,18 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta
        }
    }

    @Override
    public void onActivityPinned(String packageName, int userId, int taskId, int stackId) {
        mPinnedTaskId = taskId;
    }

    @Override
    public void onActivityUnpinned() {
        mPinnedTaskId = INVALID_TASK_ID;
    }

    private void resetTaskId(StagedSplitTaskPosition taskPosition) {
        taskPosition.taskId = -1;
        taskPosition.taskId = INVALID_TASK_ID;
    }

    /**
@@ -141,7 +153,8 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta
     *         Will return empty array if device is not in staged split
     */
    public int[] getRunningSplitTaskIds() {
        if (mMainStagePosition.taskId == -1 || mSideStagePosition.taskId == -1) {
        if (mMainStagePosition.taskId == INVALID_TASK_ID
                || mSideStagePosition.taskId == INVALID_TASK_ID) {
            return new int[]{};
        }
        int[] out = new int[2];
@@ -175,7 +188,11 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta
                            false /* filterOnlyVisibleRecents */));
            Collections.addAll(mOrderedTaskList, tasks);
        }
        return new CachedTaskInfo(new ArrayList<>(mOrderedTaskList));

        // Strip the pinned task
        ArrayList<RunningTaskInfo> tasks = new ArrayList<>(mOrderedTaskList);
        tasks.removeIf(t -> t.taskId == mPinnedTaskId);
        return new CachedTaskInfo(tasks);
    }

    /**
@@ -194,7 +211,7 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta
        }

        public int getTaskId() {
            return mTopTask == null ? -1 : mTopTask.taskId;
            return mTopTask == null ? INVALID_TASK_ID : mTopTask.taskId;
        }

        /**