Loading services/core/java/com/android/server/wm/LetterboxUiController.java +10 −0 Original line number Diff line number Diff line Loading @@ -1311,6 +1311,16 @@ final class LetterboxUiController { final Rect cropBounds = new Rect(mActivityRecord.getBounds()); // In case of translucent activities we check if the requested size is different from // the size provided using inherited bounds. In that case we decide to not apply rounded // corners because we assume the specific layout would. This is the case when the layout // of the translucent activity uses only a part of all the bounds because of the use of // LayoutParams.WRAP_CONTENT. if (hasInheritedLetterboxBehavior() && (cropBounds.width() != mainWindow.mRequestedWidth || cropBounds.height() != mainWindow.mRequestedHeight)) { return null; } // It is important to call {@link #adjustBoundsIfNeeded} before {@link cropBounds.offsetTo} // because taskbar bounds used in {@link #adjustBoundsIfNeeded} // are in screen coordinates Loading services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java +23 −0 Original line number Diff line number Diff line Loading @@ -454,6 +454,29 @@ public class LetterboxUiControllerTest extends WindowTestsBase { assertTrue(mController.shouldForceRotateForCameraCompat()); } @Test public void testGetCropBoundsIfNeeded_handleCropForTransparentActivityBasedOnOpaqueBounds() { final InsetsSource taskbar = new InsetsSource(/*id=*/ 0, WindowInsets.Type.navigationBars()); taskbar.setInsetsRoundedCornerFrame(true); final WindowState mainWindow = mockForGetCropBoundsAndRoundedCorners(taskbar); final Rect opaqueBounds = new Rect(0, 0, 500, 300); doReturn(opaqueBounds).when(mActivity).getBounds(); // Activity is translucent spyOn(mActivity.mLetterboxUiController); doReturn(true).when(mActivity.mLetterboxUiController).hasInheritedLetterboxBehavior(); // Makes requested sizes different mainWindow.mRequestedWidth = opaqueBounds.width() - 1; mainWindow.mRequestedHeight = opaqueBounds.height() - 1; assertNull(mActivity.mLetterboxUiController.getCropBoundsIfNeeded(mainWindow)); // Makes requested sizes equals mainWindow.mRequestedWidth = opaqueBounds.width(); mainWindow.mRequestedHeight = opaqueBounds.height(); assertNotNull(mActivity.mLetterboxUiController.getCropBoundsIfNeeded(mainWindow)); } @Test public void testGetCropBoundsIfNeeded_noCrop() { final InsetsSource taskbar = new InsetsSource(/*id=*/ 0, Loading Loading
services/core/java/com/android/server/wm/LetterboxUiController.java +10 −0 Original line number Diff line number Diff line Loading @@ -1311,6 +1311,16 @@ final class LetterboxUiController { final Rect cropBounds = new Rect(mActivityRecord.getBounds()); // In case of translucent activities we check if the requested size is different from // the size provided using inherited bounds. In that case we decide to not apply rounded // corners because we assume the specific layout would. This is the case when the layout // of the translucent activity uses only a part of all the bounds because of the use of // LayoutParams.WRAP_CONTENT. if (hasInheritedLetterboxBehavior() && (cropBounds.width() != mainWindow.mRequestedWidth || cropBounds.height() != mainWindow.mRequestedHeight)) { return null; } // It is important to call {@link #adjustBoundsIfNeeded} before {@link cropBounds.offsetTo} // because taskbar bounds used in {@link #adjustBoundsIfNeeded} // are in screen coordinates Loading
services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java +23 −0 Original line number Diff line number Diff line Loading @@ -454,6 +454,29 @@ public class LetterboxUiControllerTest extends WindowTestsBase { assertTrue(mController.shouldForceRotateForCameraCompat()); } @Test public void testGetCropBoundsIfNeeded_handleCropForTransparentActivityBasedOnOpaqueBounds() { final InsetsSource taskbar = new InsetsSource(/*id=*/ 0, WindowInsets.Type.navigationBars()); taskbar.setInsetsRoundedCornerFrame(true); final WindowState mainWindow = mockForGetCropBoundsAndRoundedCorners(taskbar); final Rect opaqueBounds = new Rect(0, 0, 500, 300); doReturn(opaqueBounds).when(mActivity).getBounds(); // Activity is translucent spyOn(mActivity.mLetterboxUiController); doReturn(true).when(mActivity.mLetterboxUiController).hasInheritedLetterboxBehavior(); // Makes requested sizes different mainWindow.mRequestedWidth = opaqueBounds.width() - 1; mainWindow.mRequestedHeight = opaqueBounds.height() - 1; assertNull(mActivity.mLetterboxUiController.getCropBoundsIfNeeded(mainWindow)); // Makes requested sizes equals mainWindow.mRequestedWidth = opaqueBounds.width(); mainWindow.mRequestedHeight = opaqueBounds.height(); assertNotNull(mActivity.mLetterboxUiController.getCropBoundsIfNeeded(mainWindow)); } @Test public void testGetCropBoundsIfNeeded_noCrop() { final InsetsSource taskbar = new InsetsSource(/*id=*/ 0, Loading