summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsState.java5
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMotionHelper.java67
2 files changed, 37 insertions, 35 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsState.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsState.java
index 3a675c49e712..d0ab31dd72c8 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsState.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsState.java
@@ -42,7 +42,10 @@ public final class PipBoundsState {
private final DisplayInfo mDisplayInfo = new DisplayInfo();
private final DisplayLayout mDisplayLayout = new DisplayLayout();
- void setBounds(@NonNull Rect bounds) {
+ /**
+ * Set the current PIP bounds.
+ */
+ public void setBounds(@NonNull Rect bounds) {
mBounds.set(bounds);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMotionHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMotionHelper.java
index b5fa03082401..9240b3f41ff4 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMotionHelper.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMotionHelper.java
@@ -67,16 +67,13 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
private final Context mContext;
private final PipTaskOrganizer mPipTaskOrganizer;
- private final @NonNull PipBoundsState mPipBoundsState;
+ private @NonNull PipBoundsState mPipBoundsState;
private PipMenuActivityController mMenuController;
private PipSnapAlgorithm mSnapAlgorithm;
private final Handler mMainHandler = new Handler(Looper.getMainLooper());
- /** PIP's current bounds on the screen. */
- private final Rect mBounds = new Rect();
-
/** The bounds within which PIP's top-left coordinate is allowed to move. */
private final Rect mMovementBounds = new Rect();
@@ -140,7 +137,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
private final Consumer<Rect> mUpdateBoundsCallback = (Rect newBounds) -> {
mMainHandler.post(() -> {
mMenuController.updateMenuLayout(newBounds);
- mBounds.set(newBounds);
+ mPipBoundsState.setBounds(newBounds);
});
};
@@ -196,7 +193,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
mResizePipUpdateListener = (target, values) -> {
if (!mTemporaryBounds.isEmpty()) {
mPipTaskOrganizer.scheduleUserResizePip(
- mBounds, mTemporaryBounds, null);
+ getBounds(), mTemporaryBounds, null);
}
};
}
@@ -204,7 +201,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
@NonNull
@Override
public Rect getFloatingBoundsOnScreen() {
- return !mAnimatingToBounds.isEmpty() ? mAnimatingToBounds : mBounds;
+ return !mAnimatingToBounds.isEmpty() ? mAnimatingToBounds : getBounds();
}
@NonNull
@@ -223,7 +220,6 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
*/
void synchronizePinnedStackBounds() {
cancelAnimations();
- mBounds.set(mPipBoundsState.getBounds());
mTemporaryBounds.setEmpty();
if (mPipTaskOrganizer.isInPip()) {
@@ -261,10 +257,10 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
if (!isDragging) {
resizePipUnchecked(toBounds);
- mBounds.set(toBounds);
+ mPipBoundsState.setBounds(toBounds);
} else {
mTemporaryBounds.set(toBounds);
- mPipTaskOrganizer.scheduleUserResizePip(mBounds, mTemporaryBounds,
+ mPipTaskOrganizer.scheduleUserResizePip(getBounds(), mTemporaryBounds,
(Rect newBounds) -> {
mMainHandler.post(() -> {
mMenuController.updateMenuLayout(newBounds);
@@ -275,8 +271,8 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
// If PIP is 'catching up' after being stuck in the dismiss target, update the animation
// to spring towards the new touch location.
mTemporaryBoundsPhysicsAnimator
- .spring(FloatProperties.RECT_WIDTH, mBounds.width(), mSpringConfig)
- .spring(FloatProperties.RECT_HEIGHT, mBounds.height(), mSpringConfig)
+ .spring(FloatProperties.RECT_WIDTH, getBounds().width(), mSpringConfig)
+ .spring(FloatProperties.RECT_HEIGHT, getBounds().height(), mSpringConfig)
.spring(FloatProperties.RECT_X, toBounds.left, mSpringConfig)
.spring(FloatProperties.RECT_Y, toBounds.top, mSpringConfig);
@@ -292,8 +288,8 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
boolean flung, Function0<Unit> after) {
final PointF targetCenter = target.getCenterOnScreen();
- final float desiredWidth = mBounds.width() / 2;
- final float desiredHeight = mBounds.height() / 2;
+ final float desiredWidth = getBounds().width() / 2;
+ final float desiredHeight = getBounds().height() / 2;
final float destinationX = targetCenter.x - (desiredWidth / 2f);
final float destinationY = targetCenter.y - (desiredHeight / 2f);
@@ -301,7 +297,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
// If we're already in the dismiss target area, then there won't be a move to set the
// temporary bounds, so just initialize it to the current bounds
if (mTemporaryBounds.isEmpty()) {
- mTemporaryBounds.set(mBounds);
+ mTemporaryBounds.set(getBounds());
}
mTemporaryBoundsPhysicsAnimator
.spring(FloatProperties.RECT_X, destinationX, velX, mSpringConfig)
@@ -365,15 +361,17 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
// The movement bounds represent the area within which we can move PIP's top-left position.
// The allowed area for all of PIP is those bounds plus PIP's width and height.
mFloatingAllowedArea.set(mMovementBounds);
- mFloatingAllowedArea.right += mBounds.width();
- mFloatingAllowedArea.bottom += mBounds.height();
+ mFloatingAllowedArea.right += getBounds().width();
+ mFloatingAllowedArea.bottom += getBounds().height();
}
/**
* @return the PiP bounds.
+ *
+ * TODO(b/169373982): can be private, outside callers can use PipBoundsState directly.
*/
Rect getBounds() {
- return mBounds;
+ return mPipBoundsState.getBounds();
}
/**
@@ -381,7 +379,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
* otherwise.
*/
Rect getPossiblyAnimatingBounds() {
- return mTemporaryBounds.isEmpty() ? mBounds : mTemporaryBounds;
+ return mTemporaryBounds.isEmpty() ? getBounds() : mTemporaryBounds;
}
/**
@@ -407,8 +405,8 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
mSpringingToTouch = false;
mTemporaryBoundsPhysicsAnimator
- .spring(FloatProperties.RECT_WIDTH, mBounds.width(), mSpringConfig)
- .spring(FloatProperties.RECT_HEIGHT, mBounds.height(), mSpringConfig)
+ .spring(FloatProperties.RECT_WIDTH, getBounds().width(), mSpringConfig)
+ .spring(FloatProperties.RECT_HEIGHT, getBounds().height(), mSpringConfig)
.flingThenSpring(
FloatProperties.RECT_X, velocityX, isStash ? mStashConfigX : mFlingConfigX,
mSpringConfig, true /* flingMustReachMinOrMax */)
@@ -416,7 +414,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
FloatProperties.RECT_Y, velocityY, mFlingConfigY, mSpringConfig)
.withEndActions(endAction);
- final float offset = ((float) mBounds.width()) * (1.0f - STASH_RATIO);
+ final float offset = ((float) getBounds().width()) * (1.0f - STASH_RATIO);
final float leftEdge = isStash ? mMovementBounds.left - offset : mMovementBounds.left;
final float rightEdge = isStash ? mMovementBounds.right + offset : mMovementBounds.right;
@@ -436,7 +434,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
void animateToBounds(Rect bounds, PhysicsAnimator.SpringConfig springConfig) {
if (!mTemporaryBoundsPhysicsAnimator.isRunning()) {
// Animate from the current bounds if we're not already animating.
- mTemporaryBounds.set(mBounds);
+ mTemporaryBounds.set(getBounds());
}
mTemporaryBoundsPhysicsAnimator
@@ -453,13 +451,13 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
// Animate off the bottom of the screen, then dismiss PIP.
mTemporaryBoundsPhysicsAnimator
.spring(FloatProperties.RECT_Y,
- mMovementBounds.bottom + mBounds.height() * 2,
+ mMovementBounds.bottom + getBounds().height() * 2,
0,
mSpringConfig)
.withEndActions(this::dismissPip);
startBoundsAnimator(
- mBounds.left /* toX */, mBounds.bottom + mBounds.height() /* toY */,
+ getBounds().left /* toX */, getBounds().bottom + getBounds().height() /* toY */,
true /* dismiss */);
mDismissalPending = false;
@@ -470,7 +468,8 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
*/
float animateToExpandedState(Rect expandedBounds, Rect movementBounds,
Rect expandedMovementBounds, Runnable callback) {
- float savedSnapFraction = mSnapAlgorithm.getSnapFraction(new Rect(mBounds), movementBounds);
+ float savedSnapFraction = mSnapAlgorithm.getSnapFraction(new Rect(getBounds()),
+ movementBounds);
mSnapAlgorithm.applySnapFraction(expandedBounds, expandedMovementBounds, savedSnapFraction);
mPostPipTransitionCallback = callback;
resizeAndAnimatePipUnchecked(expandedBounds, EXPAND_STACK_TO_MENU_DURATION);
@@ -484,7 +483,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
Rect normalMovementBounds, Rect currentMovementBounds, boolean immediate) {
if (savedSnapFraction < 0f) {
// If there are no saved snap fractions, then just use the current bounds
- savedSnapFraction = mSnapAlgorithm.getSnapFraction(new Rect(mBounds),
+ savedSnapFraction = mSnapAlgorithm.getSnapFraction(new Rect(getBounds()),
currentMovementBounds);
}
mSnapAlgorithm.applySnapFraction(normalBounds, normalMovementBounds, savedSnapFraction);
@@ -525,7 +524,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
DEFAULT_FRICTION, mMovementBounds.left, mMovementBounds.right);
mFlingConfigY = new PhysicsAnimator.FlingConfig(
DEFAULT_FRICTION, mMovementBounds.top, mMovementBounds.bottom);
- final float offset = ((float) mBounds.width()) * (1.0f - STASH_RATIO);
+ final float offset = ((float) getBounds().width()) * (1.0f - STASH_RATIO);
mStashConfigX = new PhysicsAnimator.FlingConfig(
DEFAULT_FRICTION, mMovementBounds.left - offset, mMovementBounds.right + offset);
}
@@ -547,8 +546,8 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
mAnimatingToBounds.set(
(int) toX,
(int) toY,
- (int) toX + mBounds.width(),
- (int) toY + mBounds.height());
+ (int) toX + getBounds().width(),
+ (int) toY + getBounds().height());
setAnimatingToBounds(mAnimatingToBounds);
if (!mTemporaryBoundsPhysicsAnimator.isRunning()) {
@@ -572,11 +571,11 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
if (!mDismissalPending
&& !mSpringingToTouch
&& !mMagnetizedPip.getObjectStuckToTarget()) {
- mBounds.set(mTemporaryBounds);
+ mPipBoundsState.setBounds(mTemporaryBounds);
if (!mDismissalPending) {
// do not schedule resize if PiP is dismissing, which may cause app re-open to
// mBounds instead of it's normal bounds.
- mPipTaskOrganizer.scheduleFinishResizePip(mBounds);
+ mPipTaskOrganizer.scheduleFinishResizePip(getBounds());
}
mTemporaryBounds.setEmpty();
}
@@ -604,7 +603,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
Log.d(TAG, "resizePipUnchecked: toBounds=" + toBounds
+ " callers=\n" + Debug.getCallers(5, " "));
}
- if (!toBounds.equals(mBounds)) {
+ if (!toBounds.equals(getBounds())) {
mPipTaskOrganizer.scheduleResizePip(toBounds, mUpdateBoundsCallback);
}
}
@@ -657,6 +656,6 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
public void dump(PrintWriter pw, String prefix) {
final String innerPrefix = prefix + " ";
pw.println(prefix + TAG);
- pw.println(innerPrefix + "mBounds=" + mBounds);
+ pw.println(innerPrefix + "mBounds=" + getBounds());
}
}