Loading libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +13 −3 Original line number Diff line number Diff line Loading @@ -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)); } Loading @@ -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) { Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java +35 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -599,6 +601,30 @@ public class ShellTaskOrganizerTests extends ShellTestCase { verify(mRecentTasksController).onTaskRunningInfoChanged(task2); } @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); Loading Loading @@ -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); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +13 −3 Original line number Diff line number Diff line Loading @@ -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)); } Loading @@ -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) { Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java +35 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -599,6 +601,30 @@ public class ShellTaskOrganizerTests extends ShellTestCase { verify(mRecentTasksController).onTaskRunningInfoChanged(task2); } @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); Loading Loading @@ -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); Loading