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

Commit 18f622f0 authored by Robert Carr's avatar Robert Carr
Browse files

Preserve non-floating state when entering pinned stack.

When transitioning between the fullscreen and pinned states
we often have a situation where we go from having a navigation and
status bar in the window to not. We'd like to use the source bounds
animation to crop these out rather than a sudden jump or scaling
but in order to do so we need to ensure they last until the end
of the animation. We track this state, and return the appropriate
value from isFloating. Furthermore, we add support to the bounds
animation to use the content frame as a source bounds when there
is no source bounds present, this means that we can crop out the
navigation and status bar so they will be invisible by the end of
the animation.

Bug: 37531386
Test: Manual
Change-Id: I72c549e3a3318534428d17b68ebee5832c32e6d7
parent 9bda9ead
Loading
Loading
Loading
Loading
+0 −17
Original line number Diff line number Diff line
@@ -2092,7 +2092,6 @@ public class Activity extends ContextThemeWrapper
            if (params == null) {
                throw new IllegalArgumentException("Expected non-null picture-in-picture params");
            }
            updatePictureInPictureParamsForContentInsets(params);
            return ActivityManagerNative.getDefault().enterPictureInPictureMode(mToken, params);
        } catch (RemoteException e) {
            return false;
@@ -2116,7 +2115,6 @@ public class Activity extends ContextThemeWrapper
            if (params == null) {
                throw new IllegalArgumentException("Expected non-null picture-in-picture params");
            }
            updatePictureInPictureParamsForContentInsets(params);
            ActivityManagerNative.getDefault().setPictureInPictureParams(mToken, params);
        } catch (RemoteException e) {
        }
@@ -2136,21 +2134,6 @@ public class Activity extends ContextThemeWrapper
        }
    }

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

    void dispatchMovedToDisplay(int displayId, Configuration config) {
        updateDisplay(displayId);
        onMovedToDisplay(displayId, config);
+0 −12
Original line number Diff line number Diff line
@@ -160,9 +160,6 @@ public final class PictureInPictureArgs implements Parcelable {
        if (in.readInt() != 0) {
            mSourceRectHint = Rect.CREATOR.createFromParcel(in);
        }
        if (in.readInt() != 0) {
            mSourceRectHintInsets = Rect.CREATOR.createFromParcel(in);
        }
    }

    private PictureInPictureArgs(Rational aspectRatio, List<RemoteAction> actions,
@@ -220,9 +217,6 @@ public final class PictureInPictureArgs implements Parcelable {
        if (otherArgs.hasSourceBoundsHint()) {
            mSourceRectHint = new Rect(otherArgs.getSourceRectHint());
        }
        if (otherArgs.hasSourceBoundsHintInsets()) {
            mSourceRectHintInsets = new Rect(otherArgs.getSourceRectHintInsets());
        }
    }

    /**
@@ -346,12 +340,6 @@ 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 =
+1 −49
Original line number Diff line number Diff line
@@ -135,13 +135,6 @@ public final class PictureInPictureParams 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;

    /** {@hide} */
    PictureInPictureParams() {
    }
@@ -158,9 +151,6 @@ public final class PictureInPictureParams implements Parcelable {
        if (in.readInt() != 0) {
            mSourceRectHint = Rect.CREATOR.createFromParcel(in);
        }
        if (in.readInt() != 0) {
            mSourceRectHintInsets = Rect.CREATOR.createFromParcel(in);
        }
    }

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

    /**
@@ -240,19 +227,6 @@ public final class PictureInPictureParams implements Parcelable {
        }
    }

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

    /**
     * @return the source rect hint
     * @hide
@@ -261,14 +235,6 @@ public final class PictureInPictureParams implements Parcelable {
        return mSourceRectHint;
    }

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

    /**
     * @return whether there are launch bounds set
     * @hide
@@ -277,14 +243,6 @@ public final class PictureInPictureParams 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 int describeContents() {
        return 0;
@@ -311,12 +269,6 @@ public final class PictureInPictureParams implements Parcelable {
        } else {
            out.writeInt(0);
        }
        if (mSourceRectHintInsets != null) {
            out.writeInt(1);
            mSourceRectHintInsets.writeToParcel(out, 0);
        } else {
            out.writeInt(0);
        }
    }

    public static final Creator<PictureInPictureParams> CREATOR =
+0 −10
Original line number Diff line number Diff line
@@ -1560,16 +1560,6 @@ 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
+0 −6
Original line number Diff line number Diff line
@@ -7891,12 +7891,6 @@ public class ActivityManagerService extends IActivityManager.Stub
                    final List<RemoteAction> actions = r.pictureInPictureArgs.getActions();
                    // 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);
Loading