Polish YT auto enter PiP transition

- Fixed the round corner radius calculation, take into account the
  insets, was applied to the destination bounds side
- Adjust the leash position based on the insets

Video: http://recall/-/aaaaaabFQoRHlzixHdtY/eUpkH2il1vYBVBPt1Vks2u
Bug: 190748719
Test: auto-enter-pip from YT landscape, see video
Change-Id: I2f3f4ae807630c5ae6bcc9968c6b46cf4501ad07
This commit is contained in:
Hongwei Wang
2021-06-09 14:45:03 -07:00
parent 4e46adb808
commit 6a92728699

View File

@@ -85,9 +85,7 @@ public class PipSurfaceTransactionHelper {
final float left = destinationBounds.left - insets.left * scale;
final float top = destinationBounds.top - insets.top * scale;
mTmpTransform.setScale(scale, scale);
final Rect cornerRadiusRect = new Rect(destinationBounds);
cornerRadiusRect.inset(insets);
final float cornerRadius = getScaledCornerRadius(sourceBounds, cornerRadiusRect);
final float cornerRadius = getScaledCornerRadius(mTmpDestinationRect, destinationBounds);
tx.setMatrix(leash, mTmpTransform, mTmpFloat9)
.setWindowCrop(leash, mTmpDestinationRect)
.setPosition(leash, left, top)
@@ -110,15 +108,23 @@ public class PipSurfaceTransactionHelper {
: (float) destinationBounds.height() / sourceBounds.height();
mTmpTransform.setRotate(degree, 0, 0);
mTmpTransform.postScale(scale, scale);
final Rect cornerRadiusRect = new Rect(destinationBounds);
cornerRadiusRect.inset(insets);
final float cornerRadius = getScaledCornerRadius(sourceBounds, cornerRadiusRect);
final float cornerRadius = getScaledCornerRadius(mTmpDestinationRect, destinationBounds);
// adjust the positions, take account also the insets
final float adjustedPositionX, adjustedPositionY;
if (degree < 0) {
adjustedPositionX = positionX + insets.top * scale;
adjustedPositionY = positionY + insets.left * scale;
} else {
adjustedPositionX = positionX - insets.top * scale;
adjustedPositionY = positionY - insets.left * scale;
}
tx.setMatrix(leash, mTmpTransform, mTmpFloat9)
.setWindowCrop(leash, mTmpDestinationRect)
.setPosition(leash, positionX, positionY)
.setPosition(leash, adjustedPositionX, adjustedPositionY)
.setCornerRadius(leash, cornerRadius);
return new PictureInPictureSurfaceTransaction(
positionX, positionY, mTmpFloat9, degree, cornerRadius, mTmpDestinationRect);
adjustedPositionX, adjustedPositionY,
mTmpFloat9, degree, cornerRadius, mTmpDestinationRect);
}
/** @return the round corner radius scaled by given from and to bounds */