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

Commit 77f5aecb authored by Mateusz Cicheński's avatar Mateusz Cicheński Committed by Android (Google) Code Review
Browse files

Merge "Don't move PiP towards a corner after user manually moved it." into tm-qpr-dev

parents 262e8c82 76d2b200
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -97,6 +97,8 @@ public class PipBoundsState {
    private int mShelfHeight;
    /** Whether the user has resized the PIP manually. */
    private boolean mHasUserResizedPip;
    /** Whether the user has moved the PIP manually. */
    private boolean mHasUserMovedPip;
    /**
     * Areas defined by currently visible apps that they prefer to keep clear from overlays such as
     * the PiP. Restricted areas may only move the PiP a limited amount from its anchor position.
@@ -279,6 +281,7 @@ public class PipBoundsState {
        if (changed) {
            clearReentryState();
            setHasUserResizedPip(false);
            setHasUserMovedPip(false);
        }
    }

@@ -442,6 +445,16 @@ public class PipBoundsState {
        mHasUserResizedPip = hasUserResizedPip;
    }

    /** Returns whether the user has moved the PIP. */
    public boolean hasUserMovedPip() {
        return mHasUserMovedPip;
    }

    /** Set whether the user has moved the PIP. */
    public void setHasUserMovedPip(boolean hasUserMovedPip) {
        mHasUserMovedPip = hasUserMovedPip;
    }

    /**
     * Registers a callback when the minimal size of PIP that is set by the app changes.
     */
@@ -577,6 +590,8 @@ public class PipBoundsState {
        pw.println(innerPrefix + "mImeHeight=" + mImeHeight);
        pw.println(innerPrefix + "mIsShelfShowing=" + mIsShelfShowing);
        pw.println(innerPrefix + "mShelfHeight=" + mShelfHeight);
        pw.println(innerPrefix + "mHasUserMovedPip=" + mHasUserMovedPip);
        pw.println(innerPrefix + "mHasUserResizedPip=" + mHasUserResizedPip);
        if (mPipReentryState == null) {
            pw.println(innerPrefix + "mPipReentryState=null");
        } else {
+29 −19
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.wm.shell.pip.phone;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Rect;
import android.os.SystemProperties;
import android.util.ArraySet;
import android.view.Gravity;

@@ -34,6 +35,10 @@ import java.util.Set;
 */
public class PhonePipKeepClearAlgorithm implements PipKeepClearAlgorithm {

    private boolean mKeepClearAreaGravityEnabled =
            SystemProperties.getBoolean(
                    "persist.wm.debug.enable_pip_keep_clear_algorithm_gravity", false);

    protected int mKeepClearAreasPadding;

    public PhonePipKeepClearAlgorithm(Context context) {
@@ -53,6 +58,16 @@ public class PhonePipKeepClearAlgorithm implements PipKeepClearAlgorithm {
        Rect startingBounds = pipBoundsState.getBounds().isEmpty()
                ? pipBoundsAlgorithm.getEntryDestinationBoundsIgnoringKeepClearAreas()
                : pipBoundsState.getBounds();
        Rect insets = new Rect();
        pipBoundsAlgorithm.getInsetBounds(insets);
        if (pipBoundsState.isImeShowing()) {
            insets.bottom -= pipBoundsState.getImeHeight();
        }
        Rect pipBounds = new Rect(startingBounds);

        // move PiP towards corner if user hasn't moved it manually or the flag is on
        if (mKeepClearAreaGravityEnabled
                || (!pipBoundsState.hasUserMovedPip() && !pipBoundsState.hasUserResizedPip())) {
            float snapFraction = pipBoundsAlgorithm.getSnapFraction(startingBounds);
            int verticalGravity = Gravity.BOTTOM;
            int horizontalGravity;
@@ -61,23 +76,18 @@ public class PhonePipKeepClearAlgorithm implements PipKeepClearAlgorithm {
            } else {
                horizontalGravity = Gravity.LEFT;
            }
        // push the bounds based on the gravity
        Rect insets = new Rect();
        pipBoundsAlgorithm.getInsetBounds(insets);
        if (pipBoundsState.isImeShowing()) {
            insets.bottom -= pipBoundsState.getImeHeight();
        }
        Rect pushedBounds = new Rect(startingBounds);
            if (verticalGravity == Gravity.BOTTOM) {
            pushedBounds.offsetTo(pushedBounds.left,
                    insets.bottom - pushedBounds.height());
                pipBounds.offsetTo(pipBounds.left,
                        insets.bottom - pipBounds.height());
            }
            if (horizontalGravity == Gravity.RIGHT) {
            pushedBounds.offsetTo(insets.right - pushedBounds.width(), pushedBounds.top);
                pipBounds.offsetTo(insets.right - pipBounds.width(), pipBounds.top);
            } else {
            pushedBounds.offsetTo(insets.left, pushedBounds.top);
                pipBounds.offsetTo(insets.left, pipBounds.top);
            }
        }
        return findUnoccludedPosition(pushedBounds, pipBoundsState.getRestrictedKeepClearAreas(),

        return findUnoccludedPosition(pipBounds, pipBoundsState.getRestrictedKeepClearAreas(),
                pipBoundsState.getUnrestrictedKeepClearAreas(), insets);
    }

+2 −0
Original line number Diff line number Diff line
@@ -875,6 +875,8 @@ public class PipTouchHandler {
            }

            if (touchState.isDragging()) {
                mPipBoundsState.setHasUserMovedPip(true);

                // Move the pinned stack freely
                final PointF lastDelta = touchState.getLastTouchDelta();
                float lastX = mStartPosition.x + mDelta.x;