Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f1bf5c5 authored by Tom Marshall's avatar Tom Marshall Committed by Gerrit Code Review
Browse files

Allow custom density setting

Use system property persist.sys.lcd_density to set custom density.  The
custom setting affects the entire UI.  It is independent of
ro.sf.lcd_density and has no effect on play store compatibility.

Code distilled from PA project via PAC project.

Change-Id: I8d26405d5d33bdf2890a0e9f67f113a4dc3e763b
parent 596bc39f
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -272,6 +272,7 @@ public class Resources {
            CompatibilityInfo compatInfo, IBinder token) {
        mAssets = assets;
        mMetrics.setToDefaults();
        mMetrics.updateDensity();
        if (compatInfo != null) {
            mCompatibilityInfo = compatInfo;
        }
@@ -1916,6 +1917,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;

@@ -2397,7 +2399,7 @@ public class Resources {
            }
            sPreloaded = true;
            mPreloading = true;
            sPreloadedDensity = DisplayMetrics.DENSITY_DEVICE;
            sPreloadedDensity = DisplayMetrics.getDeviceDensity();
            mConfiguration.densityDpi = sPreloadedDensity;
            updateConfiguration(null, null);
        }
+25 −8
Original line number Diff line number Diff line
@@ -122,7 +122,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.
@@ -213,6 +221,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() {
    }
    
@@ -231,6 +252,7 @@ public class DisplayMetrics {
        noncompatScaledDensity = o.noncompatScaledDensity;
        noncompatXdpi = o.noncompatXdpi;
        noncompatYdpi = o.noncompatYdpi;
        updateDensity();
    }
    
    public void setToDefaults() {
@@ -304,12 +326,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;
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -441,6 +441,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();

        if (!compatInfo.equals(CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO)) {
            compatInfo.applyToDisplayMetrics(outMetrics);
+2 −9
Original line number Diff line number Diff line
@@ -81,24 +81,17 @@ 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
    }

    static int getDefaultDensity() {
        if (sDefaultDensity >= 0) {
            return sDefaultDensity;
        }
        //noinspection deprecation
        sDefaultDensity = DisplayMetrics.DENSITY_DEVICE;
        return sDefaultDensity;
        return DisplayMetrics.getDeviceDensity();
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -984,7 +984,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();