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

Commit 88961e53 authored by Alex Chau's avatar Alex Chau
Browse files

Notify RecentTasksController when desktop task size or position changes

Bug: 361090074
Test: ShellTaskOrganizerTests
Flag: EXEMPT (Bug fix)
Change-Id: I800bceff7a547a31b773078921f6c1a44b7510b4
parent 44bf6e08
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);