From 8dcbe0c9bfa3c43425fdf438509ab99f68a69777 Mon Sep 17 00:00:00 2001 From: "jorgegil@google.com" Date: Tue, 10 Nov 2020 13:19:13 -0800 Subject: [PATCH] Move normal and expanded bounds into PipBoundsState Bug; 169373982 Test: com.android.wm.shell.pip Change-Id: Id5636cfc7c9cfa828dd51f1a79e2ba1ed3b79c42 --- .../android/wm/shell/pip/PipBoundsState.java | 30 +++++++++- .../wm/shell/pip/phone/PipController.java | 13 ++--- .../wm/shell/pip/phone/PipTouchHandler.java | 56 +++++++++---------- 3 files changed, 58 insertions(+), 41 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 78f7e25ee3fae..f482440483e70 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 @@ -54,6 +54,8 @@ public final class PipBoundsState { private static final String TAG = PipBoundsState.class.getSimpleName(); private final @NonNull Rect mBounds = new Rect(); + private final @NonNull Rect mNormalBounds = new Rect(); + private final @NonNull Rect mExpandedBounds = new Rect(); private final Context mContext; private float mAspectRatio; private int mStashedState = STASH_TYPE_NONE; @@ -92,9 +94,7 @@ public final class PipBoundsState { .getDimensionPixelSize(R.dimen.pip_stash_offset); } - /** - * Set the current PIP bounds. - */ + /** Set the current PIP bounds. */ public void setBounds(@NonNull Rect bounds) { mBounds.set(bounds); } @@ -104,6 +104,28 @@ public final class PipBoundsState { return new Rect(mBounds); } + /** Set the current normal PIP bounds. */ + public void setNormalBounds(@NonNull Rect bounds) { + mNormalBounds.set(bounds); + } + + /** Get the current normal PIP bounds. */ + @NonNull + public Rect getNormalBounds() { + return mNormalBounds; + } + + /** Set the expanded bounds of PIP. */ + public void setExpandedBounds(@NonNull Rect bounds) { + mExpandedBounds.set(bounds); + } + + /** Get the PIP expanded bounds. */ + @NonNull + public Rect getExpandedBounds() { + return mExpandedBounds; + } + /** * Dictate where PiP currently should be stashed, if at all. */ @@ -389,6 +411,8 @@ public final class PipBoundsState { final String innerPrefix = prefix + " "; pw.println(prefix + TAG); pw.println(innerPrefix + "mBounds=" + mBounds); + pw.println(innerPrefix + "mNormalBounds=" + mNormalBounds); + pw.println(innerPrefix + "mExpandedBounds=" + mExpandedBounds); pw.println(innerPrefix + "mLastPipComponentName=" + mLastPipComponentName); pw.println(innerPrefix + "mAspectRatio=" + mAspectRatio); pw.println(innerPrefix + "mDisplayInfo=" + mDisplayInfo); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java index 1f67d2c748e0c..598b5d9b5d300 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java @@ -87,7 +87,6 @@ public class PipController implements Pip, PipTaskOrganizer.PipTransitionCallbac private final DisplayInfo mTmpDisplayInfo = new DisplayInfo(); private final Rect mTmpInsetBounds = new Rect(); - private final Rect mTmpNormalBounds = new Rect(); protected final Rect mReentryBounds = new Rect(); private boolean mIsInFixedRotation; @@ -114,12 +113,12 @@ public class PipController implements Pip, PipTaskOrganizer.PipTransitionCallbac // TODO: Technically this should account for movement animation bounds as well Rect currentBounds = mPipTaskOrganizer.getCurrentOrAnimatingBounds(); final boolean changed = onDisplayRotationChanged(mContext, - mTmpNormalBounds, currentBounds, mTmpInsetBounds, displayId, fromRotation, - toRotation, t); + mPipBoundsState.getNormalBounds(), currentBounds, mTmpInsetBounds, displayId, + fromRotation, toRotation, t); if (changed) { // If the pip was in the offset zone earlier, adjust the new bounds to the bottom of the // movement bounds - mTouchHandler.adjustBoundsForRotation(mTmpNormalBounds, + mTouchHandler.adjustBoundsForRotation(mPipBoundsState.getNormalBounds(), mPipBoundsState.getBounds(), mTmpInsetBounds); // The bounds are being applied to a specific snap fraction, so reset any known offsets @@ -134,7 +133,7 @@ public class PipController implements Pip, PipTaskOrganizer.PipTransitionCallbac mTouchHandler.onImeVisibilityChanged(false, 0); } - updateMovementBounds(mTmpNormalBounds, true /* fromRotation */, + updateMovementBounds(mPipBoundsState.getNormalBounds(), true /* fromRotation */, false /* fromImeAdjustment */, false /* fromShelfAdjustment */, t); } }; @@ -511,7 +510,7 @@ public class PipController implements Pip, PipTaskOrganizer.PipTransitionCallbac mTmpDisplayInfo.copyFrom(mPipBoundsState.getDisplayInfo()); mPipBoundsAlgorithm.getInsetBounds(mTmpInsetBounds); - mTmpNormalBounds.set(mPipBoundsAlgorithm.getNormalBounds()); + mPipBoundsState.setNormalBounds(mPipBoundsAlgorithm.getNormalBounds()); if (outBounds.isEmpty()) { outBounds.set(mPipBoundsAlgorithm.getDefaultBounds()); } @@ -519,7 +518,7 @@ public class PipController implements Pip, PipTaskOrganizer.PipTransitionCallbac // mTouchHandler would rely on the bounds populated from mPipTaskOrganizer mPipTaskOrganizer.onMovementBoundsChanged(outBounds, fromRotation, fromImeAdjustment, fromShelfAdjustment, wct); - mTouchHandler.onMovementBoundsChanged(mTmpInsetBounds, mTmpNormalBounds, + mTouchHandler.onMovementBoundsChanged(mTmpInsetBounds, mPipBoundsState.getNormalBounds(), outBounds, fromImeAdjustment, fromShelfAdjustment, mTmpDisplayInfo.rotation); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java index d8cab8eeab138..480ebd7f35d98 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java @@ -94,10 +94,7 @@ public class PipTouchHandler { // The reference inset bounds, used to determine the dismiss fraction private Rect mInsetBounds = new Rect(); - // The reference bounds used to calculate the normal/expanded target bounds - private Rect mNormalBounds = new Rect(); @VisibleForTesting public Rect mNormalMovementBounds = new Rect(); - private Rect mExpandedBounds = new Rect(); @VisibleForTesting public Rect mExpandedMovementBounds = new Rect(); private int mExpandedShortestEdgeSize; @@ -345,9 +342,8 @@ public class PipTouchHandler { } // Re-calculate the expanded bounds - mNormalBounds.set(normalBounds); Rect normalMovementBounds = new Rect(); - mPipBoundsAlgorithm.getSnapAlgorithm().getMovementBounds(mNormalBounds, insetBounds, + mPipBoundsAlgorithm.getSnapAlgorithm().getMovementBounds(normalBounds, insetBounds, normalMovementBounds, bottomOffset); if (mMovementBounds.isEmpty()) { @@ -363,13 +359,16 @@ public class PipTouchHandler { mContext.getDisplay().getRealSize(displaySize); Size expandedSize = mPipBoundsAlgorithm.getSnapAlgorithm().getSizeForAspectRatio( aspectRatio, mExpandedShortestEdgeSize, displaySize.x, displaySize.y); - mExpandedBounds.set(0, 0, expandedSize.getWidth(), expandedSize.getHeight()); + mPipBoundsState.setExpandedBounds( + new Rect(0, 0, expandedSize.getWidth(), expandedSize.getHeight())); Rect expandedMovementBounds = new Rect(); - mPipBoundsAlgorithm.getSnapAlgorithm().getMovementBounds(mExpandedBounds, insetBounds, - expandedMovementBounds, bottomOffset); + mPipBoundsAlgorithm.getSnapAlgorithm().getMovementBounds( + mPipBoundsState.getExpandedBounds(), insetBounds, expandedMovementBounds, + bottomOffset); - mPipResizeGestureHandler.updateMinSize(mNormalBounds.width(), mNormalBounds.height()); - mPipResizeGestureHandler.updateMaxSize(mExpandedBounds.width(), mExpandedBounds.height()); + mPipResizeGestureHandler.updateMinSize(normalBounds.width(), normalBounds.height()); + mPipResizeGestureHandler.updateMaxSize(mPipBoundsState.getExpandedBounds().width(), + mPipBoundsState.getExpandedBounds().height()); // The extra offset does not really affect the movement bounds, but are applied based on the // current state (ime showing, or shelf offset) when we need to actually shift @@ -396,7 +395,7 @@ public class PipTouchHandler { : toMovementBounds.bottom - extraOffset; if (isExpanded) { - curBounds.set(mExpandedBounds); + curBounds.set(mPipBoundsState.getExpandedBounds()); mPipBoundsAlgorithm.getSnapAlgorithm().applySnapFraction(curBounds, toMovementBounds, mSavedSnapFraction); } @@ -423,8 +422,8 @@ public class PipTouchHandler { mInsetBounds.set(insetBounds); updateMovementBounds(); mMovementBoundsExtraOffsets = extraOffset; - mConnection.onMovementBoundsChanged(mNormalBounds, mExpandedBounds, mNormalMovementBounds, - mExpandedMovementBounds); + mConnection.onMovementBoundsChanged(normalBounds, mPipBoundsState.getExpandedBounds(), + mNormalMovementBounds, mExpandedMovementBounds); // If we have a deferred resize, apply it now if (mDeferResizeToNormalBoundsUntilRotation == displayRotation) { @@ -653,7 +652,7 @@ public class PipTouchHandler { } private void animateToExpandedState(Runnable callback) { - Rect expandedBounds = new Rect(mExpandedBounds); + Rect expandedBounds = new Rect(mPipBoundsState.getExpandedBounds()); mSavedSnapFraction = mMotionHelper.animateToExpandedState(expandedBounds, mMovementBounds, mExpandedMovementBounds, callback); } @@ -689,13 +688,6 @@ public class PipTouchHandler { mMotionHelper = pipMotionHelper; } - /** - * @return the unexpanded bounds. - */ - public Rect getNormalBounds() { - return mNormalBounds; - } - Rect getUserResizeBounds() { return mPipResizeGestureHandler.getUserResizeBounds(); } @@ -805,15 +797,17 @@ public class PipTouchHandler { } else if (mTouchState.isDoubleTap() && !mPipBoundsState.isStashed()) { // If using pinch to zoom, double-tap functions as resizing between max/min size if (mPipResizeGestureHandler.isUsingPinchToZoom()) { - final boolean toExpand = - mMotionHelper.getBounds().width() < mExpandedBounds.width() - && mMotionHelper.getBounds().height() < mExpandedBounds.height(); - mPipResizeGestureHandler.setUserResizeBounds(toExpand ? mExpandedBounds - : mNormalBounds); + final boolean toExpand = mMotionHelper.getBounds().width() + < mPipBoundsState.getExpandedBounds().width() + && mMotionHelper.getBounds().height() + < mPipBoundsState.getExpandedBounds().height(); + mPipResizeGestureHandler.setUserResizeBounds(toExpand + ? mPipBoundsState.getExpandedBounds() + : mPipBoundsState.getNormalBounds()); if (toExpand) { animateToExpandedState(null); } else { - animateToUnexpandedState(mNormalBounds); + animateToUnexpandedState(mPipBoundsState.getNormalBounds()); } } else { // Expand to fullscreen if this is a double tap @@ -894,8 +888,10 @@ public class PipTouchHandler { if (!mEnableResize) { return false; } - return mExpandedBounds.width() != mNormalBounds.width() - || mExpandedBounds.height() != mNormalBounds.height(); + return mPipBoundsState.getExpandedBounds().width() + != mPipBoundsState.getNormalBounds().width() + || mPipBoundsState.getExpandedBounds().height() + != mPipBoundsState.getNormalBounds().height(); } /** @@ -912,9 +908,7 @@ public class PipTouchHandler { final String innerPrefix = prefix + " "; pw.println(prefix + TAG); pw.println(innerPrefix + "mMovementBounds=" + mMovementBounds); - pw.println(innerPrefix + "mNormalBounds=" + mNormalBounds); pw.println(innerPrefix + "mNormalMovementBounds=" + mNormalMovementBounds); - pw.println(innerPrefix + "mExpandedBounds=" + mExpandedBounds); pw.println(innerPrefix + "mExpandedMovementBounds=" + mExpandedMovementBounds); pw.println(innerPrefix + "mMenuState=" + mMenuState); pw.println(innerPrefix + "mIsImeShowing=" + mIsImeShowing);