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

Commit 6e8de44e authored by Santos Cordon's avatar Santos Cordon
Browse files

Add high-brightness-mode range specifier to brightness mapping.

Within the device-configuration file, a device can specify a
point along the brightness mapping as the beginning of high-brightness
mode.  All points in the mapping beyond that range will be treated
as high-brightness-mode points.  Normal brightness range will end
at the specified point.

Bug: 131813802
Test: Verify brightness works through the entire pre-HBM range, with and
without new specifier.
Change-Id: I4d9c6fab1c1f11e550ee33643673b004ee54dbfe
parent ba5a5356
Loading
Loading
Loading
Loading
+21 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.os.Environment;
import android.util.Slog;

import com.android.server.display.config.DisplayConfiguration;
import com.android.server.display.config.NitsMap;
import com.android.server.display.config.Point;
import com.android.server.display.config.XmlParser;

@@ -30,6 +31,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.List;

import javax.xml.datatype.DatatypeConfigurationException;
@@ -40,12 +42,15 @@ import javax.xml.datatype.DatatypeConfigurationException;
public class DisplayDeviceConfig {
    private static final String TAG = "DisplayDeviceConfig";

    public static final float HIGH_BRIGHTNESS_MODE_UNSUPPORTED = Float.NaN;

    private static final String ETC_DIR = "etc";
    private static final String DISPLAY_CONFIG_DIR = "displayconfig";
    private static final String CONFIG_FILE_FORMAT = "display_%d.xml";

    private float[] mNits;
    private float[] mBrightness;
    private BigDecimal mHighBrightnessModeStart;

    private DisplayDeviceConfig() {
    }
@@ -83,6 +88,18 @@ public class DisplayDeviceConfig {
        return mBrightness;
    }

    /**
     * Returns the point along the brightness value range {@link #getBrightness()} that
     * high-brightness-mode begins. If high-brightness-mode is not supported, then
     * Float.NaN is returned.
     *
     * @return The high brightness mode threshold, or Float.NaN if not supported.
     */
    public float getHighBrightnessModeStart() {
        return mHighBrightnessModeStart != null
                ? mHighBrightnessModeStart.floatValue() : HIGH_BRIGHTNESS_MODE_UNSUPPORTED;
    }

    private void initFromFile(File configFile) {
        if (!configFile.exists()) {
            // Display configuration files aren't required to exist.
@@ -104,7 +121,8 @@ public class DisplayDeviceConfig {
    }

    private void loadBrightnessMap(DisplayConfiguration config) {
        final List<Point> points = config.getScreenBrightnessMap().getPoint();
        final NitsMap map = config.getScreenBrightnessMap();
        final List<Point> points = map.getPoint();
        final int size = points.size();

        float[] nits = new float[size];
@@ -130,7 +148,9 @@ public class DisplayDeviceConfig {
            }
            ++i;
        }
        final BigDecimal hbmStart = map.getHighBrightnessStart();

        mHighBrightnessModeStart = hbmStart;
        mNits = nits;
        mBrightness = backlight;
    }
+1 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@
    <xs:complexType name="nitsMap">
        <xs:sequence>
            <xs:element name="point" type="point" maxOccurs="unbounded" minOccurs="2"/>
            <xs:element name="highBrightnessStart" minOccurs="0" type="nonNegativeDecimal"/>
        </xs:sequence>
    </xs:complexType>

+2 −0
Original line number Diff line number Diff line
@@ -9,7 +9,9 @@ package com.android.server.display.config {

  public class NitsMap {
    ctor public NitsMap();
    method public java.math.BigDecimal getHighBrightnessStart();
    method public java.util.List<com.android.server.display.config.Point> getPoint();
    method public void setHighBrightnessStart(java.math.BigDecimal);
  }

  public class Point {