diff options
| author | 2024-10-25 16:12:33 +0000 | |
|---|---|---|
| committer | 2024-10-25 16:12:33 +0000 | |
| commit | 589037adc5556f485224780f3c9ea5305efdbae5 (patch) | |
| tree | 708169745ca496487112bea0dbbba4f6257f524d | |
| parent | fd0ca40e6cd662c4e388d8512f28f2b60c600654 (diff) | |
| parent | 88961e53f531b14b695d0c19416248a60c1f7966 (diff) | |
Merge "Notify RecentTasksController when desktop task size or position changes" into main
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java | 16 | ||||
| -rw-r--r-- | libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java | 37 |
2 files changed, 48 insertions, 5 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java index 4607a8ec1210..f59fed906e2d 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java @@ -583,9 +583,8 @@ public class ShellTaskOrganizer extends TaskOrganizer { } final boolean windowModeChanged = data.getTaskInfo().getWindowingMode() != taskInfo.getWindowingMode(); - final boolean visibilityChanged = data.getTaskInfo().isVisible != taskInfo.isVisible; - if (windowModeChanged || (taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM - && visibilityChanged)) { + if (windowModeChanged + || hasFreeformConfigurationChanged(data.getTaskInfo(), taskInfo)) { mRecentTasks.ifPresent(recentTasks -> recentTasks.onTaskRunningInfoChanged(taskInfo)); } @@ -606,6 +605,17 @@ public class ShellTaskOrganizer extends TaskOrganizer { } } + private boolean hasFreeformConfigurationChanged(RunningTaskInfo oldTaskInfo, + RunningTaskInfo newTaskInfo) { + if (newTaskInfo.getWindowingMode() != WINDOWING_MODE_FREEFORM) { + return false; + } + return oldTaskInfo.isVisible != newTaskInfo.isVisible + || !oldTaskInfo.positionInParent.equals(newTaskInfo.positionInParent) + || !Objects.equals(oldTaskInfo.configuration.windowConfiguration.getAppBounds(), + newTaskInfo.configuration.windowConfiguration.getAppBounds()); + } + @Override public void onBackPressedOnTaskRoot(RunningTaskInfo taskInfo) { synchronized (mLock) { diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java index f01ed84adc74..841b6cefcafa 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java @@ -45,6 +45,8 @@ import android.app.ActivityManager.RunningTaskInfo; import android.app.TaskInfo; import android.content.LocusId; import android.content.pm.ParceledListSlice; +import android.graphics.Point; +import android.graphics.Rect; import android.os.Binder; import android.os.IBinder; import android.os.RemoteException; @@ -589,9 +591,9 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testRecentTasks_visibilityChanges_shouldNotifyTaskController() { - RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_FREEFORM); + RunningTaskInfo task1 = createFreeformTaskInfo(/* taskId= */ 1); mOrganizer.onTaskAppeared(task1, /* leash= */ null); - RunningTaskInfo task2 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_FREEFORM); + RunningTaskInfo task2 = createFreeformTaskInfo(/* taskId= */ 1); task2.isVisible = false; mOrganizer.onTaskInfoChanged(task2); @@ -600,6 +602,30 @@ public class ShellTaskOrganizerTests extends ShellTestCase { } @Test + public void testRecentTasks_sizeChanges_shouldNotifyTaskController() { + RunningTaskInfo task1 = createFreeformTaskInfo(/* taskId= */ 1); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); + RunningTaskInfo task2 = createFreeformTaskInfo(/* taskId= */ 1); + task2.configuration.windowConfiguration.setAppBounds(new Rect(0, 0, 300, 400)); + + mOrganizer.onTaskInfoChanged(task2); + + verify(mRecentTasksController).onTaskRunningInfoChanged(task2); + } + + @Test + public void testRecentTasks_positionChanges_shouldNotifyTaskController() { + RunningTaskInfo task1 = createFreeformTaskInfo(/* taskId= */ 1); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); + RunningTaskInfo task2 = createFreeformTaskInfo(/* taskId= */ 1); + task2.positionInParent = new Point(200, 200); + + mOrganizer.onTaskInfoChanged(task2); + + verify(mRecentTasksController).onTaskRunningInfoChanged(task2); + } + + @Test public void testRecentTasks_visibilityChanges_notFreeForm_shouldNotNotifyTaskController() { RunningTaskInfo task1_visible = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_FULLSCREEN); mOrganizer.onTaskAppeared(task1_visible, /* leash= */ null); @@ -649,6 +675,13 @@ public class ShellTaskOrganizerTests extends ShellTestCase { return taskInfo; } + private static RunningTaskInfo createFreeformTaskInfo(int taskId) { + RunningTaskInfo taskInfo = createTaskInfo(taskId, WINDOWING_MODE_FREEFORM); + taskInfo.positionInParent = new Point(100, 100); + taskInfo.configuration.windowConfiguration.setAppBounds(new Rect(0, 0, 200, 200)); + return taskInfo; + } + private void verifyOnCompatInfoChangedInvokedWith(TaskInfo taskInfo, ShellTaskOrganizer.TaskListener listener) { final ArgumentCaptor<CompatUIInfo> capture = ArgumentCaptor.forClass(CompatUIInfo.class); |