Loading packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java +9 −8 Original line number Diff line number Diff line Loading @@ -177,7 +177,7 @@ public class PipBoundsHandler { } if (isValidPictureInPictureAspectRatio(mAspectRatio)) { transformBoundsToAspectRatio(normalBounds, mAspectRatio, false /* useCurrentMinEdgeSize */); false /* useCurrentMinEdgeSize */, false /* useCurrentSize */); } displayInfo.copyFrom(mDisplayInfo); } Loading Loading @@ -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; Loading Loading @@ -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 */); } /** Loading @@ -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); } Loading packages/SystemUI/tests/src/com/android/systemui/pip/PipBoundsHandlerTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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); Loading Loading
packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java +9 −8 Original line number Diff line number Diff line Loading @@ -177,7 +177,7 @@ public class PipBoundsHandler { } if (isValidPictureInPictureAspectRatio(mAspectRatio)) { transformBoundsToAspectRatio(normalBounds, mAspectRatio, false /* useCurrentMinEdgeSize */); false /* useCurrentMinEdgeSize */, false /* useCurrentSize */); } displayInfo.copyFrom(mDisplayInfo); } Loading Loading @@ -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; Loading Loading @@ -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 */); } /** Loading @@ -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); } Loading
packages/SystemUI/tests/src/com/android/systemui/pip/PipBoundsHandlerTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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); Loading