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

Commit e9f622dc authored by Chilun Huang's avatar Chilun Huang Committed by Android (Google) Code Review
Browse files

Merge "Reuse tasks in background in priority for split screen" into tm-qpr-dev

parents ef8e3203 8e89deb7
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import static com.android.wm.shell.common.ExecutorUtils.executeRemoteCallWithTas
import android.app.ActivityManager;
import android.app.ActivityTaskManager;
import android.app.TaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.os.RemoteException;
import android.util.Slog;
@@ -327,6 +328,28 @@ public class RecentTasksController implements TaskStackListenerCallback,
        return recentTasks;
    }

    /**
     * Find the background task that match the given component.
     */
    @Nullable
    public ActivityManager.RecentTaskInfo findTaskInBackground(ComponentName componentName) {
        if (componentName == null) {
            return null;
        }
        List<ActivityManager.RecentTaskInfo> tasks = getRawRecentTasks(Integer.MAX_VALUE,
                ActivityManager.RECENT_IGNORE_UNAVAILABLE, ActivityManager.getCurrentUser());
        for (int i = 0; i < tasks.size(); i++) {
            final ActivityManager.RecentTaskInfo task = tasks.get(i);
            if (task.isVisible) {
                continue;
            }
            if (componentName.equals(task.baseIntent.getComponent())) {
                return task;
            }
        }
        return null;
    }

    public void dump(@NonNull PrintWriter pw, String prefix) {
        final String innerPrefix = prefix + "  ";
        pw.println(prefix + TAG);
+12 −1
Original line number Diff line number Diff line
@@ -385,6 +385,9 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
            }
            @Override
            public void onAnimationCancelled(boolean isKeyguardOccluded) {
                final WindowContainerTransaction evictWct = new WindowContainerTransaction();
                mStageCoordinator.prepareEvictInvisibleChildTasks(evictWct);
                mSyncQueue.queue(evictWct);
            }
        };
        options = mStageCoordinator.resolveStartStage(STAGE_TYPE_UNDEFINED, position, options,
@@ -472,8 +475,16 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
        fillInIntent.addFlags(FLAG_ACTIVITY_NO_USER_ACTION);

        // Flag with MULTIPLE_TASK if this is launching the same activity into both sides of the
        // split.
        // split and there is no reusable background task.
        if (shouldAddMultipleTaskFlag(intent.getIntent(), position)) {
            final ActivityManager.RecentTaskInfo taskInfo = mRecentTasksOptional.isPresent()
                    ? mRecentTasksOptional.get().findTaskInBackground(
                            intent.getIntent().getComponent())
                    : null;
            if (taskInfo != null) {
                startTask(taskInfo.taskId, position, options);
                return;
            }
            fillInIntent.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK);
            ProtoLog.v(ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN, "Adding MULTIPLE_TASK");
        }