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

Commit 093aba3d authored by Wale Ogunwale's avatar Wale Ogunwale
Browse files

Have createRootTask return TaskAppearInfo

We return TaskAppearInfo on TaskOrganizer#createRootTask so it doesn't
have to wait for taskAppeared signal to take action.

Also, added createRootTask(..., listener) method to ShellTaskOrganizer
so that a specific listener can be associated with a root task we are
creating.

Bug: 169266958
Test: split-screen works.
Change-Id: I5948e623481deadb0aa5fc99b9941914f44a68e2
parent 0e6581c1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -5753,7 +5753,7 @@ package android.window {

  public class TaskOrganizer extends android.window.WindowOrganizer {
    ctor public TaskOrganizer();
    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public android.app.ActivityManager.RunningTaskInfo createRootTask(int, int);
    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public android.window.TaskAppearedInfo createRootTask(int, int);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public boolean deleteRootTask(@NonNull android.window.WindowContainerToken);
    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public java.util.List<android.app.ActivityManager.RunningTaskInfo> getChildTasks(@NonNull android.window.WindowContainerToken, @NonNull int[]);
    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public android.window.WindowContainerToken getImeTarget(int);
+6 −2
Original line number Diff line number Diff line
@@ -39,8 +39,12 @@ interface ITaskOrganizerController {
     */
    void unregisterTaskOrganizer(ITaskOrganizer organizer);

    /** Creates a persistent root task in WM for a particular windowing-mode. */
    ActivityManager.RunningTaskInfo createRootTask(int displayId, int windowingMode);
    /**
     * Creates a persistent root task in WM for a particular windowing-mode.
     * {@link TaskOrganizer#onTaskAppeared} won't be called since we are returning
     * {@link TaskAppearedInfo} here.
     */
    TaskAppearedInfo createRootTask(int displayId, int windowingMode);

    /** Deletes a persistent root task in WM */
    boolean deleteRootTask(in WindowContainerToken task);
+1 −1
Original line number Diff line number Diff line
@@ -99,7 +99,7 @@ public class TaskOrganizer extends WindowOrganizer {
    /** Creates a persistent root task in WM for a particular windowing-mode. */
    @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
    @Nullable
    public ActivityManager.RunningTaskInfo createRootTask(int displayId, int windowingMode) {
    public TaskAppearedInfo createRootTask(int displayId, int windowingMode) {
        try {
            return mTaskOrganizerController.createRootTask(displayId, windowingMode);
        } catch (RemoteException e) {
+6 −0
Original line number Diff line number Diff line
@@ -31,6 +31,12 @@
      "group": "WM_SHELL_TASK_ORG",
      "at": "com\/android\/wm\/shell\/ShellTaskOrganizer.java"
    },
    "-1312360667": {
      "message": "createRootTask() displayId=%d winMode=%d listener=%s",
      "level": "VERBOSE",
      "group": "WM_SHELL_TASK_ORG",
      "at": "com\/android\/wm\/shell\/ShellTaskOrganizer.java"
    },
    "-880817403": {
      "message": "Task vanished taskId=%d",
      "level": "VERBOSE",
+23 −5
Original line number Diff line number Diff line
@@ -128,11 +128,24 @@ public class ShellTaskOrganizer extends TaskOrganizer {
            final TaskAppearedInfo info = taskInfos.get(i);
            ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TASK_ORG, "Existing task: id=%d component=%s",
                    info.getTaskInfo().taskId, info.getTaskInfo().baseIntent);
            onTaskAppeared(info.getTaskInfo(), info.getLeash());
            onTaskAppeared(info);
        }
        return taskInfos;
    }

    public TaskAppearedInfo createRootTask(
            int displayId, int windowingMode, TaskListener listener) {
        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TASK_ORG,
                "createRootTask() displayId=%d winMode=%d listener=%s",
                displayId, windowingMode, listener.toString());
        final TaskAppearedInfo info = super.createRootTask(displayId, windowingMode);

        // Add the listener and send the task appeared signal
        mTaskListeners.put(info.getTaskInfo().taskId, listener);
        onTaskAppeared(info);
        return info;
    }

    /**
     * Adds a listener for a specific task id.
     */
@@ -216,12 +229,17 @@ public class ShellTaskOrganizer extends TaskOrganizer {

    @Override
    public void onTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) {
        ProtoLog.v(WM_SHELL_TASK_ORG, "Task appeared taskId=%d", taskInfo.taskId);
        mTasks.put(taskInfo.taskId, new TaskAppearedInfo(taskInfo, leash));
        onTaskAppeared(new TaskAppearedInfo(taskInfo, leash));
    }

    private void onTaskAppeared(TaskAppearedInfo info) {
        final int taskId = info.getTaskInfo().taskId;
        ProtoLog.v(WM_SHELL_TASK_ORG, "Task appeared taskId=%d", taskId);
        mTasks.put(taskId, info);
        final TaskListener listener =
                getTaskListener(taskInfo, true /*removeLaunchCookieIfNeeded*/);
                getTaskListener(info.getTaskInfo(), true /*removeLaunchCookieIfNeeded*/);
        if (listener != null) {
            listener.onTaskAppeared(taskInfo, leash);
            listener.onTaskAppeared(info.getTaskInfo(), info.getLeash());
        }
    }

Loading