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

Commit e757afdd authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Allow tasks to specify behavior on parent removal." into main

parents 9a31e251 5b2eb450
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ interface ITaskOrganizerController {
    * {@link WindowContainerTransaction#removeRootTask}.
    */
    void createRootTask(int displayId, int windowingMode, IBinder launchCookie,
            boolean removeWithTaskOrganizer);
            boolean removeWithTaskOrganizer, boolean reparentOnDisplayRemoval);

    /** Deletes a persistent root task in WM */
    boolean deleteRootTask(in WindowContainerToken task);
+6 −3
Original line number Diff line number Diff line
@@ -149,14 +149,16 @@ public class TaskOrganizer extends WindowOrganizer {
     * @param launchCookie Launch cookie to associate with the task so that is can be identified
     *                     when the {@link ITaskOrganizer#onTaskAppeared} callback is called.
     * @param removeWithTaskOrganizer True if this task should be removed when organizer destroyed.
     * @param reparentOnDisplayRemoval True if this task should be reparented when its display
     *                                is removed.
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
    public void createRootTask(int displayId, int windowingMode, @Nullable IBinder launchCookie,
            boolean removeWithTaskOrganizer) {
            boolean removeWithTaskOrganizer, boolean reparentOnDisplayRemoval) {
        try {
            mTaskOrganizerController.createRootTask(displayId, windowingMode, launchCookie,
                    removeWithTaskOrganizer);
                    removeWithTaskOrganizer, reparentOnDisplayRemoval);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -172,7 +174,8 @@ public class TaskOrganizer extends WindowOrganizer {
    @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
    @Nullable
    public void createRootTask(int displayId, int windowingMode, @Nullable IBinder launchCookie) {
        createRootTask(displayId, windowingMode, launchCookie, false /* removeWithTaskOrganizer */);
        createRootTask(displayId, windowingMode, launchCookie, false /* removeWithTaskOrganizer */,
                false /* reparentOnDisplayRemoval */);
    }

    /** Deletes a persistent root task in WM */
+16 −1
Original line number Diff line number Diff line
@@ -309,11 +309,26 @@ public class ShellTaskOrganizer extends TaskOrganizer {
     */
    public void createRootTask(int displayId, int windowingMode, TaskListener listener,
            boolean removeWithTaskOrganizer) {
        createRootTask(displayId, windowingMode, listener, removeWithTaskOrganizer,
                false /* reparentOnDisplayRemoval */);
    }

    /**
     * Creates a persistent root task in WM for a particular windowing-mode.
     * @param displayId The display to create the root task on.
     * @param windowingMode Windowing mode to put the root task in.
     * @param listener The listener to get the created task callback.
     * @param removeWithTaskOrganizer True if this task should be removed when organizer destroyed.
     * @param reparentOnDisplayRemoval True if this task should be reparented on display removal.
     */
    public void createRootTask(int displayId, int windowingMode, TaskListener listener,
            boolean removeWithTaskOrganizer, boolean reparentOnDisplayRemoval) {
        ProtoLog.v(WM_SHELL_TASK_ORG, "createRootTask() displayId=%d winMode=%d listener=%s" ,
                displayId, windowingMode, listener.toString());
        final IBinder cookie = new Binder();
        setPendingLaunchCookieListener(cookie, listener);
        super.createRootTask(displayId, windowingMode, cookie, removeWithTaskOrganizer);
        super.createRootTask(displayId, windowingMode, cookie, removeWithTaskOrganizer,
                reparentOnDisplayRemoval);
    }

    /**
+6 −0
Original line number Diff line number Diff line
@@ -146,6 +146,9 @@ class RootTaskDesksOrganizer(
            WINDOWING_MODE_FREEFORM,
            /* listener = */ this,
            /* removeWithTaskOrganizer = */ true,
            /* reparentOnDisplayRemoval = */ DesktopExperienceFlags
                .ENABLE_DISPLAY_DISCONNECT_INTERACTION
                .isTrue,
        )
    }

@@ -513,6 +516,9 @@ class RootTaskDesksOrganizer(
            WINDOWING_MODE_FREEFORM,
            /* listener = */ this,
            /* removeWithTaskOrganizer = */ true,
            /* reparentOnDisplayRemoval = */ DesktopExperienceFlags
                .ENABLE_DISPLAY_DISCONNECT_INTERACTION
                .isTrue,
        )
    }

+17 −2
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.testing.AndroidTestingRunner
import android.view.Display.DEFAULT_DISPLAY
import android.view.SurfaceControl
import android.view.WindowManager.TRANSIT_TO_FRONT
import android.window.DesktopExperienceFlags
import android.window.DisplayAreaInfo
import android.window.TransitionInfo
import android.window.WindowContainerToken
@@ -235,7 +236,13 @@ class RootTaskDesksOrganizerTest : ShellTestCase() {

        // Only one desk attempt.
        verify(mockShellTaskOrganizer, times(1))
            .createRootTask(displayId, WINDOWING_MODE_FREEFORM, organizer, true)
            .createRootTask(
                displayId,
                WINDOWING_MODE_FREEFORM,
                organizer,
                true,
                DesktopExperienceFlags.ENABLE_DISPLAY_DISCONNECT_INTERACTION.isTrue,
            )
    }

    @Test
@@ -248,7 +255,13 @@ class RootTaskDesksOrganizerTest : ShellTestCase() {

        // One for the warmup/first desk and one for the second desk.
        verify(mockShellTaskOrganizer, times(2))
            .createRootTask(displayId, WINDOWING_MODE_FREEFORM, organizer, true)
            .createRootTask(
                displayId,
                WINDOWING_MODE_FREEFORM,
                organizer,
                true,
                DesktopExperienceFlags.ENABLE_DISPLAY_DISCONNECT_INTERACTION.isTrue,
            )
    }

    @Test
@@ -938,6 +951,7 @@ class RootTaskDesksOrganizerTest : ShellTestCase() {
                    WINDOWING_MODE_FREEFORM,
                    organizer,
                    true,
                    DesktopExperienceFlags.ENABLE_DISPLAY_DISCONNECT_INTERACTION.isTrue,
                )
            )
            .thenAnswer { invocation ->
@@ -972,6 +986,7 @@ class RootTaskDesksOrganizerTest : ShellTestCase() {
                    WINDOWING_MODE_FREEFORM,
                    organizer,
                    true,
                    DesktopExperienceFlags.ENABLE_DISPLAY_DISCONNECT_INTERACTION.isTrue,
                )
            )
            .thenAnswer { invocation ->
Loading