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

Commit 193d5154 authored by Maryam's avatar Maryam Committed by Maryam Dehaini
Browse files

Move Task Close to WindowContainerTransaction

Added removeTask HierarchyOp so that CaptionWIndowDecorModel now uses WindowContainerTransaction to remove task rather than IActivityTaskManager#removeTask(int)

Bug: 242094334
Test: Manual testing using acloud and unit testing (atest WmTests:WindowContainerTransactionTests)

Change-Id: I9e2f1946a517bdba6a75b7049f00943d729045f0
parent 9d16d9da
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -3393,6 +3393,7 @@ package android.window {
    method @NonNull public android.window.WindowContainerTransaction createTaskFragment(@NonNull android.window.TaskFragmentCreationParams);
    method @NonNull public android.window.WindowContainerTransaction deleteTaskFragment(@NonNull android.window.WindowContainerToken);
    method public int describeContents();
    method @NonNull public android.window.WindowContainerTransaction removeTask(@NonNull android.window.WindowContainerToken);
    method @NonNull public android.window.WindowContainerTransaction reorder(@NonNull android.window.WindowContainerToken, boolean);
    method @NonNull public android.window.WindowContainerTransaction reparent(@NonNull android.window.WindowContainerToken, @Nullable android.window.WindowContainerToken, boolean);
    method @NonNull public android.window.WindowContainerTransaction reparentActivityToTaskFragment(@NonNull android.os.IBinder, @NonNull android.os.IBinder);
+21 −0
Original line number Diff line number Diff line
@@ -455,6 +455,17 @@ public final class WindowContainerTransaction implements Parcelable {
        return this;
    }

    /**
     * Finds and removes a task and its children using its container token. The task is removed
     * from recents.
     * @param containerToken ContainerToken of Task to be removed
     */
    @NonNull
    public WindowContainerTransaction removeTask(@NonNull WindowContainerToken containerToken) {
        mHierarchyOps.add(HierarchyOp.createForRemoveTask(containerToken.asBinder()));
        return this;
    }

    /**
     * Sends a pending intent in sync.
     * @param sender The PendingIntent sender.
@@ -1154,6 +1165,7 @@ public final class WindowContainerTransaction implements Parcelable {
        public static final int HIERARCHY_OP_TYPE_REMOVE_INSETS_PROVIDER = 17;
        public static final int HIERARCHY_OP_TYPE_REQUEST_FOCUS_ON_TASK_FRAGMENT = 18;
        public static final int HIERARCHY_OP_TYPE_SET_ALWAYS_ON_TOP = 19;
        public static final int HIERARCHY_OP_TYPE_REMOVE_TASK = 20;

        // The following key(s) are for use with mLaunchOptions:
        // When launching a task (eg. from recents), this is the taskId to be launched.
@@ -1283,6 +1295,13 @@ public final class WindowContainerTransaction implements Parcelable {
                    .build();
        }

        /** create a hierarchy op for deleting a task **/
        public static HierarchyOp createForRemoveTask(@NonNull IBinder container) {
            return new HierarchyOp.Builder(HIERARCHY_OP_TYPE_REMOVE_TASK)
                    .setContainer(container)
                    .build();
        }

        /** Only creates through {@link Builder}. */
        private HierarchyOp(int type) {
            mType = type;
@@ -1466,6 +1485,8 @@ public final class WindowContainerTransaction implements Parcelable {
                case HIERARCHY_OP_TYPE_SET_ALWAYS_ON_TOP:
                    return "{setAlwaysOnTop: container=" + mContainer
                            + " alwaysOnTop=" + mAlwaysOnTop + "}";
                case HIERARCHY_OP_TYPE_REMOVE_TASK:
                    return "{RemoveTask: task=" + mContainer + "}";
                default:
                    return "{mType=" + mType + " container=" + mContainer + " reparent=" + mReparent
                            + " mToTop=" + mToTop
+6 −0
Original line number Diff line number Diff line
@@ -97,6 +97,12 @@ public class FreeformTaskTransitionHandler
        mPendingTransitionTokens.add(mTransitions.startTransition(type, wct, this));
    }

    @Override
    public void startRemoveTransition(WindowContainerTransaction wct) {
        final int type = WindowManager.TRANSIT_CLOSE;
        mPendingTransitionTokens.add(mTransitions.startTransition(type, wct, this));
    }

    @Override
    public boolean startAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
            @NonNull SurfaceControl.Transaction startT,
+8 −0
Original line number Diff line number Diff line
@@ -40,4 +40,12 @@ public interface FreeformTaskTransitionStarter {
     *
     */
    void startMinimizedModeTransition(WindowContainerTransaction wct);

    /**
     * Starts close window transition
     *
     * @param wct the {@link WindowContainerTransaction} that closes the task
     *
     */
    void startRemoveTransition(WindowContainerTransaction wct);
}
 No newline at end of file
+7 −1
Original line number Diff line number Diff line
@@ -148,7 +148,13 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel<Caption
        public void onClick(View v) {
            final int id = v.getId();
            if (id == R.id.close_window) {
                mActivityTaskManager.removeTask(mTaskId);
                WindowContainerTransaction wct = new WindowContainerTransaction();
                wct.removeTask(mTaskToken);
                if (Transitions.ENABLE_SHELL_TRANSITIONS) {
                    mTransitionStarter.startRemoveTransition(wct);
                } else {
                    mSyncQueue.queue(wct);
                }
            } else if (id == R.id.maximize_window) {
                WindowContainerTransaction wct = new WindowContainerTransaction();
                RunningTaskInfo taskInfo = mTaskOrganizer.getRunningTaskInfo(mTaskId);
Loading