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

Commit ea5e5a65 authored by Vania Desmonda's avatar Vania Desmonda
Browse files

Set pinned task leash and pip task info after EXITED_PIP.

This is to prevent a crash from the pip leash being null when the pip
menu controller wants to attach itself onViewAttachedToWindow.

Test: manual testing and atest PipDisplayTransferHandlerTest
Fixes: 432710285
Flag: com.android.window.flags.enable_dragging_pip_across_displays
Change-Id: If255a79cc986fbffe74e6d6afbb27db3e602dc1e
parent 539679cd
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import static com.android.wm.shell.pip2.phone.PipTransition.ANIMATING_BOUNDS_CHA
import static com.android.wm.shell.pip2.phone.PipTransition.PIP_DESTINATION_BOUNDS;

import android.annotation.Nullable;
import android.app.TaskInfo;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.RectF;
@@ -143,6 +144,8 @@ public class PipDisplayTransferHandler implements
                        "%s Animating PiP display change to=%d", TAG, mTargetDisplayId);

                final SurfaceControl pipLeash = mPipTransitionState.getPinnedTaskLeash();
                final TaskInfo pipTaskInfo = mPipTransitionState.getPipTaskInfo();
                final TaskInfo pipCandidateTaskInfo = mPipTransitionState.getPipCandidateTaskInfo();
                final int duration = extra.getInt(ANIMATING_BOUNDS_CHANGE_DURATION,
                        PipTransition.BOUNDS_CHANGE_JUMPCUT_DURATION);
                final Transaction startTx = extra.getParcelable(
@@ -167,6 +170,11 @@ public class PipDisplayTransferHandler implements
                mPipTransitionState.setState(PipTransitionState.EXITING_PIP);
                mPipTransitionState.setState(PipTransitionState.EXITED_PIP);

                // Set PiP task states to make sure they're not null after we exited PiP
                mPipTransitionState.setPinnedTaskLeash(pipLeash);
                mPipTransitionState.setPipTaskInfo(pipTaskInfo);
                mPipTransitionState.setPipCandidateTaskInfo(pipCandidateTaskInfo);

                final PipResizeAnimator animator = mPipResizeAnimatorSupplier.get(mContext,
                        mPipSurfaceTransactionHelper, pipLeash, startTx, finishTx,
                        mPipBoundsState.getBounds(), mPipBoundsState.getBounds(), pipBounds,
+5 −0
Original line number Diff line number Diff line
@@ -231,6 +231,8 @@ class PipDisplayTransferHandlerTest : ShellTestCase() {
        extra.putParcelable(PIP_DESTINATION_BOUNDS, destinationBounds)
        pipDisplayTransferHandler.mWaitingForDisplayTransfer = true
        pipDisplayTransferHandler.mTargetDisplayId = TARGET_DISPLAY_ID
        mockPipTransitionState.pipTaskInfo = mockTaskInfo
        mockPipTransitionState.pipCandidateTaskInfo = mockTaskInfo

        pipDisplayTransferHandler.onPipTransitionStateChanged(
            UNDEFINED,
@@ -240,6 +242,9 @@ class PipDisplayTransferHandlerTest : ShellTestCase() {

        verify(mockPipTransitionState).state = eq(EXITING_PIP)
        verify(mockPipTransitionState).state = eq(EXITED_PIP)
        verify(mockPipTransitionState).pinnedTaskLeash = eq(mockLeash)
        verify(mockPipTransitionState).pipTaskInfo = eq(mockTaskInfo)
        verify(mockPipTransitionState).pipCandidateTaskInfo = eq(mockTaskInfo)
        verify(mockPipResizeAnimator).start()
    }