Merge "Use reentry size to calculate PIP entry bounds" into rvc-qpr-dev

This commit is contained in:
Jorge Gil
2020-08-07 23:30:09 +00:00
committed by Android (Google) Code Review
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);