Allow the qemu.sf.lcd_density property to override the value of ro.sf.lcd_density

ro.sf.lcd_density is usually defined in the build.prop file which is parsed by init
before anything else. Since its name begins with "ro.", this property is write-once
and cannot later be modified, e.g. in /system/etc/init.goldfish.sh.

In other words, you cannot use "emulator -prop ro.sf.lcd_density=<value>", since
it is impossible to override the value defined in build.prop

This patch modifies the system to recognize "qemu.sf.lcd_density" as an override
value, which can be set with "emulator -prop qemu.sf.lcd_density=<value>", forcing
a specific density.

A later patch will allow the emulator to automatically set this property depending
on AVD hardware configuration settings.
This commit is contained in:
David 'Digit' Turner
2009-06-18 04:30:32 +02:00
parent 4ebd855bb7
commit 2a578ae518
2 changed files with 18 additions and 2 deletions

View File

@ -37,8 +37,7 @@ public class DisplayMetrics {
* The device's density.
* @hide
*/
public static final int DEVICE_DENSITY = SystemProperties.getInt("ro.sf.lcd_density",
DEFAULT_DENSITY);
public static final int DEVICE_DENSITY = getDeviceDensity();
/**
* The absolute width of the display in pixels.
@ -161,4 +160,13 @@ public class DisplayMetrics {
", height=" + heightPixels + ", scaledDensity=" + scaledDensity +
", 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", DEFAULT_DENSITY));
}
}

View File

@ -193,6 +193,14 @@ void DisplayHardware::init(uint32_t dpy)
LOGW("ro.sf.lcd_density not defined, using 160 dpi by default.");
strcpy(property, "160");
}
/* Override the property value if qemu.sf.lcd_density is defined. */
{
char qemu_property[PROPERTY_VALUE_MAX];
if (property_get("qemu.sf.lcd_density", qemu_property, NULL) > 0) {
strlcpy(property, qemu_property, sizeof property);
}
}
mDensity = atoi(property) * (1.0f/160.0f);