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

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

Merge "Set KCA during swipe PiP to home" into main

parents d647ebee 7fdad1e5
Loading
Loading
Loading
Loading
+10 −2
Original line number Original line Diff line number Diff line
@@ -300,6 +300,10 @@ public class PipController implements ConfigurationChangeListener,
            int launcherRotation, Rect hotseatKeepClearArea) {
            int launcherRotation, Rect hotseatKeepClearArea) {
        ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
        ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
                "getSwipePipToHomeBounds: %s", componentName);
                "getSwipePipToHomeBounds: %s", componentName);
        // preemptively add the keep clear area for Hotseat, so that it is taken into account
        // when calculating the entry destination bounds of PiP window
        mPipBoundsState.setNamedUnrestrictedKeepClearArea(
                PipBoundsState.NAMED_KCA_LAUNCHER_SHELF, hotseatKeepClearArea);
        mPipBoundsState.setBoundsStateForEntry(componentName, activityInfo, pictureInPictureParams,
        mPipBoundsState.setBoundsStateForEntry(componentName, activityInfo, pictureInPictureParams,
                mPipBoundsAlgorithm);
                mPipBoundsAlgorithm);
        return mPipBoundsAlgorithm.getEntryDestinationBounds();
        return mPipBoundsAlgorithm.getEntryDestinationBounds();
@@ -349,10 +353,14 @@ public class PipController implements ConfigurationChangeListener,
                if (mPipTransitionState.isInSwipePipToHomeTransition()) {
                if (mPipTransitionState.isInSwipePipToHomeTransition()) {
                    mPipTransitionState.resetSwipePipToHomeState();
                    mPipTransitionState.resetSwipePipToHomeState();
                }
                }
                if (mOnIsInPipStateChangedListener != null) {
                    mOnIsInPipStateChangedListener.accept(true /* inPip */);
                    mOnIsInPipStateChangedListener.accept(true /* inPip */);
                }
                break;
                break;
            case PipTransitionState.EXITED_PIP:
            case PipTransitionState.EXITED_PIP:
                if (mOnIsInPipStateChangedListener != null) {
                    mOnIsInPipStateChangedListener.accept(false /* inPip */);
                    mOnIsInPipStateChangedListener.accept(false /* inPip */);
                }
                break;
                break;
        }
        }
    }
    }
+16 −8
Original line number Original line Diff line number Diff line
@@ -107,10 +107,6 @@ public class PipTransition extends PipTransitionController implements
    // Internal state and relevant cached info
    // Internal state and relevant cached info
    //
    //


    @Nullable
    private WindowContainerToken mPipTaskToken;
    @Nullable
    private SurfaceControl mPipLeash;
    @Nullable
    @Nullable
    private Transitions.TransitionFinishCallback mFinishCallback;
    private Transitions.TransitionFinishCallback mFinishCallback;


@@ -402,7 +398,6 @@ public class PipTransition extends PipTransitionController implements
        finishWct.setBoundsChangeTransaction(pipTaskToken, tx);
        finishWct.setBoundsChangeTransaction(pipTaskToken, tx);


        animator.setAnimationEndCallback(() -> {
        animator.setAnimationEndCallback(() -> {
            mPipTransitionState.setState(PipTransitionState.ENTERED_PIP);
            finishCallback.onTransitionFinished(finishWct.isEmpty() ? null : finishWct);
            finishCallback.onTransitionFinished(finishWct.isEmpty() ? null : finishWct);
        });
        });


@@ -444,15 +439,16 @@ public class PipTransition extends PipTransitionController implements
            @NonNull SurfaceControl.Transaction startTransaction,
            @NonNull SurfaceControl.Transaction startTransaction,
            @NonNull SurfaceControl.Transaction finishTransaction,
            @NonNull SurfaceControl.Transaction finishTransaction,
            @NonNull Transitions.TransitionFinishCallback finishCallback) {
            @NonNull Transitions.TransitionFinishCallback finishCallback) {
        TransitionInfo.Change pipChange = getPipChange(info);
        WindowContainerToken pipToken = mPipTransitionState.mPipTaskToken;

        TransitionInfo.Change pipChange = getChangeByToken(info, pipToken);
        if (pipChange == null) {
        if (pipChange == null) {
            return false;
            return false;
        }
        }


        Rect startBounds = pipChange.getStartAbsBounds();
        Rect startBounds = pipChange.getStartAbsBounds();
        Rect endBounds = pipChange.getEndAbsBounds();
        Rect endBounds = pipChange.getEndAbsBounds();
        SurfaceControl pipLeash = mPipTransitionState.mPinnedTaskLeash;
        SurfaceControl pipLeash = pipChange.getLeash();
        Preconditions.checkNotNull(pipLeash, "Leash is null for bounds transition.");


        PipEnterExitAnimator animator = new PipEnterExitAnimator(mContext, pipLeash,
        PipEnterExitAnimator animator = new PipEnterExitAnimator(mContext, pipLeash,
                startTransaction, startBounds, startBounds, endBounds,
                startTransaction, startBounds, startBounds, endBounds,
@@ -491,6 +487,18 @@ public class PipTransition extends PipTransitionController implements
        return null;
        return null;
    }
    }


    @Nullable
    private TransitionInfo.Change getChangeByToken(TransitionInfo info,
            WindowContainerToken token) {
        for (TransitionInfo.Change change : info.getChanges()) {
            if (change.getTaskInfo() != null
                    && change.getTaskInfo().getToken().equals(token)) {
                return change;
            }
        }
        return null;
    }

    private WindowContainerTransaction getEnterPipTransaction(@NonNull IBinder transition,
    private WindowContainerTransaction getEnterPipTransaction(@NonNull IBinder transition,
            @NonNull TransitionRequestInfo request) {
            @NonNull TransitionRequestInfo request) {
        // cache the original task token to check for multi-activity case later
        // cache the original task token to check for multi-activity case later