Merge "Improve first opaque activity candidate detection" into tm-qpr-dev

This commit is contained in:
Massimo Carli
2023-05-10 11:53:34 +00:00
committed by Android (Google) Code Review
3 changed files with 150 additions and 81 deletions

View File

@@ -1612,7 +1612,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
newParent.setResumedActivity(this, "onParentChanged"); newParent.setResumedActivity(this, "onParentChanged");
mImeInsetsFrozenUntilStartInput = false; mImeInsetsFrozenUntilStartInput = false;
} }
mLetterboxUiController.onActivityParentChanged(newParent); mLetterboxUiController.updateInheritedLetterbox();
} }
if (rootTask != null && rootTask.topRunningActivity() == this) { if (rootTask != null && rootTask.topRunningActivity() == this) {

View File

@@ -112,6 +112,8 @@ import com.android.internal.statusbar.LetterboxDetails;
import com.android.server.wm.LetterboxConfiguration.LetterboxBackgroundType; import com.android.server.wm.LetterboxConfiguration.LetterboxBackgroundType;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.function.BooleanSupplier; import java.util.function.BooleanSupplier;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -126,8 +128,7 @@ import java.util.function.Predicate;
final class LetterboxUiController { final class LetterboxUiController {
private static final Predicate<ActivityRecord> FIRST_OPAQUE_NOT_FINISHING_ACTIVITY_PREDICATE = private static final Predicate<ActivityRecord> FIRST_OPAQUE_NOT_FINISHING_ACTIVITY_PREDICATE =
activityRecord -> activityRecord.fillsParent() && !activityRecord.isFinishing() activityRecord -> activityRecord.fillsParent() && !activityRecord.isFinishing();
&& activityRecord.nowVisible;
private static final String TAG = TAG_WITH_CLASS_NAME ? "LetterboxUiController" : TAG_ATM; private static final String TAG = TAG_WITH_CLASS_NAME ? "LetterboxUiController" : TAG_ATM;
@@ -185,6 +186,10 @@ final class LetterboxUiController {
// Corresponds to OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS // Corresponds to OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
private final boolean mIsOverrideEnableCompatFakeFocusEnabled; private final boolean mIsOverrideEnableCompatFakeFocusEnabled;
// The list of observers for the destroy event of candidate opaque activities
// when dealing with translucent activities.
private final List<LetterboxUiController> mDestroyListeners = new ArrayList<>();
@Nullable @Nullable
private final Boolean mBooleanPropertyAllowOrientationOverride; private final Boolean mBooleanPropertyAllowOrientationOverride;
@Nullable @Nullable
@@ -198,6 +203,10 @@ final class LetterboxUiController {
@Nullable @Nullable
private WindowContainerListener mLetterboxConfigListener; private WindowContainerListener mLetterboxConfigListener;
@Nullable
@VisibleForTesting
ActivityRecord mFirstOpaqueActivityBeneath;
private boolean mShowWallpaperForLetterboxBackground; private boolean mShowWallpaperForLetterboxBackground;
// In case of transparent activities we might need to access the aspectRatio of the // In case of transparent activities we might need to access the aspectRatio of the
@@ -361,6 +370,10 @@ final class LetterboxUiController {
mLetterbox.destroy(); mLetterbox.destroy();
mLetterbox = null; mLetterbox = null;
} }
for (int i = mDestroyListeners.size() - 1; i >= 0; i--) {
mDestroyListeners.get(i).updateInheritedLetterbox();
}
mDestroyListeners.clear();
if (mLetterboxConfigListener != null) { if (mLetterboxConfigListener != null) {
mLetterboxConfigListener.onRemoved(); mLetterboxConfigListener.onRemoved();
mLetterboxConfigListener = null; mLetterboxConfigListener = null;
@@ -1577,7 +1590,11 @@ final class LetterboxUiController {
* first opaque activity beneath. * first opaque activity beneath.
* @param parent The parent container. * @param parent The parent container.
*/ */
void onActivityParentChanged(WindowContainer<?> parent) { void updateInheritedLetterbox() {
final WindowContainer<?> parent = mActivityRecord.getParent();
if (parent == null) {
return;
}
if (!mLetterboxConfiguration.isTranslucentLetterboxingEnabled()) { if (!mLetterboxConfiguration.isTranslucentLetterboxingEnabled()) {
return; return;
} }
@@ -1587,27 +1604,28 @@ final class LetterboxUiController {
} }
// In case mActivityRecord.hasCompatDisplayInsetsWithoutOverride() we don't apply the // In case mActivityRecord.hasCompatDisplayInsetsWithoutOverride() we don't apply the
// opaque activity constraints because we're expecting the activity is already letterboxed. // opaque activity constraints because we're expecting the activity is already letterboxed.
mFirstOpaqueActivityBeneath = mActivityRecord.getTask().getActivity(
FIRST_OPAQUE_NOT_FINISHING_ACTIVITY_PREDICATE /* callback */,
mActivityRecord /* boundary */, false /* includeBoundary */,
true /* traverseTopToBottom */);
if (mFirstOpaqueActivityBeneath == null || mFirstOpaqueActivityBeneath.isEmbedded()) {
// We skip letterboxing if the translucent activity doesn't have any opaque
// activities beneath or the activity below is embedded which never has letterbox.
mActivityRecord.recomputeConfiguration();
return;
}
if (mActivityRecord.getTask() == null || mActivityRecord.fillsParent() if (mActivityRecord.getTask() == null || mActivityRecord.fillsParent()
|| mActivityRecord.hasCompatDisplayInsetsWithoutInheritance()) { || mActivityRecord.hasCompatDisplayInsetsWithoutInheritance()) {
return; return;
} }
final ActivityRecord firstOpaqueActivityBeneath = mActivityRecord.getTask().getActivity( mFirstOpaqueActivityBeneath.mLetterboxUiController.mDestroyListeners.add(this);
FIRST_OPAQUE_NOT_FINISHING_ACTIVITY_PREDICATE /* callback */, inheritConfiguration(mFirstOpaqueActivityBeneath);
mActivityRecord /* boundary */, false /* includeBoundary */,
true /* traverseTopToBottom */);
if (firstOpaqueActivityBeneath == null || firstOpaqueActivityBeneath.isEmbedded()) {
// We skip letterboxing if the translucent activity doesn't have any opaque
// activities beneath or the activity below is embedded which never has letterbox.
return;
}
inheritConfiguration(firstOpaqueActivityBeneath);
mLetterboxConfigListener = WindowContainer.overrideConfigurationPropagation( mLetterboxConfigListener = WindowContainer.overrideConfigurationPropagation(
mActivityRecord, firstOpaqueActivityBeneath, mActivityRecord, mFirstOpaqueActivityBeneath,
(opaqueConfig, transparentConfig) -> { (opaqueConfig, transparentOverrideConfig) -> {
final Configuration mutatedConfiguration = resetTranslucentOverrideConfig(transparentOverrideConfig);
fromOriginalTranslucentConfig(transparentConfig);
final Rect parentBounds = parent.getWindowConfiguration().getBounds(); final Rect parentBounds = parent.getWindowConfiguration().getBounds();
final Rect bounds = mutatedConfiguration.windowConfiguration.getBounds(); final Rect bounds = transparentOverrideConfig.windowConfiguration.getBounds();
final Rect letterboxBounds = opaqueConfig.windowConfiguration.getBounds(); final Rect letterboxBounds = opaqueConfig.windowConfiguration.getBounds();
// We cannot use letterboxBounds directly here because the position relies on // We cannot use letterboxBounds directly here because the position relies on
// letterboxing. Using letterboxBounds directly, would produce a double offset. // letterboxing. Using letterboxBounds directly, would produce a double offset.
@@ -1616,9 +1634,9 @@ final class LetterboxUiController {
parentBounds.top + letterboxBounds.height()); parentBounds.top + letterboxBounds.height());
// We need to initialize appBounds to avoid NPE. The actual value will // We need to initialize appBounds to avoid NPE. The actual value will
// be set ahead when resolving the Configuration for the activity. // be set ahead when resolving the Configuration for the activity.
mutatedConfiguration.windowConfiguration.setAppBounds(new Rect()); transparentOverrideConfig.windowConfiguration.setAppBounds(new Rect());
inheritConfiguration(firstOpaqueActivityBeneath); inheritConfiguration(mFirstOpaqueActivityBeneath);
return mutatedConfiguration; return transparentOverrideConfig;
}); });
} }
@@ -1691,26 +1709,19 @@ final class LetterboxUiController {
if (!hasInheritedLetterboxBehavior() || mActivityRecord.getTask() == null) { if (!hasInheritedLetterboxBehavior() || mActivityRecord.getTask() == null) {
return Optional.empty(); return Optional.empty();
} }
return Optional.ofNullable(mActivityRecord.getTask().getActivity( return Optional.ofNullable(mFirstOpaqueActivityBeneath);
FIRST_OPAQUE_NOT_FINISHING_ACTIVITY_PREDICATE /* callback */,
mActivityRecord /* boundary */, false /* includeBoundary */,
true /* traverseTopToBottom */));
} }
// When overriding translucent activities configuration we need to keep some of the /** Resets the screen size related fields so they can be resolved by requested bounds later. */
// original properties private static void resetTranslucentOverrideConfig(Configuration config) {
private Configuration fromOriginalTranslucentConfig(Configuration translucentConfig) {
final Configuration configuration = new Configuration(translucentConfig);
// The values for the following properties will be defined during the configuration // The values for the following properties will be defined during the configuration
// resolution in {@link ActivityRecord#resolveOverrideConfiguration} using the // resolution in {@link ActivityRecord#resolveOverrideConfiguration} using the
// properties inherited from the first not finishing opaque activity beneath. // properties inherited from the first not finishing opaque activity beneath.
configuration.orientation = ORIENTATION_UNDEFINED; config.orientation = ORIENTATION_UNDEFINED;
configuration.screenWidthDp = configuration.compatScreenWidthDp = SCREEN_WIDTH_DP_UNDEFINED; config.screenWidthDp = config.compatScreenWidthDp = SCREEN_WIDTH_DP_UNDEFINED;
configuration.screenHeightDp = config.screenHeightDp = config.compatScreenHeightDp = SCREEN_HEIGHT_DP_UNDEFINED;
configuration.compatScreenHeightDp = SCREEN_HEIGHT_DP_UNDEFINED; config.smallestScreenWidthDp = config.compatSmallestScreenWidthDp =
configuration.smallestScreenWidthDp = SMALLEST_SCREEN_WIDTH_DP_UNDEFINED;
configuration.compatSmallestScreenWidthDp = SMALLEST_SCREEN_WIDTH_DP_UNDEFINED;
return configuration;
} }
private void inheritConfiguration(ActivityRecord firstOpaque) { private void inheritConfiguration(ActivityRecord firstOpaque) {
@@ -1729,6 +1740,10 @@ final class LetterboxUiController {
} }
private void clearInheritedConfig() { private void clearInheritedConfig() {
if (mFirstOpaqueActivityBeneath != null) {
mFirstOpaqueActivityBeneath.mLetterboxUiController.mDestroyListeners.remove(this);
}
mFirstOpaqueActivityBeneath = null;
mLetterboxConfigListener = null; mLetterboxConfigListener = null;
mInheritedMinAspectRatio = UNDEFINED_ASPECT_RATIO; mInheritedMinAspectRatio = UNDEFINED_ASPECT_RATIO;
mInheritedMaxAspectRatio = UNDEFINED_ASPECT_RATIO; mInheritedMaxAspectRatio = UNDEFINED_ASPECT_RATIO;

View File

@@ -174,44 +174,6 @@ public class SizeCompatTests extends WindowTestsBase {
setUpApp(builder.build()); setUpApp(builder.build());
} }
@Test
public void testActivityInHistoryAndNotVisibleIsNotUsedAsOpaqueForTranslucentActivities() {
mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
setUpDisplaySizeWithApp(2000, 1000);
prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
mActivity.nowVisible = false;
// Translucent Activity
final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
.setLaunchedFromUid(mActivity.getUid())
.setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
.build();
doReturn(false).when(translucentActivity).fillsParent();
mTask.addChild(translucentActivity);
assertFalse(translucentActivity.mLetterboxUiController.hasInheritedLetterboxBehavior());
}
@Test
public void testActivityInHistoryAndVisibleIsUsedAsOpaqueForTranslucentActivities() {
mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
setUpDisplaySizeWithApp(2000, 1000);
prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
mActivity.nowVisible = true;
// Translucent Activity
final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
.setLaunchedFromUid(mActivity.getUid())
.setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
.build();
doReturn(false).when(translucentActivity).fillsParent();
mTask.addChild(translucentActivity);
assertTrue(translucentActivity.mLetterboxUiController.hasInheritedLetterboxBehavior());
}
@Test @Test
public void testCleanLetterboxConfigListenerWhenTranslucentIsDestroyed() { public void testCleanLetterboxConfigListenerWhenTranslucentIsDestroyed() {
mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true); mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
@@ -236,7 +198,6 @@ public class SizeCompatTests extends WindowTestsBase {
public void testHorizontalReachabilityEnabledForTranslucentActivities() { public void testHorizontalReachabilityEnabledForTranslucentActivities() {
setUpDisplaySizeWithApp(2500, 1000); setUpDisplaySizeWithApp(2500, 1000);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
mActivity.nowVisible = true;
final LetterboxConfiguration config = mWm.mLetterboxConfiguration; final LetterboxConfiguration config = mWm.mLetterboxConfiguration;
config.setTranslucentLetterboxingOverrideEnabled(true); config.setTranslucentLetterboxingOverrideEnabled(true);
config.setLetterboxHorizontalPositionMultiplier(0.5f); config.setLetterboxHorizontalPositionMultiplier(0.5f);
@@ -312,7 +273,6 @@ public class SizeCompatTests extends WindowTestsBase {
public void testVerticalReachabilityEnabledForTranslucentActivities() { public void testVerticalReachabilityEnabledForTranslucentActivities() {
setUpDisplaySizeWithApp(1000, 2500); setUpDisplaySizeWithApp(1000, 2500);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
mActivity.nowVisible = true;
final LetterboxConfiguration config = mWm.mLetterboxConfiguration; final LetterboxConfiguration config = mWm.mLetterboxConfiguration;
config.setTranslucentLetterboxingOverrideEnabled(true); config.setTranslucentLetterboxingOverrideEnabled(true);
config.setLetterboxVerticalPositionMultiplier(0.5f); config.setLetterboxVerticalPositionMultiplier(0.5f);
@@ -384,6 +344,104 @@ public class SizeCompatTests extends WindowTestsBase {
checkIsCentered.run(); checkIsCentered.run();
} }
@Test
public void testApplyStrategyAgainWhenOpaqueIsDestroyed() {
mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
setUpDisplaySizeWithApp(2000, 1000);
prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
// Launch another opaque activity
final ActivityRecord opaqueActivity = new ActivityBuilder(mAtm)
.setLaunchedFromUid(mActivity.getUid())
.setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
.build();
mTask.addChild(opaqueActivity);
// Transparent activity strategy not applied
assertFalse(opaqueActivity.mLetterboxUiController.hasInheritedLetterboxBehavior());
// Launch translucent Activity
final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
.setLaunchedFromUid(mActivity.getUid())
.setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
.build();
doReturn(false).when(translucentActivity).fillsParent();
mTask.addChild(translucentActivity);
// Transparent strategy applied
assertTrue(translucentActivity.mLetterboxUiController.hasInheritedLetterboxBehavior());
spyOn(translucentActivity.mLetterboxUiController);
clearInvocations(translucentActivity.mLetterboxUiController);
// We destroy the first opaque activity
opaqueActivity.setState(DESTROYED, "testing");
opaqueActivity.removeImmediately();
// Check that updateInheritedLetterbox() is invoked again
verify(translucentActivity.mLetterboxUiController).updateInheritedLetterbox();
}
@Test
public void testResetOpaqueReferenceWhenOpaqueIsDestroyed() {
mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
setUpDisplaySizeWithApp(2000, 1000);
prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
// Launch translucent Activity
final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
.setLaunchedFromUid(mActivity.getUid())
.setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
.build();
doReturn(false).when(translucentActivity).fillsParent();
mTask.addChild(translucentActivity);
// Transparent strategy applied
assertTrue(translucentActivity.mLetterboxUiController.hasInheritedLetterboxBehavior());
assertNotNull(translucentActivity.mLetterboxUiController.mFirstOpaqueActivityBeneath);
spyOn(translucentActivity.mLetterboxUiController);
clearInvocations(translucentActivity.mLetterboxUiController);
// We destroy the first opaque activity
mActivity.setState(DESTROYED, "testing");
mActivity.removeImmediately();
// Check that updateInheritedLetterbox() is invoked again
verify(translucentActivity.mLetterboxUiController).updateInheritedLetterbox();
assertNull(translucentActivity.mLetterboxUiController.mFirstOpaqueActivityBeneath);
}
@Test
public void testNotApplyStrategyAgainWhenOpaqueIsNotDestroyed() {
mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
setUpDisplaySizeWithApp(2000, 1000);
prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
// Launch another opaque activity
final ActivityRecord opaqueActivity = new ActivityBuilder(mAtm)
.setLaunchedFromUid(mActivity.getUid())
.setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
.build();
mTask.addChild(opaqueActivity);
// Transparent activity strategy not applied
assertFalse(opaqueActivity.mLetterboxUiController.hasInheritedLetterboxBehavior());
// Launch translucent Activity
final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
.setLaunchedFromUid(mActivity.getUid())
.setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
.build();
doReturn(false).when(translucentActivity).fillsParent();
mTask.addChild(translucentActivity);
// Transparent strategy applied
assertTrue(translucentActivity.mLetterboxUiController.hasInheritedLetterboxBehavior());
spyOn(translucentActivity.mLetterboxUiController);
clearInvocations(translucentActivity.mLetterboxUiController);
// Check that updateInheritedLetterbox() is invoked again
verify(translucentActivity.mLetterboxUiController, never()).updateInheritedLetterbox();
}
@Test @Test
public void testApplyStrategyToTranslucentActivities() { public void testApplyStrategyToTranslucentActivities() {
mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true); mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
@@ -391,7 +449,6 @@ public class SizeCompatTests extends WindowTestsBase {
prepareUnresizable(mActivity, 1.5f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT); prepareUnresizable(mActivity, 1.5f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT);
mActivity.info.setMinAspectRatio(1.2f); mActivity.info.setMinAspectRatio(1.2f);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
mActivity.nowVisible = true;
// Translucent Activity // Translucent Activity
final ActivityRecord translucentActivity = new ActivityBuilder(mAtm) final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
.setLaunchedFromUid(mActivity.getUid()) .setLaunchedFromUid(mActivity.getUid())
@@ -448,7 +505,6 @@ public class SizeCompatTests extends WindowTestsBase {
prepareUnresizable(mActivity, 1.5f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT); prepareUnresizable(mActivity, 1.5f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT);
mActivity.info.setMinAspectRatio(1.2f); mActivity.info.setMinAspectRatio(1.2f);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
mActivity.nowVisible = true;
// Translucent Activity // Translucent Activity
final ActivityRecord translucentActivity = new ActivityBuilder(mAtm) final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
.setLaunchedFromUid(mActivity.getUid()) .setLaunchedFromUid(mActivity.getUid())
@@ -542,7 +598,6 @@ public class SizeCompatTests extends WindowTestsBase {
true /* ignoreOrientationRequest */); true /* ignoreOrientationRequest */);
mActivity.mWmService.mLetterboxConfiguration.setLetterboxHorizontalPositionMultiplier( mActivity.mWmService.mLetterboxConfiguration.setLetterboxHorizontalPositionMultiplier(
1.0f /*letterboxVerticalPositionMultiplier*/); 1.0f /*letterboxVerticalPositionMultiplier*/);
mActivity.nowVisible = true;
prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT); prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
// We launch a transparent activity // We launch a transparent activity
final ActivityRecord translucentActivity = new ActivityBuilder(mAtm) final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
@@ -575,7 +630,6 @@ public class SizeCompatTests extends WindowTestsBase {
mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true); mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
setUpDisplaySizeWithApp(2800, 1400); setUpDisplaySizeWithApp(2800, 1400);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
mActivity.nowVisible = true;
prepareUnresizable(mActivity, -1f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT); prepareUnresizable(mActivity, -1f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT);
// Rotate to put activity in size compat mode. // Rotate to put activity in size compat mode.
rotateDisplay(mActivity.mDisplayContent, ROTATION_90); rotateDisplay(mActivity.mDisplayContent, ROTATION_90);