Use last user-resized size when re-entering PIP
Bug: 160799929
Test: enter PIP, resize it, restore to fullscreen then re-enter.
The re-entry size should be the same as when exiting.
Change-Id: Idb36b5ec51c2d76b9df5f311518652109fa57b37
Merged-In: Idb36b5ec51c2d76b9df5f311518652109fa57b37
(cherry picked from commit 134e7fc413)
This commit is contained in:
committed by
Jorge Gil
parent
ca28a90bec
commit
89f122abe2
@@ -377,12 +377,7 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
|
|||||||
* Update the bounds used to save the re-entry size and snap fraction when exiting PIP.
|
* Update the bounds used to save the re-entry size and snap fraction when exiting PIP.
|
||||||
*/
|
*/
|
||||||
public void updateReentryBounds() {
|
public void updateReentryBounds() {
|
||||||
// On phones, the expansion animation that happens on pip tap before restoring
|
final Rect reentryBounds = mTouchHandler.getUserResizeBounds();
|
||||||
// to fullscreen makes it so that the last reported bounds are the expanded
|
|
||||||
// bounds. We want to restore to the unexpanded bounds when re-entering pip,
|
|
||||||
// so we use the bounds before expansion (normal) instead of the reported
|
|
||||||
// bounds.
|
|
||||||
Rect reentryBounds = mTouchHandler.getNormalBounds();
|
|
||||||
// Apply the snap fraction of the current bounds to the normal bounds.
|
// Apply the snap fraction of the current bounds to the normal bounds.
|
||||||
final Rect bounds = mPipTaskOrganizer.getLastReportedBounds();
|
final Rect bounds = mPipTaskOrganizer.getLastReportedBounds();
|
||||||
float snapFraction = mPipBoundsHandler.getSnapFraction(bounds);
|
float snapFraction = mPipBoundsHandler.getSnapFraction(bounds);
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ public class PipResizeGestureHandler {
|
|||||||
private final Point mMaxSize = new Point();
|
private final Point mMaxSize = new Point();
|
||||||
private final Point mMinSize = new Point();
|
private final Point mMinSize = new Point();
|
||||||
private final Rect mLastResizeBounds = new Rect();
|
private final Rect mLastResizeBounds = new Rect();
|
||||||
|
private final Rect mUserResizeBounds = new Rect();
|
||||||
private final Rect mLastDownBounds = new Rect();
|
private final Rect mLastDownBounds = new Rect();
|
||||||
private final Rect mDragCornerSize = new Rect();
|
private final Rect mDragCornerSize = new Rect();
|
||||||
private final Rect mTmpTopLeftCorner = new Rect();
|
private final Rect mTmpTopLeftCorner = new Rect();
|
||||||
@@ -185,6 +186,7 @@ public class PipResizeGestureHandler {
|
|||||||
|
|
||||||
void onActivityUnpinned() {
|
void onActivityUnpinned() {
|
||||||
mIsAttached = false;
|
mIsAttached = false;
|
||||||
|
mUserResizeBounds.setEmpty();
|
||||||
updateIsEnabled();
|
updateIsEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -333,6 +335,7 @@ public class PipResizeGestureHandler {
|
|||||||
case MotionEvent.ACTION_UP:
|
case MotionEvent.ACTION_UP:
|
||||||
case MotionEvent.ACTION_CANCEL:
|
case MotionEvent.ACTION_CANCEL:
|
||||||
if (!mLastResizeBounds.isEmpty()) {
|
if (!mLastResizeBounds.isEmpty()) {
|
||||||
|
mUserResizeBounds.set(mLastResizeBounds);
|
||||||
mPipTaskOrganizer.scheduleFinishResizePip(mLastResizeBounds,
|
mPipTaskOrganizer.scheduleFinishResizePip(mLastResizeBounds,
|
||||||
(Rect bounds) -> {
|
(Rect bounds) -> {
|
||||||
new Handler(Looper.getMainLooper()).post(() -> {
|
new Handler(Looper.getMainLooper()).post(() -> {
|
||||||
@@ -357,6 +360,14 @@ public class PipResizeGestureHandler {
|
|||||||
mThresholdCrossed = false;
|
mThresholdCrossed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setUserResizeBounds(Rect bounds) {
|
||||||
|
mUserResizeBounds.set(bounds);
|
||||||
|
}
|
||||||
|
|
||||||
|
Rect getUserResizeBounds() {
|
||||||
|
return mUserResizeBounds;
|
||||||
|
}
|
||||||
|
|
||||||
void updateMaxSize(int maxX, int maxY) {
|
void updateMaxSize(int maxX, int maxY) {
|
||||||
mMaxSize.set(maxX, maxY);
|
mMaxSize.set(maxX, maxY);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,9 +133,6 @@ public class PipTouchHandler {
|
|||||||
|
|
||||||
// The current movement bounds
|
// The current movement bounds
|
||||||
private Rect mMovementBounds = new Rect();
|
private Rect mMovementBounds = new Rect();
|
||||||
// The current resized bounds, changed by user resize.
|
|
||||||
// This is used during expand/un-expand to save/restore the user's resized size.
|
|
||||||
@VisibleForTesting Rect mResizedBounds = new Rect();
|
|
||||||
|
|
||||||
// The reference inset bounds, used to determine the dismiss fraction
|
// The reference inset bounds, used to determine the dismiss fraction
|
||||||
private Rect mInsetBounds = new Rect();
|
private Rect mInsetBounds = new Rect();
|
||||||
@@ -376,7 +373,6 @@ public class PipTouchHandler {
|
|||||||
|
|
||||||
mFloatingContentCoordinator.onContentRemoved(mMotionHelper);
|
mFloatingContentCoordinator.onContentRemoved(mMotionHelper);
|
||||||
}
|
}
|
||||||
mResizedBounds.setEmpty();
|
|
||||||
mPipResizeGestureHandler.onActivityUnpinned();
|
mPipResizeGestureHandler.onActivityUnpinned();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -386,9 +382,8 @@ public class PipTouchHandler {
|
|||||||
mMotionHelper.synchronizePinnedStackBounds();
|
mMotionHelper.synchronizePinnedStackBounds();
|
||||||
updateMovementBounds();
|
updateMovementBounds();
|
||||||
if (direction == TRANSITION_DIRECTION_TO_PIP) {
|
if (direction == TRANSITION_DIRECTION_TO_PIP) {
|
||||||
// updates mResizedBounds only if it's an entering PiP animation
|
// Set the initial bounds as the user resize bounds.
|
||||||
// mResized should be otherwise updated in setMenuState.
|
mPipResizeGestureHandler.setUserResizeBounds(mMotionHelper.getBounds());
|
||||||
mResizedBounds.set(mMotionHelper.getBounds());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mShowPipMenuOnAnimationEnd) {
|
if (mShowPipMenuOnAnimationEnd) {
|
||||||
@@ -801,9 +796,7 @@ public class PipTouchHandler {
|
|||||||
// Save the current snap fraction and if we do not drag or move the PiP, then
|
// Save the current snap fraction and if we do not drag or move the PiP, then
|
||||||
// we store back to this snap fraction. Otherwise, we'll reset the snap
|
// we store back to this snap fraction. Otherwise, we'll reset the snap
|
||||||
// fraction and snap to the closest edge.
|
// fraction and snap to the closest edge.
|
||||||
// Also save the current resized bounds so when the menu disappears, we can restore it.
|
|
||||||
if (resize) {
|
if (resize) {
|
||||||
mResizedBounds.set(mMotionHelper.getBounds());
|
|
||||||
Rect expandedBounds = new Rect(mExpandedBounds);
|
Rect expandedBounds = new Rect(mExpandedBounds);
|
||||||
mSavedSnapFraction = mMotionHelper.animateToExpandedState(expandedBounds,
|
mSavedSnapFraction = mMotionHelper.animateToExpandedState(expandedBounds,
|
||||||
mMovementBounds, mExpandedMovementBounds, callback);
|
mMovementBounds, mExpandedMovementBounds, callback);
|
||||||
@@ -832,7 +825,7 @@ public class PipTouchHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mDeferResizeToNormalBoundsUntilRotation == -1) {
|
if (mDeferResizeToNormalBoundsUntilRotation == -1) {
|
||||||
Rect restoreBounds = new Rect(mResizedBounds);
|
Rect restoreBounds = new Rect(getUserResizeBounds());
|
||||||
Rect restoredMovementBounds = new Rect();
|
Rect restoredMovementBounds = new Rect();
|
||||||
mSnapAlgorithm.getMovementBounds(restoreBounds, mInsetBounds,
|
mSnapAlgorithm.getMovementBounds(restoreBounds, mInsetBounds,
|
||||||
restoredMovementBounds, mIsImeShowing ? mImeHeight : 0);
|
restoredMovementBounds, mIsImeShowing ? mImeHeight : 0);
|
||||||
@@ -885,6 +878,10 @@ public class PipTouchHandler {
|
|||||||
return mNormalBounds;
|
return mNormalBounds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rect getUserResizeBounds() {
|
||||||
|
return mPipResizeGestureHandler.getUserResizeBounds();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gesture controlling normal movement of the PIP.
|
* Gesture controlling normal movement of the PIP.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user