Use reentry size to calculate PIP entry bounds

Use the saved reentry size when restoring the PIP
bounds if available.

Note: this CL doesn't actually change the size of
the bounds we restore to because the saved reentry
size is always the normal bounds. It does however
make it so that if the saved reentry size were to
be changed to something other than the normal bounds
then it would actually restore to it on reentry.

Bug: 160799929
Test: atest SystemUITests
Test: in an environment where the saved reentry size
is changed, the PIP window is restored to that size
when re-entering PIP

Change-Id: I0bbb4725c249d9d81b80b46d1bff5d6cd11981c3
Merged-In: I0bbb4725c249d9d81b80b46d1bff5d6cd11981c3
(cherry picked from commit 4177a5ee62)
This commit is contained in:
jorgegil@google.com
2020-07-10 11:58:49 -07:00
committed by Jorge Gil
parent 21d93d42d9
commit 98e7fb1d55
2 changed files with 40 additions and 8 deletions

View File

@@ -177,7 +177,7 @@ public class PipBoundsHandler {
}
if (isValidPictureInPictureAspectRatio(mAspectRatio)) {
transformBoundsToAspectRatio(normalBounds, mAspectRatio,
false /* useCurrentMinEdgeSize */);
false /* useCurrentMinEdgeSize */, false /* useCurrentSize */);
}
displayInfo.copyFrom(mDisplayInfo);
}
@@ -278,7 +278,9 @@ public class PipBoundsHandler {
destinationBounds = new Rect(bounds);
}
if (isValidPictureInPictureAspectRatio(aspectRatio)) {
transformBoundsToAspectRatio(destinationBounds, aspectRatio, useCurrentMinEdgeSize);
boolean useCurrentSize = bounds == null && mReentrySize != null;
transformBoundsToAspectRatio(destinationBounds, aspectRatio, useCurrentMinEdgeSize,
useCurrentSize);
}
mAspectRatio = aspectRatio;
return destinationBounds;
@@ -384,7 +386,8 @@ public class PipBoundsHandler {
* @param stackBounds
*/
public void transformBoundsToAspectRatio(Rect stackBounds) {
transformBoundsToAspectRatio(stackBounds, mAspectRatio, true);
transformBoundsToAspectRatio(stackBounds, mAspectRatio, true /* useCurrentMinEdgeSize */,
true /* useCurrentSize */);
}
/**
@@ -392,18 +395,16 @@ public class PipBoundsHandler {
* specified aspect ratio.
*/
private void transformBoundsToAspectRatio(Rect stackBounds, float aspectRatio,
boolean useCurrentMinEdgeSize) {
boolean useCurrentMinEdgeSize, boolean useCurrentSize) {
// Save the snap fraction and adjust the size based on the new aspect ratio.
final float snapFraction = mSnapAlgorithm.getSnapFraction(stackBounds,
getMovementBounds(stackBounds));
final int minEdgeSize;
final int minEdgeSize = useCurrentMinEdgeSize ? mCurrentMinSize : mDefaultMinSize;
final Size size;
if (useCurrentMinEdgeSize) {
minEdgeSize = mCurrentMinSize;
if (useCurrentMinEdgeSize || useCurrentSize) {
size = mSnapAlgorithm.getSizeForAspectRatio(
new Size(stackBounds.width(), stackBounds.height()), aspectRatio, minEdgeSize);
} else {
minEdgeSize = mDefaultMinSize;
size = mSnapAlgorithm.getSizeForAspectRatio(aspectRatio, minEdgeSize,
mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight);
}

View File

@@ -269,6 +269,21 @@ public class PipBoundsHandlerTest extends SysuiTestCase {
assertBoundsInclusionWithMargin("restoreLastPosition", oldPosition, newPosition);
}
@Test
public void onSaveReentryBounds_restoreLastSize() {
final Rect oldSize = mPipBoundsHandler.getDestinationBounds(mTestComponentName1,
DEFAULT_ASPECT_RATIO, EMPTY_CURRENT_BOUNDS, EMPTY_MINIMAL_SIZE);
oldSize.scale(1.25f);
mPipBoundsHandler.onSaveReentryBounds(mTestComponentName1, oldSize);
final Rect newSize = mPipBoundsHandler.getDestinationBounds(mTestComponentName1,
DEFAULT_ASPECT_RATIO, EMPTY_CURRENT_BOUNDS, EMPTY_MINIMAL_SIZE);
assertEquals(oldSize.width(), newSize.width());
assertEquals(oldSize.height(), newSize.height());
}
@Test
public void onResetReentryBounds_useDefaultBounds() {
final Rect defaultBounds = mPipBoundsHandler.getDestinationBounds(mTestComponentName1,
@@ -299,6 +314,22 @@ public class PipBoundsHandlerTest extends SysuiTestCase {
assertBoundsInclusionWithMargin("restoreLastPosition", newBounds, actualBounds);
}
@Test
public void onSaveReentryBounds_componentMismatch_restoreLastSize() {
final Rect oldSize = mPipBoundsHandler.getDestinationBounds(mTestComponentName1,
DEFAULT_ASPECT_RATIO, EMPTY_CURRENT_BOUNDS, EMPTY_MINIMAL_SIZE);
oldSize.scale(1.25f);
mPipBoundsHandler.onSaveReentryBounds(mTestComponentName1, oldSize);
mPipBoundsHandler.onResetReentryBounds(mTestComponentName2);
final Rect newSize = mPipBoundsHandler.getDestinationBounds(mTestComponentName1,
DEFAULT_ASPECT_RATIO, EMPTY_CURRENT_BOUNDS, EMPTY_MINIMAL_SIZE);
assertEquals(oldSize.width(), newSize.width());
assertEquals(oldSize.height(), newSize.height());
}
private void assertBoundsInclusionWithMargin(String from, Rect expected, Rect actual) {
final Rect expectedWithMargin = new Rect(expected);
expectedWithMargin.inset(-ROUNDING_ERROR_MARGIN, -ROUNDING_ERROR_MARGIN);