Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 589037ad authored by Alex Chau's avatar Alex Chau Committed by Android (Google) Code Review
Browse files

Merge "Notify RecentTasksController when desktop task size or position changes" into main

parents fd0ca40e 88961e53
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -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) {
+35 −2
Original line number Diff line number Diff line
@@ -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);
@@ -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);
@@ -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);