1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.dpi.cts; 18 19 import android.content.Context; 20 import android.content.pm.PackageManager; 21 import android.platform.test.annotations.Presubmit; 22 import android.test.AndroidTestCase; 23 import android.util.DisplayMetrics; 24 import android.view.Display; 25 import android.view.WindowManager; 26 27 import java.util.HashSet; 28 import java.util.Set; 29 30 /** 31 * Test for verifying a device's screen configuration. 32 */ 33 public class ConfigurationTest extends AndroidTestCase { 34 35 @Presubmit 36 public void testScreenConfiguration() { 37 WindowManager windowManager = 38 (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); 39 Display display = windowManager.getDefaultDisplay(); 40 DisplayMetrics metrics = new DisplayMetrics(); 41 display.getMetrics(metrics); 42 43 double xInches = (double) metrics.widthPixels / metrics.xdpi; 44 double yInches = (double) metrics.heightPixels / metrics.ydpi; 45 double diagonalInches = Math.sqrt(Math.pow(xInches, 2) + Math.pow(yInches, 2)); 46 double minSize = 2.5d; 47 if (getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH)) { 48 // Watches have a different minimum diagonal. 49 minSize = 1.0d; 50 } 51 assertTrue("Screen diagonal must be at least " + minSize + " inches: " + diagonalInches, 52 diagonalInches >= minSize); 53 54 double density = 160.0d * metrics.density; 55 assertTrue("Screen density must be at least 100 dpi: " + density, density >= 100.0d); 56 57 Set<Integer> allowedDensities = new HashSet<Integer>(); 58 allowedDensities.add(DisplayMetrics.DENSITY_LOW); 59 allowedDensities.add(DisplayMetrics.DENSITY_MEDIUM); 60 allowedDensities.add(DisplayMetrics.DENSITY_TV); 61 allowedDensities.add(DisplayMetrics.DENSITY_HIGH); 62 allowedDensities.add(DisplayMetrics.DENSITY_260); 63 allowedDensities.add(DisplayMetrics.DENSITY_280); 64 allowedDensities.add(DisplayMetrics.DENSITY_300); 65 allowedDensities.add(DisplayMetrics.DENSITY_XHIGH); 66 allowedDensities.add(DisplayMetrics.DENSITY_340); 67 allowedDensities.add(DisplayMetrics.DENSITY_360); 68 allowedDensities.add(DisplayMetrics.DENSITY_400); 69 allowedDensities.add(DisplayMetrics.DENSITY_420); 70 allowedDensities.add(DisplayMetrics.DENSITY_XXHIGH); 71 allowedDensities.add(DisplayMetrics.DENSITY_560); 72 allowedDensities.add(DisplayMetrics.DENSITY_XXXHIGH); 73 assertTrue("DisplayMetrics#densityDpi must be one of the DisplayMetrics.DENSITY_* values: " 74 + allowedDensities, allowedDensities.contains(metrics.densityDpi)); 75 76 assertEquals(metrics.density, 77 (float) metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT, 78 0.5f / DisplayMetrics.DENSITY_DEFAULT); 79 } 80 } 81