Add Screen Layout Size and Long Tests

Bug 5278778

Assert that the screen layout size and long value is reported just
like WindowManagerService does.

Change-Id: Id009e329ece44f7ba24bcecc14db626e07747b91
diff --git a/tests/tests/dpi/src/android/dpi/cts/ConfigurationTest.java b/tests/tests/dpi/src/android/dpi/cts/ConfigurationTest.java
index f478de7..316933d 100644
--- a/tests/tests/dpi/src/android/dpi/cts/ConfigurationTest.java
+++ b/tests/tests/dpi/src/android/dpi/cts/ConfigurationTest.java
@@ -17,6 +17,7 @@
 package android.dpi.cts;
 
 import android.content.Context;
+import android.content.res.Configuration;
 import android.test.AndroidTestCase;
 import android.util.DisplayMetrics;
 import android.view.Display;
@@ -30,12 +31,6 @@
  */
 public class ConfigurationTest extends AndroidTestCase {
 
-    /**
-     * Starting in HC MR2, this is in the public SDK and can be directly referenced instead
-     * of this constant.
-     */
-    private static final int DENSITY_TV = 213;
-
     public void testScreenConfiguration() {
         WindowManager windowManager =
                 (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
@@ -63,7 +58,6 @@
         allowedDensities.add(DisplayMetrics.DENSITY_MEDIUM);
         allowedDensities.add(DisplayMetrics.DENSITY_TV);
         allowedDensities.add(DisplayMetrics.DENSITY_HIGH);
-        allowedDensities.add(DENSITY_TV);
         allowedDensities.add(DisplayMetrics.DENSITY_XHIGH);
         assertTrue("DisplayMetrics#densityDpi must be one of the DisplayMetrics.DENSITY_* values: "
                 + allowedDensities, allowedDensities.contains(metrics.densityDpi));
@@ -71,5 +65,32 @@
         assertEquals(metrics.density,
                 (float) metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT,
                 0.5f / DisplayMetrics.DENSITY_DEFAULT);
+
+        Configuration mConfig = mContext.getResources().getConfiguration();
+        int screenLayout = mConfig.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;
+        int screenLayoutLong = mConfig.screenLayout & Configuration.SCREENLAYOUT_LONG_MASK;
+
+        int longSize = (int) (max / metrics.density);
+        int shortSize = (int) (min / metrics.density);
+
+        // Logic copied from WindowManagerService...
+        if (longSize < 470) {
+            assertEquals(Configuration.SCREENLAYOUT_SIZE_SMALL, screenLayout);
+            assertEquals(Configuration.SCREENLAYOUT_LONG_NO, screenLayoutLong);
+        } else {
+            if (longSize >= 960 && shortSize >= 720) {
+                assertEquals(Configuration.SCREENLAYOUT_SIZE_XLARGE, screenLayout);
+            } else if (longSize >= 640 && shortSize >= 480) {
+                assertEquals(Configuration.SCREENLAYOUT_SIZE_LARGE, screenLayout);
+            } else {
+                assertEquals(Configuration.SCREENLAYOUT_SIZE_NORMAL, screenLayout);
+            }
+
+            if (((longSize * 3) / 5) >= (shortSize - 1)) {
+                assertEquals(Configuration.SCREENLAYOUT_LONG_YES, screenLayoutLong);
+            } else {
+                assertEquals(Configuration.SCREENLAYOUT_LONG_NO, screenLayoutLong);
+            }
+        }
     }
 }