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

Commit cd5d23cc authored by Ikram Gabiyev's avatar Ikram Gabiyev Committed by Android (Google) Code Review
Browse files

Revert^2 "[1/2][PiP2] Move removePip animation to transition"

This reverts commit 472d0fd9.

Reason for revert: CTS tests should be fixed in the other CL, same topic

Change-Id: Ief14eee94656293c2f829c5305f2caf76f86952f
parent 472d0fd9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -350,7 +350,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
        }
        cancelPhysicsAnimation();
        mMenuController.hideMenu(ANIM_TYPE_DISMISS, false /* resize */);
        mPipScheduler.removePipAfterAnimation();
        mPipScheduler.scheduleRemovePip();
    }

    /** Sets the movement bounds to use to constrain PIP position animations. */
+13 −21
Original line number Diff line number Diff line
@@ -122,34 +122,26 @@ public class PipScheduler {
     * Schedules exit PiP via expand transition.
     */
    public void scheduleExitPipViaExpand() {
        mMainExecutor.execute(() -> {
            if (!mPipTransitionState.isInPip()) return;
            WindowContainerTransaction wct = getExitPipViaExpandTransaction();
            if (wct != null) {
            mMainExecutor.execute(() -> {
                mPipTransitionController.startExitTransition(TRANSIT_EXIT_PIP, wct,
                        null /* destinationBounds */);
            });
            }
    }

    // TODO: Optimize this by running the animation as part of the transition
    /** Runs remove PiP animation and schedules remove PiP transition after the animation ends. */
    public void removePipAfterAnimation() {
        SurfaceControl.Transaction tx = mSurfaceControlTransactionFactory.getTransaction();
        PipAlphaAnimator animator = mPipAlphaAnimatorSupplier.get(mContext,
                mPipTransitionState.getPinnedTaskLeash(), tx, PipAlphaAnimator.FADE_OUT);
        animator.setAnimationEndCallback(this::scheduleRemovePipImmediately);
        animator.start();
        });
    }

    /** Schedules remove PiP transition. */
    private void scheduleRemovePipImmediately() {
    public void scheduleRemovePip() {
        mMainExecutor.execute(() -> {
            if (!mPipTransitionState.isInPip()) return;
            WindowContainerTransaction wct = getRemovePipTransaction();
            if (wct != null) {
            mMainExecutor.execute(() -> {
                mPipTransitionController.startExitTransition(TRANSIT_REMOVE_PIP, wct,
                        null /* destinationBounds */);
            });
            }
        });
    }

    /**
+11 −5
Original line number Diff line number Diff line
@@ -276,7 +276,8 @@ public class PipTransition extends PipTransitionController implements
        }

        if (isRemovePipTransition(info)) {
            return removePipImmediately(info, startTransaction, finishTransaction, finishCallback);
            mPipTransitionState.setState(PipTransitionState.EXITING_PIP);
            return startRemoveAnimation(info, startTransaction, finishTransaction, finishCallback);
        }
        return false;
    }
@@ -666,13 +667,18 @@ public class PipTransition extends PipTransitionController implements
        return true;
    }

    private boolean removePipImmediately(@NonNull TransitionInfo info,
    private boolean startRemoveAnimation(@NonNull TransitionInfo info,
            @NonNull SurfaceControl.Transaction startTransaction,
            @NonNull SurfaceControl.Transaction finishTransaction,
            @NonNull Transitions.TransitionFinishCallback finishCallback) {
        startTransaction.apply();
        finishCallback.onTransitionFinished(null);
        mPipTransitionState.setState(PipTransitionState.EXITED_PIP);
        TransitionInfo.Change pipChange = getChangeByToken(info,
                mPipTransitionState.getPipTaskToken());
        mFinishCallback = finishCallback;
        PipAlphaAnimator animator = new PipAlphaAnimator(mContext, pipChange.getLeash(),
                startTransaction, PipAlphaAnimator.FADE_OUT);
        finishTransaction.setAlpha(pipChange.getLeash(), 0f);
        animator.setAnimationEndCallback(this::finishTransition);
        animator.start();
        return true;
    }

+10 −10
Original line number Diff line number Diff line
@@ -120,15 +120,22 @@ public class PipSchedulerTest {
    @Test
    public void scheduleExitPipViaExpand_nullTaskToken_noop() {
        setNullPipTaskToken();
        when(mMockPipTransitionState.isInPip()).thenReturn(true);

        mPipScheduler.scheduleExitPipViaExpand();

        verify(mMockMainExecutor, never()).execute(any());
        verify(mMockMainExecutor, times(1)).execute(mRunnableArgumentCaptor.capture());
        assertNotNull(mRunnableArgumentCaptor.getValue());
        mRunnableArgumentCaptor.getValue().run();

        verify(mMockPipTransitionController, never())
                .startExitTransition(eq(TRANSIT_EXIT_PIP), any(), isNull());
    }

    @Test
    public void scheduleExitPipViaExpand_exitTransitionCalled() {
        setMockPipTaskToken();
        when(mMockPipTransitionState.isInPip()).thenReturn(true);

        mPipScheduler.scheduleExitPipViaExpand();

@@ -142,20 +149,13 @@ public class PipSchedulerTest {

    @Test
    public void removePipAfterAnimation() {
        //TODO: Update once this is changed to run animation as part of transition
        setMockPipTaskToken();
        when(mMockPipTransitionState.isInPip()).thenReturn(true);

        mPipScheduler.removePipAfterAnimation();
        verify(mMockAlphaAnimator, times(1))
                .setAnimationEndCallback(mRunnableArgumentCaptor.capture());
        assertNotNull(mRunnableArgumentCaptor.getValue());
        verify(mMockAlphaAnimator, times(1)).start();

        mRunnableArgumentCaptor.getValue().run();
        mPipScheduler.scheduleRemovePip();

        verify(mMockMainExecutor, times(1)).execute(mRunnableArgumentCaptor.capture());
        assertNotNull(mRunnableArgumentCaptor.getValue());

        mRunnableArgumentCaptor.getValue().run();

        verify(mMockPipTransitionController, times(1))
+3 −2
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLAS
import static com.android.server.wm.ActivityTaskManagerService.ANIMATE;
import static com.android.server.wm.ActivityTaskManagerService.H.FIRST_SUPERVISOR_TASK_MSG;
import static com.android.server.wm.ActivityTaskManagerService.RELAUNCH_REASON_NONE;
import static com.android.server.wm.ActivityTaskManagerService.isPip2ExperimentEnabled;
import static com.android.server.wm.ClientLifecycleManager.shouldDispatchLaunchActivityItemIndependently;
import static com.android.server.wm.LockTaskController.LOCK_TASK_AUTH_ALLOWLISTED;
import static com.android.server.wm.LockTaskController.LOCK_TASK_AUTH_LAUNCHABLE;
@@ -2523,7 +2524,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
    void scheduleUpdatePictureInPictureModeIfNeeded(Task task, Rect targetRootTaskBounds) {
        task.forAllActivities(r -> {
            if (!r.attachedToProcess()) return;
            mPipModeChangedActivities.add(r);
            if (!isPip2ExperimentEnabled()) mPipModeChangedActivities.add(r);
            // If we are scheduling pip change, then remove this activity from multi-window
            // change list as the processing of pip change will make sure multi-window changed
            // message is processed in the right order relative to pip changed.
@@ -2532,7 +2533,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {

        mPipModeChangedTargetRootTaskBounds = targetRootTaskBounds;

        if (!mHandler.hasMessages(REPORT_PIP_MODE_CHANGED_MSG)) {
        if (!isPip2ExperimentEnabled() && !mHandler.hasMessages(REPORT_PIP_MODE_CHANGED_MSG)) {
            mHandler.sendEmptyMessage(REPORT_PIP_MODE_CHANGED_MSG);
        }
    }
Loading