summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alex Chau <alexchau@google.com> 2024-10-25 16:12:33 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-10-25 16:12:33 +0000
commit589037adc5556f485224780f3c9ea5305efdbae5 (patch)
tree708169745ca496487112bea0dbbba4f6257f524d
parentfd0ca40e6cd662c4e388d8512f28f2b60c600654 (diff)
parent88961e53f531b14b695d0c19416248a60c1f7966 (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.java16
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java37
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);