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.test.AndroidTestCase; 22 import android.util.DisplayMetrics; 23 import android.view.Display; 24 import android.view.WindowManager; 25 26 import java.util.HashSet; 27 import java.util.Set; 28 29 /** 30 * Test for verifying a device's screen configuration. 31 */ 32 public class ConfigurationTest extends AndroidTestCase { 33 34 public void testScreenConfiguration() { 35 WindowManager windowManager = 36 (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); 37 Display display = windowManager.getDefaultDisplay(); 38 DisplayMetrics metrics = new DisplayMetrics(); 39 display.getMetrics(metrics); 40 41 double xInches = (double) metrics.widthPixels / metrics.xdpi; 42 double yInches = (double) metrics.heightPixels / metrics.ydpi; 43 double diagonalInches = Math.sqrt(Math.pow(xInches, 2) + Math.pow(yInches, 2)); 44 double minSize = 2.5d; 45 if (getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH)) { 46 // Watches have a different minimum diagonal. 47 minSize = 1.0d; 48 } 49 assertTrue("Screen diagonal must be at least " + minSize + " inches: " + diagonalInches, 50 diagonalInches >= minSize); 51 52 double density = 160.0d * metrics.density; 53 assertTrue("Screen density must be at least 100 dpi: " + density, density >= 100.0d); 54 55 Set<Integer> allowedDensities = new HashSet<Integer>(); 56 allowedDensities.add(DisplayMetrics.DENSITY_LOW); 57 allowedDensities.add(DisplayMetrics.DENSITY_MEDIUM); 58 allowedDensities.add(DisplayMetrics.DENSITY_TV); 59 allowedDensities.add(DisplayMetrics.DENSITY_HIGH); 60 allowedDensities.add(DisplayMetrics.DENSITY_280); 61 allowedDensities.add(DisplayMetrics.DENSITY_XHIGH); 62 allowedDensities.add(DisplayMetrics.DENSITY_360); 63 allowedDensities.add(DisplayMetrics.DENSITY_400); 64 allowedDensities.add(DisplayMetrics.DENSITY_420); 65 allowedDensities.add(DisplayMetrics.DENSITY_XXHIGH); 66 allowedDensities.add(DisplayMetrics.DENSITY_560); 67 allowedDensities.add(DisplayMetrics.DENSITY_XXXHIGH); 68 assertTrue("DisplayMetrics#densityDpi must be one of the DisplayMetrics.DENSITY_* values: " 69 + allowedDensities, allowedDensities.contains(metrics.densityDpi)); 70 71 assertEquals(metrics.density, 72 (float) metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT, 73 0.5f / DisplayMetrics.DENSITY_DEFAULT); 74 } 75 } 76