Merge "Use appBounds when computing split screen aspect ratio" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
02b2a06f20
@@ -849,7 +849,7 @@ final class LetterboxUiController {
|
|||||||
int dividerInsets =
|
int dividerInsets =
|
||||||
getResources().getDimensionPixelSize(R.dimen.docked_stack_divider_insets);
|
getResources().getDimensionPixelSize(R.dimen.docked_stack_divider_insets);
|
||||||
int dividerSize = dividerWindowWidth - dividerInsets * 2;
|
int dividerSize = dividerWindowWidth - dividerInsets * 2;
|
||||||
final Rect bounds = new Rect(displayContent.getBounds());
|
final Rect bounds = new Rect(displayContent.getWindowConfiguration().getAppBounds());
|
||||||
if (bounds.width() >= bounds.height()) {
|
if (bounds.width() >= bounds.height()) {
|
||||||
bounds.inset(/* dx */ dividerSize / 2, /* dy */ 0);
|
bounds.inset(/* dx */ dividerSize / 2, /* dy */ 0);
|
||||||
bounds.right = bounds.centerX();
|
bounds.right = bounds.centerX();
|
||||||
@@ -1504,7 +1504,7 @@ final class LetterboxUiController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void inheritConfiguration(ActivityRecord firstOpaque) {
|
private void inheritConfiguration(ActivityRecord firstOpaque) {
|
||||||
// To avoid wrong behaviour, we're not forcing a specific aspet ratio to activities
|
// To avoid wrong behaviour, we're not forcing a specific aspect ratio to activities
|
||||||
// which are not already providing one (e.g. permission dialogs) and presumably also
|
// which are not already providing one (e.g. permission dialogs) and presumably also
|
||||||
// not resizable.
|
// not resizable.
|
||||||
if (mActivityRecord.getMinAspectRatio() != UNDEFINED_ASPECT_RATIO) {
|
if (mActivityRecord.getMinAspectRatio() != UNDEFINED_ASPECT_RATIO) {
|
||||||
|
|||||||
@@ -105,7 +105,6 @@ import libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges;
|
|||||||
import libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges;
|
import libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges;
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -1991,7 +1990,7 @@ public class SizeCompatTests extends WindowTestsBase {
|
|||||||
float expectedAspectRatio = 1f * displayWidth / getExpectedSplitSize(displayHeight);
|
float expectedAspectRatio = 1f * displayWidth / getExpectedSplitSize(displayHeight);
|
||||||
final Rect afterBounds = activity.getBounds();
|
final Rect afterBounds = activity.getBounds();
|
||||||
final float afterAspectRatio = (float) (afterBounds.height()) / afterBounds.width();
|
final float afterAspectRatio = (float) (afterBounds.height()) / afterBounds.width();
|
||||||
Assert.assertEquals(expectedAspectRatio, afterAspectRatio, 0.001f);
|
assertEquals(expectedAspectRatio, afterAspectRatio, 0.001f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -2016,7 +2015,7 @@ public class SizeCompatTests extends WindowTestsBase {
|
|||||||
float expectedAspectRatio = 1f * displayHeight / getExpectedSplitSize(displayWidth);
|
float expectedAspectRatio = 1f * displayHeight / getExpectedSplitSize(displayWidth);
|
||||||
final Rect afterBounds = activity.getBounds();
|
final Rect afterBounds = activity.getBounds();
|
||||||
final float afterAspectRatio = (float) (afterBounds.height()) / afterBounds.width();
|
final float afterAspectRatio = (float) (afterBounds.height()) / afterBounds.width();
|
||||||
Assert.assertEquals(expectedAspectRatio, afterAspectRatio, 0.001f);
|
assertEquals(expectedAspectRatio, afterAspectRatio, 0.001f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -2042,7 +2041,7 @@ public class SizeCompatTests extends WindowTestsBase {
|
|||||||
float expectedAspectRatio = 1f * displayWidth / getExpectedSplitSize(displayHeight);
|
float expectedAspectRatio = 1f * displayWidth / getExpectedSplitSize(displayHeight);
|
||||||
final Rect afterBounds = activity.getBounds();
|
final Rect afterBounds = activity.getBounds();
|
||||||
final float afterAspectRatio = (float) (afterBounds.width()) / afterBounds.height();
|
final float afterAspectRatio = (float) (afterBounds.width()) / afterBounds.height();
|
||||||
Assert.assertEquals(expectedAspectRatio, afterAspectRatio, 0.001f);
|
assertEquals(expectedAspectRatio, afterAspectRatio, 0.001f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -2068,7 +2067,89 @@ public class SizeCompatTests extends WindowTestsBase {
|
|||||||
float expectedAspectRatio = 1f * displayHeight / getExpectedSplitSize(displayWidth);
|
float expectedAspectRatio = 1f * displayHeight / getExpectedSplitSize(displayWidth);
|
||||||
final Rect afterBounds = activity.getBounds();
|
final Rect afterBounds = activity.getBounds();
|
||||||
final float afterAspectRatio = (float) (afterBounds.width()) / afterBounds.height();
|
final float afterAspectRatio = (float) (afterBounds.width()) / afterBounds.height();
|
||||||
Assert.assertEquals(expectedAspectRatio, afterAspectRatio, 0.001f);
|
assertEquals(expectedAspectRatio, afterAspectRatio, 0.001f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
|
||||||
|
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN})
|
||||||
|
public void testOverrideSplitScreenAspectRatio_splitScreenActivityInPortrait_notLetterboxed() {
|
||||||
|
mAtm.mDevEnableNonResizableMultiWindow = true;
|
||||||
|
final int screenWidth = 1800;
|
||||||
|
final int screenHeight = 1000;
|
||||||
|
setUpDisplaySizeWithApp(screenWidth, screenHeight);
|
||||||
|
final ActivityRecord activity = new ActivityBuilder(mAtm)
|
||||||
|
.setTask(mTask)
|
||||||
|
.setComponent(ComponentName.createRelative(mContext,
|
||||||
|
SizeCompatTests.class.getName()))
|
||||||
|
.setUid(android.os.Process.myUid())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
activity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
|
||||||
|
// Simulate real display with top insets.
|
||||||
|
final int topInset = 30;
|
||||||
|
activity.mDisplayContent.getWindowConfiguration()
|
||||||
|
.setAppBounds(0, topInset, screenWidth, screenHeight);
|
||||||
|
|
||||||
|
final TestSplitOrganizer organizer =
|
||||||
|
new TestSplitOrganizer(mAtm, activity.getDisplayContent());
|
||||||
|
// Move activity to split screen which takes half of the screen.
|
||||||
|
mTask.reparent(organizer.mPrimary, POSITION_TOP, /* moveParents= */ false , "test");
|
||||||
|
organizer.mPrimary.setBounds(0, 0, getExpectedSplitSize(screenWidth), screenHeight);
|
||||||
|
assertEquals(WINDOWING_MODE_MULTI_WINDOW, mTask.getWindowingMode());
|
||||||
|
assertEquals(WINDOWING_MODE_MULTI_WINDOW, activity.getWindowingMode());
|
||||||
|
|
||||||
|
// Unresizable portrait-only activity.
|
||||||
|
prepareUnresizable(activity, 3f, SCREEN_ORIENTATION_PORTRAIT);
|
||||||
|
|
||||||
|
// Activity should have the aspect ratio of a split screen activity and occupy exactly one
|
||||||
|
// half of the screen, so there is no letterbox
|
||||||
|
float expectedAspectRatio = 1f * screenHeight / getExpectedSplitSize(screenWidth);
|
||||||
|
final Rect afterBounds = activity.getBounds();
|
||||||
|
final float afterAspectRatio = (float) (afterBounds.height()) / afterBounds.width();
|
||||||
|
assertEquals(expectedAspectRatio, afterAspectRatio, 0.001f);
|
||||||
|
assertFalse(activity.areBoundsLetterboxed());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
|
||||||
|
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN})
|
||||||
|
public void testOverrideSplitScreenAspectRatio_splitScreenActivityInLandscape_notLetterboxed() {
|
||||||
|
mAtm.mDevEnableNonResizableMultiWindow = true;
|
||||||
|
final int screenWidth = 1000;
|
||||||
|
final int screenHeight = 1800;
|
||||||
|
setUpDisplaySizeWithApp(screenWidth, screenHeight);
|
||||||
|
final ActivityRecord activity = new ActivityBuilder(mAtm)
|
||||||
|
.setTask(mTask)
|
||||||
|
.setComponent(ComponentName.createRelative(mContext,
|
||||||
|
SizeCompatTests.class.getName()))
|
||||||
|
.setUid(android.os.Process.myUid())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
activity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
|
||||||
|
// Simulate real display with top insets.
|
||||||
|
final int leftInset = 30;
|
||||||
|
activity.mDisplayContent.getWindowConfiguration()
|
||||||
|
.setAppBounds(leftInset, 0, screenWidth, screenHeight);
|
||||||
|
|
||||||
|
final TestSplitOrganizer organizer =
|
||||||
|
new TestSplitOrganizer(mAtm, activity.getDisplayContent());
|
||||||
|
// Move activity to split screen which takes half of the screen.
|
||||||
|
mTask.reparent(organizer.mPrimary, POSITION_TOP, /* moveParents= */ false , "test");
|
||||||
|
organizer.mPrimary.setBounds(0, 0, screenWidth, getExpectedSplitSize(screenHeight));
|
||||||
|
assertEquals(WINDOWING_MODE_MULTI_WINDOW, mTask.getWindowingMode());
|
||||||
|
assertEquals(WINDOWING_MODE_MULTI_WINDOW, activity.getWindowingMode());
|
||||||
|
|
||||||
|
// Unresizable landscape-only activity.
|
||||||
|
prepareUnresizable(activity, 3f, SCREEN_ORIENTATION_LANDSCAPE);
|
||||||
|
|
||||||
|
// Activity should have the aspect ratio of a split screen activity and occupy exactly one
|
||||||
|
// half of the screen, so there is no letterbox
|
||||||
|
float expectedAspectRatio = 1f * screenWidth / getExpectedSplitSize(screenHeight);
|
||||||
|
final Rect afterBounds = activity.getBounds();
|
||||||
|
final float afterAspectRatio = (float) (afterBounds.width()) / afterBounds.height();
|
||||||
|
assertEquals(expectedAspectRatio, afterAspectRatio, 0.001f);
|
||||||
|
assertFalse(activity.areBoundsLetterboxed());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user