Merge "Improve first opaque activity candidate detection" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
8f8baa7437
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user