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

Commit 7e21e568 authored by Gaurav Bhola's avatar Gaurav Bhola
Browse files

Handle task visibility change to show the surface

- When a new task organizer is registered, while a task is invisible,
  onTaskAppeared() may get called with isVisible=false.
- Later on when visibility becomes true, onTaskAppeared() is not called
  and hence that surface would still remain hidden.
- Handle this scenario in onTaskInfoChanged to make sure surface is
  shown correctly.

Fix: 272296051
Test: Tested manually by triggering this case on gcar_ui_portrait
Change-Id: Ie61be170ae92dac1c4eab102e76629f989afa64c
parent 3d1b8b9a
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -129,6 +129,7 @@ public class FullscreenTaskListener implements ShellTaskOrganizer.TaskListener {
    public void onTaskInfoChanged(RunningTaskInfo taskInfo) {
        final State state = mTasks.get(taskInfo.taskId);
        final Point oldPositionInParent = state.mTaskInfo.positionInParent;
        boolean oldVisible = state.mTaskInfo.isVisible;

        if (mWindowDecorViewModelOptional.isPresent()) {
            mWindowDecorViewModelOptional.get().onTaskInfoChanged(taskInfo);
@@ -138,12 +139,18 @@ public class FullscreenTaskListener implements ShellTaskOrganizer.TaskListener {
        updateRecentsForVisibleFullscreenTask(taskInfo);

        final Point positionInParent = state.mTaskInfo.positionInParent;
        if (!oldPositionInParent.equals(state.mTaskInfo.positionInParent)) {
        boolean positionInParentChanged = !oldPositionInParent.equals(positionInParent);
        boolean becameVisible = !oldVisible && state.mTaskInfo.isVisible;

        if (becameVisible || positionInParentChanged) {
            mSyncQueue.runInSync(t -> {
                if (!state.mLeash.isValid()) {
                    // Task vanished before sync completion
                    return;
                }
                if (becameVisible) {
                    t.show(state.mLeash);
                }
                t.setPosition(state.mLeash, positionInParent.x, positionInParent.y);
            });
        }