Loading libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +12 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.graphics.Point; import android.os.Bundle; import android.os.RemoteException; import android.util.Slog; Loading @@ -46,6 +47,7 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.internal.protolog.ProtoLog; import com.android.window.flags.Flags; import com.android.wm.shell.common.ExternalInterfaceBinder; import com.android.wm.shell.common.RemoteCallable; import com.android.wm.shell.common.ShellExecutor; Loading Loading @@ -421,6 +423,16 @@ public class RecentTasksController implements TaskStackListenerCallback, if (mostRecentFreeformTaskIndex == Integer.MAX_VALUE) { mostRecentFreeformTaskIndex = recentTasks.size(); } // If task has their app bounds set to null which happens after reboot, set the // app bounds to persisted lastFullscreenBounds. Also set the position in parent // to the top left of the bounds. if (Flags.enableDesktopWindowingPersistence() && taskInfo.configuration.windowConfiguration.getAppBounds() == null) { taskInfo.configuration.windowConfiguration.setAppBounds( taskInfo.lastNonFullscreenBounds); taskInfo.positionInParent = new Point(taskInfo.lastNonFullscreenBounds.left, taskInfo.lastNonFullscreenBounds.top); } freeformTasks.add(taskInfo); if (mDesktopModeTaskRepository.get().isMinimizedTask(taskInfo.taskId)) { minimizedFreeformTasks.add(taskInfo.taskId); Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java +37 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession; import static com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_PERSISTENCE; import static com.android.wm.shell.shared.split.SplitScreenConstants.SNAP_TO_2_50_50; import static org.junit.Assert.assertEquals; Loading Loading @@ -50,6 +51,7 @@ import android.app.KeyguardManager; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; import android.graphics.Point; import android.graphics.Rect; import android.os.Bundle; import android.platform.test.annotations.DisableFlags; Loading Loading @@ -440,6 +442,40 @@ public class RecentTasksControllerTest extends ShellTestCase { assertEquals(t4, singleGroup2.getTaskInfo1()); } @Test @EnableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_PERSISTENCE) public void testGetRecentTasks_hasDesktopTasks_persistenceEnabled_freeformTaskHaveBoundsSet() { ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1); ActivityManager.RecentTaskInfo t2 = makeTaskInfo(2); t1.lastNonFullscreenBounds = new Rect(100, 200, 300, 400); t2.lastNonFullscreenBounds = new Rect(150, 250, 350, 450); setRawList(t1, t2); when(mDesktopModeTaskRepository.isActiveTask(1)).thenReturn(true); when(mDesktopModeTaskRepository.isActiveTask(2)).thenReturn(true); ArrayList<GroupedRecentTaskInfo> recentTasks = mRecentTasksController.getRecentTasks( MAX_VALUE, RECENT_IGNORE_UNAVAILABLE, 0); assertEquals(1, recentTasks.size()); GroupedRecentTaskInfo freeformGroup = recentTasks.get(0); // Check bounds assertEquals(t1.lastNonFullscreenBounds, freeformGroup.getTaskInfoList().get( 0).configuration.windowConfiguration.getAppBounds()); assertEquals(t2.lastNonFullscreenBounds, freeformGroup.getTaskInfoList().get( 1).configuration.windowConfiguration.getAppBounds()); // Check position in parent assertEquals(new Point(t1.lastNonFullscreenBounds.left, t1.lastNonFullscreenBounds.top), freeformGroup.getTaskInfoList().get(0).positionInParent); assertEquals(new Point(t2.lastNonFullscreenBounds.left, t2.lastNonFullscreenBounds.top), freeformGroup.getTaskInfoList().get(1).positionInParent); } @Test public void testRemovedTaskRemovesSplit() { ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1); Loading Loading @@ -623,6 +659,7 @@ public class RecentTasksControllerTest extends ShellTestCase { private ActivityManager.RecentTaskInfo makeTaskInfo(int taskId) { ActivityManager.RecentTaskInfo info = new ActivityManager.RecentTaskInfo(); info.taskId = taskId; info.lastNonFullscreenBounds = new Rect(); return info; } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +12 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.graphics.Point; import android.os.Bundle; import android.os.RemoteException; import android.util.Slog; Loading @@ -46,6 +47,7 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.internal.protolog.ProtoLog; import com.android.window.flags.Flags; import com.android.wm.shell.common.ExternalInterfaceBinder; import com.android.wm.shell.common.RemoteCallable; import com.android.wm.shell.common.ShellExecutor; Loading Loading @@ -421,6 +423,16 @@ public class RecentTasksController implements TaskStackListenerCallback, if (mostRecentFreeformTaskIndex == Integer.MAX_VALUE) { mostRecentFreeformTaskIndex = recentTasks.size(); } // If task has their app bounds set to null which happens after reboot, set the // app bounds to persisted lastFullscreenBounds. Also set the position in parent // to the top left of the bounds. if (Flags.enableDesktopWindowingPersistence() && taskInfo.configuration.windowConfiguration.getAppBounds() == null) { taskInfo.configuration.windowConfiguration.setAppBounds( taskInfo.lastNonFullscreenBounds); taskInfo.positionInParent = new Point(taskInfo.lastNonFullscreenBounds.left, taskInfo.lastNonFullscreenBounds.top); } freeformTasks.add(taskInfo); if (mDesktopModeTaskRepository.get().isMinimizedTask(taskInfo.taskId)) { minimizedFreeformTasks.add(taskInfo.taskId); Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java +37 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession; import static com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_PERSISTENCE; import static com.android.wm.shell.shared.split.SplitScreenConstants.SNAP_TO_2_50_50; import static org.junit.Assert.assertEquals; Loading Loading @@ -50,6 +51,7 @@ import android.app.KeyguardManager; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; import android.graphics.Point; import android.graphics.Rect; import android.os.Bundle; import android.platform.test.annotations.DisableFlags; Loading Loading @@ -440,6 +442,40 @@ public class RecentTasksControllerTest extends ShellTestCase { assertEquals(t4, singleGroup2.getTaskInfo1()); } @Test @EnableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_PERSISTENCE) public void testGetRecentTasks_hasDesktopTasks_persistenceEnabled_freeformTaskHaveBoundsSet() { ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1); ActivityManager.RecentTaskInfo t2 = makeTaskInfo(2); t1.lastNonFullscreenBounds = new Rect(100, 200, 300, 400); t2.lastNonFullscreenBounds = new Rect(150, 250, 350, 450); setRawList(t1, t2); when(mDesktopModeTaskRepository.isActiveTask(1)).thenReturn(true); when(mDesktopModeTaskRepository.isActiveTask(2)).thenReturn(true); ArrayList<GroupedRecentTaskInfo> recentTasks = mRecentTasksController.getRecentTasks( MAX_VALUE, RECENT_IGNORE_UNAVAILABLE, 0); assertEquals(1, recentTasks.size()); GroupedRecentTaskInfo freeformGroup = recentTasks.get(0); // Check bounds assertEquals(t1.lastNonFullscreenBounds, freeformGroup.getTaskInfoList().get( 0).configuration.windowConfiguration.getAppBounds()); assertEquals(t2.lastNonFullscreenBounds, freeformGroup.getTaskInfoList().get( 1).configuration.windowConfiguration.getAppBounds()); // Check position in parent assertEquals(new Point(t1.lastNonFullscreenBounds.left, t1.lastNonFullscreenBounds.top), freeformGroup.getTaskInfoList().get(0).positionInParent); assertEquals(new Point(t2.lastNonFullscreenBounds.left, t2.lastNonFullscreenBounds.top), freeformGroup.getTaskInfoList().get(1).positionInParent); } @Test public void testRemovedTaskRemovesSplit() { ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1); Loading Loading @@ -623,6 +659,7 @@ public class RecentTasksControllerTest extends ShellTestCase { private ActivityManager.RecentTaskInfo makeTaskInfo(int taskId) { ActivityManager.RecentTaskInfo info = new ActivityManager.RecentTaskInfo(); info.taskId = taskId; info.lastNonFullscreenBounds = new Rect(); return info; } Loading