Loading core/java/android/window/ITaskOrganizerController.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading core/java/android/window/TaskOrganizer.java +6 −3 Original line number Diff line number Diff line Loading @@ -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(); } Loading @@ -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 */ Loading libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +16 −1 Original line number Diff line number Diff line Loading @@ -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); } /** Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/multidesks/RootTaskDesksOrganizer.kt +6 −0 Original line number Diff line number Diff line Loading @@ -146,6 +146,9 @@ class RootTaskDesksOrganizer( WINDOWING_MODE_FREEFORM, /* listener = */ this, /* removeWithTaskOrganizer = */ true, /* reparentOnDisplayRemoval = */ DesktopExperienceFlags .ENABLE_DISPLAY_DISCONNECT_INTERACTION .isTrue, ) } Loading Loading @@ -513,6 +516,9 @@ class RootTaskDesksOrganizer( WINDOWING_MODE_FREEFORM, /* listener = */ this, /* removeWithTaskOrganizer = */ true, /* reparentOnDisplayRemoval = */ DesktopExperienceFlags .ENABLE_DISPLAY_DISCONNECT_INTERACTION .isTrue, ) } Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/multidesks/RootTaskDesksOrganizerTest.kt +17 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -938,6 +951,7 @@ class RootTaskDesksOrganizerTest : ShellTestCase() { WINDOWING_MODE_FREEFORM, organizer, true, DesktopExperienceFlags.ENABLE_DISPLAY_DISCONNECT_INTERACTION.isTrue, ) ) .thenAnswer { invocation -> Loading Loading @@ -972,6 +986,7 @@ class RootTaskDesksOrganizerTest : ShellTestCase() { WINDOWING_MODE_FREEFORM, organizer, true, DesktopExperienceFlags.ENABLE_DISPLAY_DISCONNECT_INTERACTION.isTrue, ) ) .thenAnswer { invocation -> Loading Loading
core/java/android/window/ITaskOrganizerController.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
core/java/android/window/TaskOrganizer.java +6 −3 Original line number Diff line number Diff line Loading @@ -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(); } Loading @@ -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 */ Loading
libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +16 −1 Original line number Diff line number Diff line Loading @@ -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); } /** Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/multidesks/RootTaskDesksOrganizer.kt +6 −0 Original line number Diff line number Diff line Loading @@ -146,6 +146,9 @@ class RootTaskDesksOrganizer( WINDOWING_MODE_FREEFORM, /* listener = */ this, /* removeWithTaskOrganizer = */ true, /* reparentOnDisplayRemoval = */ DesktopExperienceFlags .ENABLE_DISPLAY_DISCONNECT_INTERACTION .isTrue, ) } Loading Loading @@ -513,6 +516,9 @@ class RootTaskDesksOrganizer( WINDOWING_MODE_FREEFORM, /* listener = */ this, /* removeWithTaskOrganizer = */ true, /* reparentOnDisplayRemoval = */ DesktopExperienceFlags .ENABLE_DISPLAY_DISCONNECT_INTERACTION .isTrue, ) } Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/multidesks/RootTaskDesksOrganizerTest.kt +17 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -938,6 +951,7 @@ class RootTaskDesksOrganizerTest : ShellTestCase() { WINDOWING_MODE_FREEFORM, organizer, true, DesktopExperienceFlags.ENABLE_DISPLAY_DISCONNECT_INTERACTION.isTrue, ) ) .thenAnswer { invocation -> Loading Loading @@ -972,6 +986,7 @@ class RootTaskDesksOrganizerTest : ShellTestCase() { WINDOWING_MODE_FREEFORM, organizer, true, DesktopExperienceFlags.ENABLE_DISPLAY_DISCONNECT_INTERACTION.isTrue, ) ) .thenAnswer { invocation -> Loading