diff options
-rw-r--r-- | core/java/android/content/res/Resources.java | 4 | ||||
-rw-r--r-- | core/java/android/util/DisplayMetrics.java | 33 | ||||
-rw-r--r-- | core/java/android/view/DisplayInfo.java | 1 | ||||
-rw-r--r-- | graphics/java/android/graphics/Bitmap.java | 10 | ||||
-rw-r--r-- | graphics/java/android/graphics/drawable/Drawable.java | 2 |
5 files changed, 32 insertions, 18 deletions
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index f6a966b..77d3295 100644 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -286,6 +286,7 @@ public class Resources { CompatibilityInfo compatInfo) { mAssets = assets; mMetrics.setToDefaults(); + mMetrics.updateDensity(); if (compatInfo != null) { mCompatibilityInfo = compatInfo; } @@ -2123,6 +2124,7 @@ public class Resources { if (mConfiguration.densityDpi != Configuration.DENSITY_DPI_UNDEFINED) { mMetrics.densityDpi = mConfiguration.densityDpi; mMetrics.density = mConfiguration.densityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE; + mMetrics.updateDensity(); } mMetrics.scaledDensity = mMetrics.density * mConfiguration.fontScale; @@ -2552,7 +2554,7 @@ public class Resources { } sPreloaded = true; mPreloading = true; - sPreloadedDensity = DisplayMetrics.DENSITY_DEVICE; + sPreloadedDensity = DisplayMetrics.getDeviceDensity(); mConfiguration.densityDpi = sPreloadedDensity; updateConfiguration(null, null); } diff --git a/core/java/android/util/DisplayMetrics.java b/core/java/android/util/DisplayMetrics.java index 9a69600..142c135 100644 --- a/core/java/android/util/DisplayMetrics.java +++ b/core/java/android/util/DisplayMetrics.java @@ -138,7 +138,15 @@ public class DisplayMetrics { * density for a display in {@link #densityDpi}. */ @Deprecated - public static int DENSITY_DEVICE = getDeviceDensity(); + public static int DENSITY_DEVICE; + + public static int DENSITY_CURRENT; + + static { + DENSITY_DEVICE = SystemProperties.getInt("qemu.sf.lcd_density", SystemProperties + .getInt("ro.sf.lcd_density", DENSITY_DEFAULT)); + DENSITY_CURRENT = SystemProperties.getInt("persist.sys.lcd_density", DENSITY_DEVICE); + } /** * The absolute width of the display in pixels. @@ -229,6 +237,19 @@ public class DisplayMetrics { */ public float noncompatYdpi; + public void updateDensity() { + density = DENSITY_CURRENT / (float) DENSITY_DEFAULT; + densityDpi = DENSITY_CURRENT; + scaledDensity = density; + xdpi = DENSITY_CURRENT; + ydpi = DENSITY_CURRENT; + noncompatDensity = density; + noncompatDensityDpi = densityDpi; + noncompatScaledDensity = scaledDensity; + noncompatXdpi = xdpi; + noncompatYdpi = ydpi; + } + public DisplayMetrics() { } @@ -247,6 +268,7 @@ public class DisplayMetrics { noncompatScaledDensity = o.noncompatScaledDensity; noncompatXdpi = o.noncompatXdpi; noncompatYdpi = o.noncompatYdpi; + updateDensity(); } public void setToDefaults() { @@ -320,12 +342,7 @@ public class DisplayMetrics { ", xdpi=" + xdpi + ", ydpi=" + ydpi + "}"; } - private static int getDeviceDensity() { - // qemu.sf.lcd_density can be used to override ro.sf.lcd_density - // when running in the emulator, allowing for dynamic configurations. - // The reason for this is that ro.sf.lcd_density is write-once and is - // set by the init process when it parses build.prop before anything else. - return SystemProperties.getInt("qemu.sf.lcd_density", - SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT)); + public static int getDeviceDensity() { + return DENSITY_CURRENT; } } diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java index cf17990..b07b9ec 100644 --- a/core/java/android/view/DisplayInfo.java +++ b/core/java/android/view/DisplayInfo.java @@ -505,6 +505,7 @@ public final class DisplayInfo implements Parcelable { outMetrics.scaledDensity = outMetrics.noncompatScaledDensity = outMetrics.density; outMetrics.xdpi = outMetrics.noncompatXdpi = physicalXDpi; outMetrics.ydpi = outMetrics.noncompatYdpi = physicalYDpi; + outMetrics.updateDensity(); width = (configuration != null && configuration.screenWidthDp != Configuration.SCREEN_WIDTH_DP_UNDEFINED) diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java index 3e4d93b..3279185 100644 --- a/graphics/java/android/graphics/Bitmap.java +++ b/graphics/java/android/graphics/Bitmap.java @@ -80,24 +80,18 @@ public final class Bitmap implements Parcelable { private static volatile Matrix sScaleMatrix; - private static volatile int sDefaultDensity = -1; - /** * For backwards compatibility, allows the app layer to change the default * density when running old apps. * @hide */ public static void setDefaultDensity(int density) { - sDefaultDensity = density; + // Ignore } @SuppressWarnings("deprecation") static int getDefaultDensity() { - if (sDefaultDensity >= 0) { - return sDefaultDensity; - } - sDefaultDensity = DisplayMetrics.DENSITY_DEVICE; - return sDefaultDensity; + return DisplayMetrics.getDeviceDensity(); } /** diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java index 32af59a..7bd445f 100644 --- a/graphics/java/android/graphics/drawable/Drawable.java +++ b/graphics/java/android/graphics/drawable/Drawable.java @@ -1076,7 +1076,7 @@ public abstract class Drawable { // drawn to the screen. if (opts == null) opts = new BitmapFactory.Options(); opts.inScreenDensity = res != null - ? res.getDisplayMetrics().noncompatDensityDpi : DisplayMetrics.DENSITY_DEVICE; + ? res.getDisplayMetrics().noncompatDensityDpi : DisplayMetrics.getDeviceDensity(); Bitmap bm = BitmapFactory.decodeResourceStream(res, value, is, pad, opts); if (bm != null) { byte[] np = bm.getNinePatchChunk(); |