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

Commit 38da3cb7 authored by Fiona Campbell's avatar Fiona Campbell Committed by Android (Google) Code Review
Browse files

Merge "Add fallback ID checking for DisplayDeviceConfig"

parents 9daabdb1 1cd2473c
Loading
Loading
Loading
Loading
+65 −9
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.display;


import android.os.Environment;
import android.os.Environment;
import android.util.Slog;
import android.util.Slog;
import android.view.DisplayAddress;


import com.android.server.display.config.DisplayConfiguration;
import com.android.server.display.config.DisplayConfiguration;
import com.android.server.display.config.NitsMap;
import com.android.server.display.config.NitsMap;
@@ -31,6 +32,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.List;


import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeConfigurationException;
@@ -45,7 +47,11 @@ public class DisplayDeviceConfig {


    private static final String ETC_DIR = "etc";
    private static final String ETC_DIR = "etc";
    private static final String DISPLAY_CONFIG_DIR = "displayconfig";
    private static final String DISPLAY_CONFIG_DIR = "displayconfig";
    private static final String CONFIG_FILE_FORMAT = "display_%d.xml";
    private static final String CONFIG_FILE_FORMAT = "display_%s.xml";
    private static final String PORT_SUFFIX_FORMAT = "port_%d";
    private static final String STABLE_ID_SUFFIX_FORMAT = "id_%d";
    private static final String NO_SUFFIX_FORMAT = "%d";
    private static final long STABLE_FLAG = 1L << 62;


    private float[] mNits;
    private float[] mNits;
    private float[] mBrightness;
    private float[] mBrightness;
@@ -55,19 +61,45 @@ public class DisplayDeviceConfig {


    /**
    /**
     * Creates an instance for the specified display.
     * Creates an instance for the specified display.
     *
     * Tries to find a file with identifier in the following priority order:
     * <ol>
     *     <li>physicalDisplayId</li>
     *     <li>physicalDisplayId without a stable flag (old system)</li>
     *     <li>portId</li>
     * </ol>
     * @param physicalDisplayId The display ID for which to load the configuration.
     * @param physicalDisplayId The display ID for which to load the configuration.
     * @return A configuration instance for the specified display.
     * @return A configuration instance for the specified display.
     */
     */
    public static DisplayDeviceConfig create(long physicalDisplayId) {
    public static DisplayDeviceConfig create(long physicalDisplayId) {
        final DisplayDeviceConfig config = new DisplayDeviceConfig();
        DisplayDeviceConfig config;
        final String filename = String.format(CONFIG_FILE_FORMAT, physicalDisplayId);

        // Create config using filename from physical ID (including "stable" bit).
        config = getConfigFromSuffix(STABLE_ID_SUFFIX_FORMAT, physicalDisplayId);
        if (config != null) {
            return config;
        }


        config.initFromFile(Environment.buildPath(
        // Create config using filename from physical ID (excluding "stable" bit).
                Environment.getProductDirectory(), ETC_DIR, DISPLAY_CONFIG_DIR, filename));
        final long withoutStableFlag = physicalDisplayId & ~STABLE_FLAG;
        config = getConfigFromSuffix(NO_SUFFIX_FORMAT, withoutStableFlag);
        if (config != null) {
            return config;
            return config;
        }
        }


        // Create config using filename from port ID.
        final DisplayAddress.Physical physicalAddress =
                DisplayAddress.fromPhysicalDisplayId(physicalDisplayId);
        int port = physicalAddress.getPort();
        config = getConfigFromSuffix(PORT_SUFFIX_FORMAT, port);
        if (config != null) {
            return config;
        }

        // None of these files exist.
        return null;

    }

    /**
    /**
     * Return the brightness mapping nits array if one is defined in the configuration file.
     * Return the brightness mapping nits array if one is defined in the configuration file.
     *
     *
@@ -86,6 +118,30 @@ public class DisplayDeviceConfig {
        return mBrightness;
        return mBrightness;
    }
    }


    @Override
    public String toString() {
        String str = "DisplayDeviceConfig{"
                + "mBrightness=" + Arrays.toString(mBrightness)
                + ", mNits=" + Arrays.toString(mNits)
                + "}";
        return str;
    }

    private static DisplayDeviceConfig getConfigFromSuffix(String suffixFormat, long idNumber) {

        final String suffix = String.format(suffixFormat, idNumber);
        final String filename = String.format(CONFIG_FILE_FORMAT, suffix);
        final File filePath = Environment.buildPath(
                Environment.getProductDirectory(), ETC_DIR, DISPLAY_CONFIG_DIR, filename);

        if (filePath.exists()) {
            final DisplayDeviceConfig config = new DisplayDeviceConfig();
            config.initFromFile(filePath);
            return config;
        }
        return null;
    }

    private void initFromFile(File configFile) {
    private void initFromFile(File configFile) {
        if (!configFile.exists()) {
        if (!configFile.exists()) {
            // Display configuration files aren't required to exist.
            // Display configuration files aren't required to exist.
+5 −4
Original line number Original line Diff line number Diff line
@@ -391,11 +391,11 @@ final class LocalDisplayAdapter extends DisplayAdapter {
            Spline sysToNits = null;
            Spline sysToNits = null;


            // Load the mapping from nits to HAL brightness range (display-device-config.xml)
            // Load the mapping from nits to HAL brightness range (display-device-config.xml)
            DisplayDeviceConfig config = DisplayDeviceConfig.create(mPhysicalDisplayId);
            mDisplayDeviceConfig = DisplayDeviceConfig.create(mPhysicalDisplayId);
            mDisplayDeviceConfig = config;
            if (mDisplayDeviceConfig == null) {
            if (config == null) {
                return;
                return;
            }
            }

            final float[] halNits = mDisplayDeviceConfig.getNits();
            final float[] halNits = mDisplayDeviceConfig.getNits();
            final float[] halBrightness = mDisplayDeviceConfig.getBrightness();
            final float[] halBrightness = mDisplayDeviceConfig.getBrightness();
            if (halNits == null || halBrightness == null) {
            if (halNits == null || halBrightness == null) {
@@ -942,7 +942,8 @@ final class LocalDisplayAdapter extends DisplayAdapter {
            for (int i = 0; i < mSupportedModes.size(); i++) {
            for (int i = 0; i < mSupportedModes.size(); i++) {
                pw.println("  " + mSupportedModes.valueAt(i));
                pw.println("  " + mSupportedModes.valueAt(i));
            }
            }
            pw.print("mSupportedColorModes=" + mSupportedColorModes.toString());
            pw.println("mSupportedColorModes=" + mSupportedColorModes.toString());
            pw.print("mDisplayDeviceConfig=" + mDisplayDeviceConfig);
        }
        }


        private int findDisplayConfigIdLocked(int modeId, int configGroup) {
        private int findDisplayConfigIdLocked(int modeId, int configGroup) {