DisplayMetrics.java revision c4db95c077f826585d20be2f3db4043c53d30cf5
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.util; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199189cabb0b6c6c28232fe6f412b7ba7a37352a6aMitsuru Oshimaimport android.content.res.CompatibilityInfo; 209189cabb0b6c6c28232fe6f412b7ba7a37352a6aMitsuru Oshimaimport android.content.res.Configuration; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.*; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A structure describing general information about a display, such as its 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * size, density, and font scaling. 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class DisplayMetrics { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 30a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * Standard quantized DPI for low-density screens. 31a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn */ 32a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn public static final int DENSITY_LOW = 120; 33a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn 34a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn /** 35a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * Standard quantized DPI for medium-density screens. 36a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn */ 37a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn public static final int DENSITY_MEDIUM = 160; 38a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn 39a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn /** 40a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * Standard quantized DPI for high-density screens. 41a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn */ 42a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn public static final int DENSITY_HIGH = 240; 43a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn 44a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn /** 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The reference density used throughout the system. 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 47a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn public static final int DENSITY_DEFAULT = DENSITY_MEDIUM; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 492e3d3b9ce74cb9c906e5cc0e9898d757d45c4237Mitsuru Oshima /** 502e3d3b9ce74cb9c906e5cc0e9898d757d45c4237Mitsuru Oshima * The device's density. 51a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * @hide becase eventually this should be able to change while 52a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * running, so shouldn't be a constant. 532e3d3b9ce74cb9c906e5cc0e9898d757d45c4237Mitsuru Oshima */ 54a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn public static final int DENSITY_DEVICE = getDeviceDensity(); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The absolute width of the display in pixels. 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int widthPixels; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The absolute height of the display in pixels. 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int heightPixels; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The logical density of the display. This is a scaling factor for the 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Density Independent Pixel unit, where one DIP is one pixel on an 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * approximately 160 dpi screen (for example a 240x320, 1.5"x2" screen), 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * providing the baseline of the system's display. Thus on a 160dpi screen 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this density value will be 1; on a 106 dpi screen it would be .75; etc. 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This value does not exactly follow the real screen size (as given by 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #xdpi} and {@link #ydpi}, but rather is used to scale the size of 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the overall UI in steps based on gross changes in the display dpi. For 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * example, a 240x320 screen will have a density of 1 even if its width is 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1.8", 1.3", etc. However, if the screen resolution is increased to 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 320x480 but the screen size remained 1.5"x2" then the density would be 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * increased (probably to 1.5). 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 79a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * @see #DENSITY_DEFAULT 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float density; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A scaling factor for fonts displayed on the display. This is the same 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as {@link #density}, except that it may be adjusted in smaller 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * increments at runtime based on a user preference for the font size. 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float scaledDensity; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The exact physical pixels per inch of the screen in the X dimension. 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float xdpi; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The exact physical pixels per inch of the screen in the Y dimension. 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float ydpi; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DisplayMetrics() { 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTo(DisplayMetrics o) { 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project widthPixels = o.widthPixels; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project heightPixels = o.heightPixels; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project density = o.density; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project scaledDensity = o.scaledDensity; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project xdpi = o.xdpi; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ydpi = o.ydpi; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setToDefaults() { 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project widthPixels = 0; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project heightPixels = 0; 112a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn density = DENSITY_DEVICE / (float) DENSITY_DEFAULT; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project scaledDensity = density; 114a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn xdpi = DENSITY_DEVICE; 115a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn ydpi = DENSITY_DEVICE; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11758feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima 11858feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima /** 119e5fb328825995aa33b5b7ecf8b5bee2b17f81715Mitsuru Oshima * Update the display metrics based on the compatibility info and orientation 120723738cfaec3dd7b0fe152c872c41bebf94074c4Dianne Hackborn * NOTE: DO NOT EXPOSE THIS API! It is introducing a circular dependency 121723738cfaec3dd7b0fe152c872c41bebf94074c4Dianne Hackborn * with the higher-level android.res package. 1229189cabb0b6c6c28232fe6f412b7ba7a37352a6aMitsuru Oshima * {@hide} 12358feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima */ 124723738cfaec3dd7b0fe152c872c41bebf94074c4Dianne Hackborn public void updateMetrics(CompatibilityInfo compatibilityInfo, int orientation, 125723738cfaec3dd7b0fe152c872c41bebf94074c4Dianne Hackborn int screenLayout) { 126c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn boolean expandable = compatibilityInfo.isConfiguredExpandable(); 127c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn boolean largeScreens = compatibilityInfo.isConfiguredLargeScreens(); 128c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn 129c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn // Note: this assume that configuration is updated before calling 130c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn // updateMetrics method. 131c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn if (!expandable) { 132c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn if ((screenLayout&Configuration.SCREENLAYOUT_COMPAT_NEEDED) == 0) { 133c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn expandable = true; 134c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn // the current screen size is compatible with non-resizing apps. 135c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn compatibilityInfo.setExpandable(true); 136c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn } else { 13764f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima compatibilityInfo.setExpandable(false); 138c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn } 139c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn } 140c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn if (!largeScreens) { 141c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn if ((screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK) 142c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn != Configuration.SCREENLAYOUT_SIZE_LARGE) { 143c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn largeScreens = true; 144c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn // the current screen size is not large. 145c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn compatibilityInfo.setLargeScreens(true); 146c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn } else { 147c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn compatibilityInfo.setLargeScreens(false); 148c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn } 149c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn } 150c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn 151c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn if (!expandable || !largeScreens) { 152c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn // This is a larger screen device and the app is not 153c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn // compatible with large screens, so diddle it. 154c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn 155c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn // Figure out the compatibility width and height of the screen. 156c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn int defaultWidth; 157c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn int defaultHeight; 158c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn switch (orientation) { 159c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn case Configuration.ORIENTATION_LANDSCAPE: { 160c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn defaultWidth = (int)(CompatibilityInfo.DEFAULT_PORTRAIT_HEIGHT * density + 161c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn 0.5f); 162c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn defaultHeight = (int)(CompatibilityInfo.DEFAULT_PORTRAIT_WIDTH * density + 163c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn 0.5f); 164c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn break; 165723738cfaec3dd7b0fe152c872c41bebf94074c4Dianne Hackborn } 166c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn case Configuration.ORIENTATION_PORTRAIT: 167c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn case Configuration.ORIENTATION_SQUARE: 168c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn default: { 169c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn defaultWidth = (int)(CompatibilityInfo.DEFAULT_PORTRAIT_WIDTH * density + 170c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn 0.5f); 171c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn defaultHeight = (int)(CompatibilityInfo.DEFAULT_PORTRAIT_HEIGHT * density + 172c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn 0.5f); 173c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn break; 174e5fb328825995aa33b5b7ecf8b5bee2b17f81715Mitsuru Oshima } 175c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn case Configuration.ORIENTATION_UNDEFINED: { 176c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn // don't change 177c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn return; 178e5fb328825995aa33b5b7ecf8b5bee2b17f81715Mitsuru Oshima } 179c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn } 180c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn 181c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn if (defaultWidth < widthPixels) { 182c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn // content/window's x offset in original pixels 183c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn widthPixels = defaultWidth; 184c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn } 185c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn if (defaultHeight < heightPixels) { 186c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn heightPixels = defaultHeight; 1879189cabb0b6c6c28232fe6f412b7ba7a37352a6aMitsuru Oshima } 1889189cabb0b6c6c28232fe6f412b7ba7a37352a6aMitsuru Oshima } 18964f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima if (compatibilityInfo.isScalingRequired()) { 19064f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima float invertedRatio = compatibilityInfo.applicationInvertedScale; 19164f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima density *= invertedRatio; 19264f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima scaledDensity *= invertedRatio; 19364f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima xdpi *= invertedRatio; 19464f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima ydpi *= invertedRatio; 19561324e58c549670c015010d0be14c6af76e3e9f7Mitsuru Oshima widthPixels = (int) (widthPixels * invertedRatio + 0.5f); 19661324e58c549670c015010d0be14c6af76e3e9f7Mitsuru Oshima heightPixels = (int) (heightPixels * invertedRatio + 0.5f); 19764f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima } 19858feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima } 19958feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima 20064f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima @Override 20158feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima public String toString() { 20258feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima return "DisplayMetrics{density=" + density + ", width=" + widthPixels + 20358feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima ", height=" + heightPixels + ", scaledDensity=" + scaledDensity + 20458feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima ", xdpi=" + xdpi + ", ydpi=" + ydpi + "}"; 20558feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima } 2062a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner 2072a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner private static int getDeviceDensity() { 2082a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner // qemu.sf.lcd_density can be used to override ro.sf.lcd_density 2092a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner // when running in the emulator, allowing for dynamic configurations. 2102a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner // The reason for this is that ro.sf.lcd_density is write-once and is 2112a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner // set by the init process when it parses build.prop before anything else. 2122a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner return SystemProperties.getInt("qemu.sf.lcd_density", 213a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT)); 2142a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 216