summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/content/res/Resources.java4
-rw-r--r--core/java/android/util/DisplayMetrics.java33
-rw-r--r--core/java/android/view/DisplayInfo.java1
-rw-r--r--graphics/java/android/graphics/Bitmap.java10
-rw-r--r--graphics/java/android/graphics/drawable/Drawable.java2
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();