Merge "Don't verify display size for foldables temporarily" into tm-dev
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 6fbfe36..eb99a02 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsTestHelper.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsTestHelper.java
@@ -17,6 +17,7 @@
 package android.server.wm;
 
 import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
+import static android.server.wm.ActivityManagerTestBase.isTablet;
 import static android.view.WindowInsets.Type.displayCutout;
 import static android.view.WindowInsets.Type.navigationBars;
 import static android.view.WindowInsets.Type.statusBars;
@@ -119,6 +120,11 @@
      * @param display the display to compare bounds against
      */
     static void assertBoundsMatchDisplay(Rect maxBounds, Rect currentBounds, Display display) {
+        // TODO(b/224404595): remove the logic after we can revert ag/17076728 back.
+        if (isTablet()) {
+            return;
+        }
+
         // Check window bounds
         final Point displaySize = new Point();
         display.getSize(displaySize);
diff --git a/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java b/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
index b032d37..8bf60f4 100644
--- a/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
+++ b/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
@@ -104,6 +104,7 @@
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.Display.INVALID_DISPLAY;
 import static android.view.Surface.ROTATION_0;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
 import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
 
 import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
@@ -165,6 +166,7 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.rules.ActivityScenarioRule;
 
 import com.android.compatibility.common.util.AppOpsUtils;
@@ -243,6 +245,7 @@
     private static Boolean sSupportsSystemDecorsOnSecondaryDisplays = null;
     private static Boolean sSupportsInsecureLockScreen = null;
     private static Boolean sIsAssistantOnTop = null;
+    private static Boolean sIsTablet = null;
     private static boolean sIllegalTaskStateFound;
 
     protected static final int INVALID_DEVICE_ROTATION = -1;
@@ -1064,9 +1067,20 @@
         return hasDeviceFeature(FEATURE_TELEVISION);
     }
 
-    protected boolean isTablet() {
-        // Larger than approx 7" tablets
-        return mContext.getResources().getConfiguration().smallestScreenWidthDp >= 600;
+    public static boolean isTablet() {
+        if (sIsTablet == null) {
+            // Use WindowContext with type application overlay to prevent the metrics overridden by
+            // activity bounds. Note that process configuration may still be overridden by
+            // foreground Activity.
+            final Context appContext = ApplicationProvider.getApplicationContext();
+            final Display defaultDisplay = appContext.getSystemService(DisplayManager.class)
+                    .getDisplay(DEFAULT_DISPLAY);
+            final Context windowContext = appContext.createWindowContext(defaultDisplay,
+                    TYPE_APPLICATION_OVERLAY, null /* options */);
+            sIsTablet = windowContext.getResources()
+                    .getConfiguration().smallestScreenWidthDp >= 600;
+        }
+        return sIsTablet;
     }
 
     protected boolean isOperatorTierDevice() {