Don't verify insets for floating windowing mode
After [1], WindowMetrics APIs report all insets regardless of
windowing mode, while View#getWindowInsets won't have any
inset if it is a floating window.
This CL changes to don't verify insets if the Activity's
windowing mode is floating.
[1]: Iae264b567c161bdf4f3d0248c5f81de92fd47828
Test: atest WindowMetricsOnActivityTests
fixes: 229824513
Change-Id: I4e910b82fa4550f78b464a7c2c351e99fc4e2762
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsActivityTests.java b/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsActivityTests.java
index fe7ded2..8870dfa 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsActivityTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsActivityTests.java
@@ -17,9 +17,9 @@
package android.server.wm;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
-import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
+import static android.app.WindowConfiguration.isFloating;
import static android.server.wm.WindowManagerState.STATE_PAUSED;
import static android.server.wm.WindowMetricsTestHelper.assertBoundsMatchDisplay;
import static android.server.wm.WindowMetricsTestHelper.getBoundsExcludingNavigationBarAndCutout;
@@ -46,6 +46,7 @@
import androidx.test.filters.FlakyTest;
import org.junit.Test;
+
import java.util.function.Supplier;
/**
@@ -62,8 +63,8 @@
@Test
public void testMetricsMatchesLayoutOnActivityOnCreate() {
- final MetricsActivity activity = startActivityInWindowingMode(MetricsActivity.class,
- WINDOWING_MODE_FULLSCREEN);
+ final MetricsActivity activity = startActivityInWindowingModeFullScreen(
+ MetricsActivity.class);
final OnLayoutChangeListener listener = activity.mListener;
listener.waitForLayout();
@@ -75,8 +76,8 @@
@Test
public void testMetricsMatchesDisplayAreaOnActivity() {
- final MetricsActivity activity = startActivityInWindowingMode(MetricsActivity.class,
- WINDOWING_MODE_FULLSCREEN);
+ final MetricsActivity activity = startActivityInWindowingModeFullScreen(
+ MetricsActivity.class);
assertMetricsValidity(activity);
}
@@ -86,8 +87,8 @@
public void testMetricsMatchesActivityBoundsOnNonresizableActivity() {
assumeTrue("Skipping test: no rotation support", supportsRotation());
- final MinAspectRatioActivity activity = startActivityInWindowingMode(
- MinAspectRatioActivity.class, WINDOWING_MODE_FULLSCREEN);
+ final MinAspectRatioActivity activity = startActivityInWindowingModeFullScreen(
+ MinAspectRatioActivity.class);
mWmState.computeState(activity.getComponentName());
assertMetricsValidityForNonresizableActivity(activity);
@@ -97,8 +98,8 @@
public void testMetricsMatchesLayoutOnPipActivity() {
assumeTrue(supportsPip());
- final MetricsActivity activity = startActivityInWindowingMode(MetricsActivity.class,
- WINDOWING_MODE_FULLSCREEN);
+ final MetricsActivity activity = startActivityInWindowingModeFullScreen(
+ MetricsActivity.class);
assertMetricsMatchesLayout(activity);
@@ -112,8 +113,8 @@
public void testMetricsMatchesDisplayAreaOnPipActivity() {
assumeTrue(supportsPip());
- final MetricsActivity activity = startActivityInWindowingMode(MetricsActivity.class,
- WINDOWING_MODE_FULLSCREEN);
+ final MetricsActivity activity = startActivityInWindowingModeFullScreen(
+ MetricsActivity.class);
assertMetricsValidity(activity);
@@ -154,8 +155,8 @@
public void testMetricsMatchesLayoutOnSplitActivity() {
assumeTrue(supportsSplitScreenMultiWindow());
- final MetricsActivity activity = startActivityInWindowingMode(MetricsActivity.class,
- WINDOWING_MODE_FULLSCREEN);
+ final MetricsActivity activity = startActivityInWindowingModeFullScreen(
+ MetricsActivity.class);
assertMetricsMatchesLayout(activity);
@@ -163,8 +164,8 @@
putActivityInPrimarySplit(activity.getComponentName());
mWmState.computeState(activity.getComponentName());
- assertTrue(mWmState.getActivity(activity.getComponentName()).getWindowingMode()
- == WINDOWING_MODE_MULTI_WINDOW);
+ assertEquals(WINDOWING_MODE_MULTI_WINDOW,
+ mWmState.getActivity(activity.getComponentName()).getWindowingMode());
assertMetricsMatchesLayout(activity);
}
@@ -173,8 +174,8 @@
public void testMetricsMatchesDisplayAreaOnSplitActivity() {
assumeTrue(supportsSplitScreenMultiWindow());
- final MetricsActivity activity = startActivityInWindowingMode(MetricsActivity.class,
- WINDOWING_MODE_FULLSCREEN);
+ final MetricsActivity activity = startActivityInWindowingModeFullScreen(
+ MetricsActivity.class);
assertMetricsValidity(activity);
@@ -192,8 +193,8 @@
public void testMetricsMatchesLayoutOnFreeformActivity() {
assumeTrue(supportsFreeform());
- final MetricsActivity activity = startActivityInWindowingMode(MetricsActivity.class,
- WINDOWING_MODE_FULLSCREEN);
+ final MetricsActivity activity = startActivityInWindowingModeFullScreen(
+ MetricsActivity.class);
assertMetricsMatchesLayout(activity);
@@ -225,8 +226,8 @@
public void testMetricsMatchesDisplayAreaOnFreeformActivity() {
assumeTrue(supportsFreeform());
- final MetricsActivity activity = startActivityInWindowingMode(MetricsActivity.class,
- WINDOWING_MODE_FULLSCREEN);
+ final MetricsActivity activity = startActivityInWindowingModeFullScreen(
+ MetricsActivity.class);
assertMetricsValidity(activity);
@@ -267,13 +268,14 @@
() -> currentMetrics.get().getBounds().equals(listener.getLayoutBounds()))
.setRetryIntervalMs(500).setRetryLimit(10)
.setOnFailure(unused -> fail("WindowMetrics must match layout metrics. Layout"
- + "bounds is" + listener.getLayoutBounds() + ", while current window"
+ + "bounds is " + listener.getLayoutBounds() + ", while current window"
+ "metrics is " + currentMetrics.get().getBounds())));
- final boolean isFreeForm = activity.getResources().getConfiguration().windowConfiguration
- .getWindowingMode() == WINDOWING_MODE_FREEFORM;
+ final int windowingMode = activity.getResources().getConfiguration().windowConfiguration
+ .getWindowingMode();
WindowMetricsTestHelper.assertMetricsMatchesLayout(currentMetrics.get(), maxMetrics.get(),
- listener.getLayoutBounds(), listener.getLayoutInsets(), isFreeForm);
+ listener.getLayoutBounds(), listener.getLayoutInsets(),
+ windowingMode == WINDOWING_MODE_FREEFORM, isFloating(windowingMode));
}
/**
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsTestHelper.java b/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsTestHelper.java
index eb99a02..430b2c5 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsTestHelper.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsTestHelper.java
@@ -44,22 +44,27 @@
public static void assertMetricsMatchesLayout(WindowMetrics currentMetrics,
WindowMetrics maxMetrics, Rect layoutBounds, WindowInsets layoutInsets) {
assertMetricsMatchesLayout(currentMetrics, maxMetrics, layoutBounds, layoutInsets,
- false /* isFreeformActivity */);
+ false /* isFreeform */, false /* isFloating */);
}
public static void assertMetricsMatchesLayout(WindowMetrics currentMetrics,
WindowMetrics maxMetrics, Rect layoutBounds, WindowInsets layoutInsets,
- boolean isFreeformActivity) {
+ boolean isFreeform, boolean isFloating) {
assertEquals(layoutBounds, currentMetrics.getBounds());
// Freeform activities doesn't guarantee max window metrics bounds is larger than current
// window metrics bounds. The bounds of a freeform activity is unlimited except that
// it must be contained in display bounds.
- if (!isFreeformActivity) {
+ if (!isFreeform) {
assertTrue(maxMetrics.getBounds().width()
>= currentMetrics.getBounds().width());
assertTrue(maxMetrics.getBounds().height()
>= currentMetrics.getBounds().height());
}
+ // Don't verify insets for floating Activity since a floating window won't have any insets,
+ // while WindowMetrics reports insets regardless of windowing mode.
+ if (isFloating) {
+ return;
+ }
final int insetsType = statusBars() | navigationBars() | displayCutout();
assertEquals(layoutInsets.getInsets(insetsType),
currentMetrics.getWindowInsets().getInsets(insetsType));