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

Commit 60c9403f authored by Winson Chung's avatar Winson Chung Committed by android-build-merger
Browse files

Merge "Account for content insets in source rect hint for transition into PiP" into oc-dev

am: eef5d285

Change-Id: I12e3575937e92923db2bf0deea9c8d88cfb3e314
parents 75fd277d eef5d285
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -2070,6 +2070,7 @@ public class Activity extends ContextThemeWrapper
            if (args == null) {
                throw new IllegalArgumentException("Expected non-null picture-in-picture args");
            }
            updatePictureInPictureArgsForContentInsets(args);
            return ActivityManagerNative.getDefault().enterPictureInPictureMode(mToken, args);
        } catch (RemoteException e) {
            return false;
@@ -2087,11 +2088,27 @@ public class Activity extends ContextThemeWrapper
            if (args == null) {
                throw new IllegalArgumentException("Expected non-null picture-in-picture args");
            }
            updatePictureInPictureArgsForContentInsets(args);
            ActivityManagerNative.getDefault().setPictureInPictureArgs(mToken, args);
        } catch (RemoteException e) {
        }
    }

    /**
     * Updates the provided {@param args} with the last known content insets for this activity, to
     * be used with the source hint rect for the transition into PiP.
     */
    private void updatePictureInPictureArgsForContentInsets(PictureInPictureArgs args) {
        if (args != null && args.hasSourceBoundsHint() && getWindow() != null &&
                getWindow().peekDecorView() != null &&
                getWindow().peekDecorView().getViewRootImpl() != null) {
            args.setSourceRectHintInsets(
                    getWindow().peekDecorView().getViewRootImpl().getLastContentInsets());
        } else {
            args.setSourceRectHintInsets(null);
        }
    }

    void dispatchMovedToDisplay(int displayId, Configuration config) {
        updateDisplay(displayId);
        onMovedToDisplay(displayId, config);
+51 −1
Original line number Diff line number Diff line
@@ -49,6 +49,13 @@ public final class PictureInPictureArgs implements Parcelable {
    @Nullable
    private Rect mSourceRectHint;

    /**
     * The content insets that are used with the source hint rect for the transition into PiP where
     * the insets are removed at the beginning of the transition.
     */
    @Nullable
    private Rect mSourceRectHintInsets;

    PictureInPictureArgs(Parcel in) {
        if (in.readInt() != 0) {
            mAspectRatio = in.readFloat();
@@ -60,6 +67,9 @@ public final class PictureInPictureArgs implements Parcelable {
        if (in.readInt() != 0) {
            mSourceRectHint = Rect.CREATOR.createFromParcel(in);
        }
        if (in.readInt() != 0) {
            mSourceRectHintInsets = Rect.CREATOR.createFromParcel(in);
        }
    }

    /**
@@ -94,6 +104,9 @@ public final class PictureInPictureArgs implements Parcelable {
        if (otherArgs.hasSourceBoundsHint()) {
            mSourceRectHint = new Rect(otherArgs.getSourceRectHint());
        }
        if (otherArgs.hasSourceBoundsHintInsets()) {
            mSourceRectHintInsets = new Rect(otherArgs.getSourceRectHintInsets());
        }
    }

    /**
@@ -167,13 +180,33 @@ public final class PictureInPictureArgs implements Parcelable {
    }

    /**
     * @return the launch bounds
     * Sets the insets to be used with the source rect hint bounds.
     * @hide
     */
    public void setSourceRectHintInsets(Rect insets) {
        if (insets == null) {
            mSourceRectHintInsets = null;
        } else {
            mSourceRectHintInsets = new Rect(insets);
        }
    }

    /**
     * @return the source rect hint
     * @hide
     */
    public Rect getSourceRectHint() {
        return mSourceRectHint;
    }

    /**
     * @return the source rect hint insets.
     * @hide
     */
    public Rect getSourceRectHintInsets() {
        return mSourceRectHintInsets;
    }

    /**
     * @return whether there are launch bounds set
     * @hide
@@ -182,12 +215,23 @@ public final class PictureInPictureArgs implements Parcelable {
        return mSourceRectHint != null && !mSourceRectHint.isEmpty();
    }

    /**
     * @return whether there are source rect hint insets set
     * @hide
     */
    public boolean hasSourceBoundsHintInsets() {
        return mSourceRectHintInsets != null;
    }

    @Override
    public PictureInPictureArgs clone() {
        PictureInPictureArgs args = new PictureInPictureArgs(mAspectRatio, mUserActions);
        if (mSourceRectHint != null) {
            args.setSourceRectHint(mSourceRectHint);
        }
        if (mSourceRectHintInsets != null) {
            args.setSourceRectHintInsets(mSourceRectHintInsets);
        }
        return args;
    }

@@ -216,6 +260,12 @@ public final class PictureInPictureArgs implements Parcelable {
        } else {
            out.writeInt(0);
        }
        if (mSourceRectHintInsets != null) {
            out.writeInt(1);
            mSourceRectHintInsets.writeToParcel(out, 0);
        } else {
            out.writeInt(0);
        }
    }

    public static final Creator<PictureInPictureArgs> CREATOR =
+10 −0
Original line number Diff line number Diff line
@@ -1561,6 +1561,16 @@ public final class ViewRootImpl implements ViewParent,
        host.dispatchApplyWindowInsets(getWindowInsets(true /* forceConstruct */));
    }

    /**
     * @return the last content insets for use in adjusting the source hint rect for the
     * picture-in-picture transition.
     *
     * @hide
     */
    public Rect getLastContentInsets() {
        return mAttachInfo.mContentInsets;
    }

    private static boolean shouldUseDisplaySize(final WindowManager.LayoutParams lp) {
        return lp.type == TYPE_STATUS_BAR_PANEL
                || lp.type == TYPE_INPUT_METHOD
+8 −1
Original line number Diff line number Diff line
@@ -7845,7 +7845,14 @@ public class ActivityManagerService extends IActivityManager.Stub
                    r.pictureInPictureArgs.copyOnlySet(args);
                    final float aspectRatio = r.pictureInPictureArgs.getAspectRatio();
                    final List<RemoteAction> actions = r.pictureInPictureArgs.getActions();
                    final Rect sourceBounds = r.pictureInPictureArgs.getSourceRectHint();
                    // Adjust the source bounds by the insets for the transition down
                    final Rect sourceBounds = new Rect(r.pictureInPictureArgs.getSourceRectHint());
                    final Rect insets = r.pictureInPictureArgs.getSourceRectHintInsets();
                    if (insets != null) {
                        sourceBounds.offsetTo(Math.max(0, sourceBounds.left - insets.left),
                                Math.max(0, sourceBounds.top - insets.top));
                    }
                    mStackSupervisor.moveActivityToPinnedStackLocked(r, sourceBounds, aspectRatio,
                            true /* moveHomeStackToFront */, "enterPictureInPictureMode");
                    final PinnedActivityStack stack = mStackSupervisor.getStack(PINNED_STACK_ID);