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

Commit 17a295b0 authored by Pragya Bajoria's avatar Pragya Bajoria
Browse files

Handle TRANSIT_TO_BACK in FreeformTaskTransitionObserver

This is needed to handle the case where a task is moved to the back of the stack.

Bug: 367268953
Flag: EXEMPT (refactor)
Change-Id: Ibbc7133b93b3074a792c5eae1586b6441874861e
parent 6731d99b
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -119,6 +119,9 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs
                case WindowManager.TRANSIT_TO_FRONT:
                    onToFrontTransitionReady(change, startT, finishT);
                    break;
                case WindowManager.TRANSIT_TO_BACK:
                    onToBackTransitionReady(change, startT, finishT);
                    break;
                case WindowManager.TRANSIT_CLOSE: {
                    taskInfoList.add(change.getTaskInfo());
                    onCloseTransitionReady(change, startT, finishT);
@@ -173,6 +176,16 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs
                change.getTaskInfo(), change.getLeash(), startT, finishT);
    }

    private void onToBackTransitionReady(
            TransitionInfo.Change change,
            SurfaceControl.Transaction startT,
            SurfaceControl.Transaction finishT) {
        mTaskChangeListener.ifPresent(
                listener -> listener.onTaskMovingToBack(change.getTaskInfo()));
        mWindowDecorViewModel.onTaskChanging(
                change.getTaskInfo(), change.getLeash(), startT, finishT);
    }

    @Override
    public void onTransitionStarting(@NonNull IBinder transition) {}

+17 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.view.WindowManager.TRANSIT_CHANGE;
import static android.view.WindowManager.TRANSIT_CLOSE;
import static android.view.WindowManager.TRANSIT_OPEN;
import static android.view.WindowManager.TRANSIT_TO_BACK;
import static android.view.WindowManager.TRANSIT_TO_FRONT;
import static android.view.WindowManager.TRANSIT_CHANGE;

@@ -160,6 +161,22 @@ public class FreeformTaskTransitionObserverTest {
        verify(mTaskChangeListener).onTaskMovingToFront(change.getTaskInfo());
    }

    @Test
    public void toBackTransition_notifiesOnTaskMovingToBack() {
        final TransitionInfo.Change change =
                createChange(TRANSIT_TO_BACK, /* taskId= */ 1, WINDOWING_MODE_FREEFORM);
        final TransitionInfo info = new TransitionInfoBuilder(TRANSIT_TO_BACK, /* flags= */ 0)
                .addChange(change).build();

        final IBinder transition = mock(IBinder.class);
        final SurfaceControl.Transaction startT = mock(SurfaceControl.Transaction.class);
        final SurfaceControl.Transaction finishT = mock(SurfaceControl.Transaction.class);
        mTransitionObserver.onTransitionReady(transition, info, startT, finishT);
        mTransitionObserver.onTransitionStarting(transition);

        verify(mTaskChangeListener).onTaskMovingToBack(change.getTaskInfo());
    }

    @Test
    public void changeTransition_notifiesOnTaskChanging() {
        final TransitionInfo.Change change =