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

View File

@@ -269,6 +269,21 @@ public class PipBoundsHandlerTest extends SysuiTestCase {
assertBoundsInclusionWithMargin("restoreLastPosition", oldPosition, newPosition); 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 @Test
public void onResetReentryBounds_useDefaultBounds() { public void onResetReentryBounds_useDefaultBounds() {
final Rect defaultBounds = mPipBoundsHandler.getDestinationBounds(mTestComponentName1, final Rect defaultBounds = mPipBoundsHandler.getDestinationBounds(mTestComponentName1,
@@ -299,6 +314,22 @@ public class PipBoundsHandlerTest extends SysuiTestCase {
assertBoundsInclusionWithMargin("restoreLastPosition", newBounds, actualBounds); 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) { private void assertBoundsInclusionWithMargin(String from, Rect expected, Rect actual) {
final Rect expectedWithMargin = new Rect(expected); final Rect expectedWithMargin = new Rect(expected);
expectedWithMargin.inset(-ROUNDING_ERROR_MARGIN, -ROUNDING_ERROR_MARGIN); expectedWithMargin.inset(-ROUNDING_ERROR_MARGIN, -ROUNDING_ERROR_MARGIN);