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

Commit 7f0d58cf authored by Piotr Wilczyński's avatar Piotr Wilczyński
Browse files

Read wear brightness setting and use appropriate curve

Bug: 313907570
Test: adb shell dumpsys display
Test: atest com.android.server.display
Change-Id: I0bef4b98ab33e344c69629c0f056a115e09f271f
parent 5ad8b353
Loading
Loading
Loading
Loading
+22 −13
Original line number Diff line number Diff line
@@ -23,12 +23,14 @@ import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIG
import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_IDLE;

import android.annotation.Nullable;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.hardware.display.BrightnessConfiguration;
import android.hardware.display.BrightnessCorrection;
import android.os.PowerManager;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.LongArray;
import android.util.MathUtils;
import android.util.Pair;
@@ -80,45 +82,50 @@ public abstract class BrightnessMappingStrategy {
     * Creates a BrightnessMapping strategy. We do not create a simple mapping strategy for idle
     * mode.
     *
     * @param resources
     * @param context
     * @param displayDeviceConfig
     * @param mode The auto-brightness mode. Different modes use different brightness curves
     * @param displayWhiteBalanceController
     * @return the BrightnessMappingStrategy
     */
    @Nullable
    static BrightnessMappingStrategy create(Resources resources,
    static BrightnessMappingStrategy create(Context context,
            DisplayDeviceConfig displayDeviceConfig,
            @AutomaticBrightnessController.AutomaticBrightnessMode int mode,
            DisplayWhiteBalanceController displayWhiteBalanceController) {
            @Nullable DisplayWhiteBalanceController displayWhiteBalanceController) {

        // Display independent, mode dependent values
        float[] brightnessLevelsNits = null;
        float[] brightnessLevels = null;
        float[] luxLevels = null;
        int preset = Settings.System.getIntForUser(context.getContentResolver(),
                Settings.System.SCREEN_BRIGHTNESS_FOR_ALS,
                Settings.System.SCREEN_BRIGHTNESS_AUTOMATIC_NORMAL, UserHandle.USER_CURRENT);
        switch (mode) {
            case AUTO_BRIGHTNESS_MODE_DEFAULT -> {
                brightnessLevelsNits = displayDeviceConfig.getAutoBrightnessBrighteningLevelsNits();
                luxLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevelsLux(mode);
                brightnessLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevels(mode);
                luxLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevelsLux(mode, preset);
                brightnessLevels =
                        displayDeviceConfig.getAutoBrightnessBrighteningLevels(mode, preset);
            }
            case AUTO_BRIGHTNESS_MODE_IDLE -> {
                brightnessLevelsNits = getFloatArray(resources.obtainTypedArray(
                brightnessLevelsNits = getFloatArray(context.getResources().obtainTypedArray(
                        com.android.internal.R.array.config_autoBrightnessDisplayValuesNitsIdle));
                luxLevels = getLuxLevels(resources.getIntArray(
                luxLevels = getLuxLevels(context.getResources().getIntArray(
                        com.android.internal.R.array.config_autoBrightnessLevelsIdle));
            }
            case AUTO_BRIGHTNESS_MODE_DOZE -> {
                luxLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevelsLux(mode);
                brightnessLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevels(mode);
                luxLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevelsLux(mode, preset);
                brightnessLevels =
                        displayDeviceConfig.getAutoBrightnessBrighteningLevels(mode, preset);
            }
        }

        // Display independent, mode independent values
        float autoBrightnessAdjustmentMaxGamma = resources.getFraction(
        float autoBrightnessAdjustmentMaxGamma = context.getResources().getFraction(
                com.android.internal.R.fraction.config_autoBrightnessAdjustmentMaxGamma,
                1, 1);
        long shortTermModelTimeout = resources.getInteger(
        long shortTermModelTimeout = context.getResources().getInteger(
                com.android.internal.R.integer.config_autoBrightnessShortTermModelTimeout);

        // Display dependent values - used for physical mapping strategy nits -> brightness
@@ -823,6 +830,8 @@ public abstract class BrightnessMappingStrategy {
        private float mAutoBrightnessAdjustment;
        private float mUserLux;
        private float mUserBrightness;

        @Nullable
        private final DisplayWhiteBalanceController mDisplayWhiteBalanceController;

        @AutomaticBrightnessController.AutomaticBrightnessMode
@@ -838,7 +847,7 @@ public abstract class BrightnessMappingStrategy {
        public PhysicalMappingStrategy(BrightnessConfiguration config, float[] nits,
                float[] brightness, float maxGamma,
                @AutomaticBrightnessController.AutomaticBrightnessMode int mode,
                DisplayWhiteBalanceController displayWhiteBalanceController) {
                @Nullable DisplayWhiteBalanceController displayWhiteBalanceController) {

            Preconditions.checkArgument(nits.length != 0 && brightness.length != 0,
                    "Nits and brightness arrays must not be empty!");
+7 −30
Original line number Diff line number Diff line
@@ -1590,26 +1590,15 @@ public class DisplayDeviceConfig {
        return mAutoBrightnessBrighteningLightDebounceIdle;
    }

    /**
     * @param mode The auto-brightness mode
     * @return The default auto-brightness brightening ambient lux levels for the specified mode
     * and the normal brightness preset
     */
    public float[] getAutoBrightnessBrighteningLevelsLux(
            @AutomaticBrightnessController.AutomaticBrightnessMode int mode) {
        if (mDisplayBrightnessMapping == null) {
            return null;
        }
        return mDisplayBrightnessMapping.getLuxArray(mode);
    }

    /**
     * @param mode The auto-brightness mode
     * @param preset The brightness preset. Presets are used on devices that allow users to choose
     *               from a set of predefined options in display auto-brightness settings.
     * @return Auto brightness brightening ambient lux levels for the specified mode and preset
     * @return The default auto-brightness brightening ambient lux levels for the specified mode
     * and preset
     */
    public float[] getAutoBrightnessBrighteningLevelsLux(String mode, String preset) {
    public float[] getAutoBrightnessBrighteningLevelsLux(
            @AutomaticBrightnessController.AutomaticBrightnessMode int mode, int preset) {
        if (mDisplayBrightnessMapping == null) {
            return null;
        }
@@ -1626,26 +1615,14 @@ public class DisplayDeviceConfig {
        return mDisplayBrightnessMapping.getNitsArray();
    }

    /**
     * @param mode The auto-brightness mode
     * @return The default auto-brightness brightening levels for the specified mode and the normal
     * brightness preset
     */
    public float[] getAutoBrightnessBrighteningLevels(
            @AutomaticBrightnessController.AutomaticBrightnessMode int mode) {
        if (mDisplayBrightnessMapping == null) {
            return null;
        }
        return mDisplayBrightnessMapping.getBrightnessArray(mode);
    }

    /**
     * @param mode The auto-brightness mode
     * @param preset The brightness preset. Presets are used on devices that allow users to choose
     *               from a set of predefined options in display auto-brightness settings.
     * @return Auto brightness brightening backlight levels for the specified mode and preset
     * @return The default auto-brightness brightening levels for the specified mode and preset
     */
    public float[] getAutoBrightnessBrighteningLevels(String mode, String preset) {
    public float[] getAutoBrightnessBrighteningLevels(
            @AutomaticBrightnessController.AutomaticBrightnessMode int mode, int preset) {
        if (mDisplayBrightnessMapping == null) {
            return null;
        }
+16 −19
Original line number Diff line number Diff line
@@ -735,7 +735,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
            mCdsi = null;
        }

        setUpAutoBrightness(resources, handler);
        setUpAutoBrightness(context, handler);

        mColorFadeEnabled = !ActivityManager.isLowRamDeviceStatic()
                && !resources.getBoolean(
@@ -1075,7 +1075,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        loadBrightnessRampRates();
        loadProximitySensor();
        loadNitsRange(mContext.getResources());
        setUpAutoBrightness(mContext.getResources(), mHandler);
        setUpAutoBrightness(mContext, mHandler);
        reloadReduceBrightColours();
        setAnimatorRampSpeeds(/* isIdleMode= */ false);
        mBrightnessRangeController.loadFromConfig(hbmMetadata, token, info, mDisplayDeviceConfig);
@@ -1145,7 +1145,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        handleBrightnessModeChange();
    }

    private void setUpAutoBrightness(Resources resources, Handler handler) {
    private void setUpAutoBrightness(Context context, Handler handler) {
        mUseSoftwareAutoBrightnessConfig = mDisplayDeviceConfig.isAutoBrightnessAvailable();

        if (!mUseSoftwareAutoBrightnessConfig) {
@@ -1155,21 +1155,19 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        SparseArray<BrightnessMappingStrategy> brightnessMappers = new SparseArray<>();

        BrightnessMappingStrategy defaultModeBrightnessMapper =
                mInjector.getDefaultModeBrightnessMapper(resources, mDisplayDeviceConfig,
                mInjector.getDefaultModeBrightnessMapper(context, mDisplayDeviceConfig,
                        mDisplayWhiteBalanceController);
        brightnessMappers.append(AUTO_BRIGHTNESS_MODE_DEFAULT,
                defaultModeBrightnessMapper);

        final boolean isIdleScreenBrightnessEnabled = resources.getBoolean(
        final boolean isIdleScreenBrightnessEnabled = context.getResources().getBoolean(
                R.bool.config_enableIdleScreenBrightnessMode);
        if (isIdleScreenBrightnessEnabled) {
            BrightnessMappingStrategy idleModeBrightnessMapper =
                    BrightnessMappingStrategy.create(resources, mDisplayDeviceConfig,
                            AUTO_BRIGHTNESS_MODE_IDLE,
                            mDisplayWhiteBalanceController);
                    BrightnessMappingStrategy.create(context, mDisplayDeviceConfig,
                            AUTO_BRIGHTNESS_MODE_IDLE, mDisplayWhiteBalanceController);
            if (idleModeBrightnessMapper != null) {
                brightnessMappers.append(AUTO_BRIGHTNESS_MODE_IDLE,
                        idleModeBrightnessMapper);
                brightnessMappers.append(AUTO_BRIGHTNESS_MODE_IDLE, idleModeBrightnessMapper);
            }
        }

@@ -1181,7 +1179,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        }

        if (defaultModeBrightnessMapper != null) {
            final float dozeScaleFactor = resources.getFraction(
            final float dozeScaleFactor = context.getResources().getFraction(
                    com.android.internal.R.fraction.config_screenAutoBrightnessDozeScaleFactor,
                    1, 1);

@@ -1265,14 +1263,14 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    .getAutoBrightnessBrighteningLightDebounceIdle();
            long darkeningLightDebounceIdle = mDisplayDeviceConfig
                    .getAutoBrightnessDarkeningLightDebounceIdle();
            boolean autoBrightnessResetAmbientLuxAfterWarmUp = resources.getBoolean(
            boolean autoBrightnessResetAmbientLuxAfterWarmUp = context.getResources().getBoolean(
                    com.android.internal.R.bool.config_autoBrightnessResetAmbientLuxAfterWarmUp);

            int lightSensorWarmUpTimeConfig = resources.getInteger(
            int lightSensorWarmUpTimeConfig = context.getResources().getInteger(
                    com.android.internal.R.integer.config_lightSensorWarmupTime);
            int lightSensorRate = resources.getInteger(
            int lightSensorRate = context.getResources().getInteger(
                    com.android.internal.R.integer.config_autoBrightnessLightSensorRate);
            int initialLightSensorRate = resources.getInteger(
            int initialLightSensorRate = context.getResources().getInteger(
                    com.android.internal.R.integer.config_autoBrightnessInitialLightSensorRate);
            if (initialLightSensorRate == -1) {
                initialLightSensorRate = lightSensorRate;
@@ -3645,12 +3643,11 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    userNits);
        }

        BrightnessMappingStrategy getDefaultModeBrightnessMapper(Resources resources,
        BrightnessMappingStrategy getDefaultModeBrightnessMapper(Context context,
                DisplayDeviceConfig displayDeviceConfig,
                DisplayWhiteBalanceController displayWhiteBalanceController) {
            return BrightnessMappingStrategy.create(resources,
                    displayDeviceConfig, AUTO_BRIGHTNESS_MODE_DEFAULT,
                    displayWhiteBalanceController);
            return BrightnessMappingStrategy.create(context, displayDeviceConfig,
                    AUTO_BRIGHTNESS_MODE_DEFAULT, displayWhiteBalanceController);
        }

        HysteresisLevels getHysteresisLevels(float[] brighteningThresholdsPercentages,
+31 −16
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.display;
import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_DEFAULT;
import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_DOZE;
import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_IDLE;
import static com.android.server.display.config.DisplayBrightnessMappingConfig.autoBrightnessPresetToString;

import android.animation.Animator;
import android.animation.ObjectAnimator;
@@ -624,7 +625,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
            mCdsi = null;
        }

        setUpAutoBrightness(resources, handler);
        setUpAutoBrightness(context, handler);

        mColorFadeEnabled = mInjector.isColorFadeEnabled()
                && !resources.getBoolean(
@@ -905,7 +906,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        // updated here.
        loadBrightnessRampRates();
        loadNitsRange(mContext.getResources());
        setUpAutoBrightness(mContext.getResources(), mHandler);
        setUpAutoBrightness(mContext, mHandler);
        reloadReduceBrightColours();
        setAnimatorRampSpeeds(/* isIdleMode= */ false);

@@ -976,10 +977,15 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        mContext.getContentResolver().registerContentObserver(
                Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE),
                false /*notifyForDescendants*/, mSettingsObserver, UserHandle.USER_ALL);
        if (mFlags.areAutoBrightnessModesEnabled()) {
            mContext.getContentResolver().registerContentObserver(
                    Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FOR_ALS),
                    /* notifyForDescendants= */ false, mSettingsObserver, UserHandle.USER_CURRENT);
        }
        handleBrightnessModeChange();
    }

    private void setUpAutoBrightness(Resources resources, Handler handler) {
    private void setUpAutoBrightness(Context context, Handler handler) {
        mUseSoftwareAutoBrightnessConfig = mDisplayDeviceConfig.isAutoBrightnessAvailable();

        if (!mUseSoftwareAutoBrightnessConfig) {
@@ -989,16 +995,16 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        SparseArray<BrightnessMappingStrategy> brightnessMappers = new SparseArray<>();

        BrightnessMappingStrategy defaultModeBrightnessMapper =
                mInjector.getDefaultModeBrightnessMapper(resources, mDisplayDeviceConfig,
                mInjector.getDefaultModeBrightnessMapper(context, mDisplayDeviceConfig,
                        mDisplayWhiteBalanceController);
        brightnessMappers.append(AUTO_BRIGHTNESS_MODE_DEFAULT,
                defaultModeBrightnessMapper);

        final boolean isIdleScreenBrightnessEnabled = resources.getBoolean(
        final boolean isIdleScreenBrightnessEnabled = context.getResources().getBoolean(
                R.bool.config_enableIdleScreenBrightnessMode);
        if (isIdleScreenBrightnessEnabled) {
            BrightnessMappingStrategy idleModeBrightnessMapper =
                    BrightnessMappingStrategy.create(resources, mDisplayDeviceConfig,
                    BrightnessMappingStrategy.create(context, mDisplayDeviceConfig,
                            AUTO_BRIGHTNESS_MODE_IDLE,
                            mDisplayWhiteBalanceController);
            if (idleModeBrightnessMapper != null) {
@@ -1008,7 +1014,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        }

        BrightnessMappingStrategy dozeModeBrightnessMapper =
                BrightnessMappingStrategy.create(resources, mDisplayDeviceConfig,
                BrightnessMappingStrategy.create(context, mDisplayDeviceConfig,
                        AUTO_BRIGHTNESS_MODE_DOZE, mDisplayWhiteBalanceController);
        if (mFlags.areAutoBrightnessModesEnabled() && dozeModeBrightnessMapper != null) {
            brightnessMappers.put(AUTO_BRIGHTNESS_MODE_DOZE, dozeModeBrightnessMapper);
@@ -1022,7 +1028,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        }

        if (defaultModeBrightnessMapper != null) {
            final float dozeScaleFactor = resources.getFraction(
            final float dozeScaleFactor = context.getResources().getFraction(
                    R.fraction.config_screenAutoBrightnessDozeScaleFactor,
                    1, 1);

@@ -1106,14 +1112,14 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
                    .getAutoBrightnessBrighteningLightDebounceIdle();
            long darkeningLightDebounceIdle = mDisplayDeviceConfig
                    .getAutoBrightnessDarkeningLightDebounceIdle();
            boolean autoBrightnessResetAmbientLuxAfterWarmUp = resources.getBoolean(
            boolean autoBrightnessResetAmbientLuxAfterWarmUp = context.getResources().getBoolean(
                    R.bool.config_autoBrightnessResetAmbientLuxAfterWarmUp);

            int lightSensorWarmUpTimeConfig = resources.getInteger(
            int lightSensorWarmUpTimeConfig = context.getResources().getInteger(
                    R.integer.config_lightSensorWarmupTime);
            int lightSensorRate = resources.getInteger(
            int lightSensorRate = context.getResources().getInteger(
                    R.integer.config_autoBrightnessLightSensorRate);
            int initialLightSensorRate = resources.getInteger(
            int initialLightSensorRate = context.getResources().getInteger(
                    R.integer.config_autoBrightnessInitialLightSensorRate);
            if (initialLightSensorRate == -1) {
                initialLightSensorRate = lightSensorRate;
@@ -2999,6 +3005,16 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        public void onChange(boolean selfChange, Uri uri) {
            if (uri.equals(Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE))) {
                handleBrightnessModeChange();
            } else if (uri.equals(Settings.System.getUriFor(
                    Settings.System.SCREEN_BRIGHTNESS_FOR_ALS))) {
                int preset = Settings.System.getIntForUser(mContext.getContentResolver(),
                        Settings.System.SCREEN_BRIGHTNESS_FOR_ALS,
                        Settings.System.SCREEN_BRIGHTNESS_AUTOMATIC_NORMAL,
                        UserHandle.USER_CURRENT);
                Slog.i(mTag, "Setting up auto-brightness for preset "
                        + autoBrightnessPresetToString(preset));
                setUpAutoBrightness(mContext, mHandler);
                sendUpdatePowerState();
            } else {
                handleSettingsChange(false /* userSwitch */);
            }
@@ -3117,12 +3133,11 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
                    userNits);
        }

        BrightnessMappingStrategy getDefaultModeBrightnessMapper(Resources resources,
        BrightnessMappingStrategy getDefaultModeBrightnessMapper(Context context,
                DisplayDeviceConfig displayDeviceConfig,
                DisplayWhiteBalanceController displayWhiteBalanceController) {
            return BrightnessMappingStrategy.create(resources,
                    displayDeviceConfig, AUTO_BRIGHTNESS_MODE_DEFAULT,
                    displayWhiteBalanceController);
            return BrightnessMappingStrategy.create(context, displayDeviceConfig,
                    AUTO_BRIGHTNESS_MODE_DEFAULT, displayWhiteBalanceController);
        }

        HysteresisLevels getHysteresisLevels(float[] brighteningThresholdsPercentages,
+32 −29
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIG

import android.content.Context;
import android.os.PowerManager;
import android.provider.Settings;
import android.util.Spline;

import com.android.internal.display.BrightnessSynchronizer;
@@ -38,9 +39,9 @@ import java.util.Map;
 */
public class DisplayBrightnessMappingConfig {

    private static final String DEFAULT_BRIGHTNESS_PRESET_NAME = "normal";
    private static final String DEFAULT_BRIGHTNESS_MAPPING_KEY =
            AutoBrightnessModeName._default.getRawName() + "_" + DEFAULT_BRIGHTNESS_PRESET_NAME;
            AutoBrightnessModeName._default.getRawName() + "_"
                    + AutoBrightnessSettingName.normal.getRawName();

    /**
     * Array of desired screen brightness in nits corresponding to the lux values
@@ -150,24 +151,17 @@ public class DisplayBrightnessMappingConfig {
        }
    }

    /**
     * @param mode The auto-brightness mode
     * @return The default auto-brightness brightening ambient lux levels for the specified mode
     * and the normal brightness preset
     */
    public float[] getLuxArray(@AutomaticBrightnessController.AutomaticBrightnessMode int mode) {
        return mBrightnessLevelsLuxMap.get(
                autoBrightnessModeToString(mode) + "_" + DEFAULT_BRIGHTNESS_PRESET_NAME);
    }

    /**
     * @param mode The auto-brightness mode
     * @param preset The brightness preset. Presets are used on devices that allow users to choose
     *               from a set of predefined options in display auto-brightness settings.
     * @return Auto brightness brightening ambient lux levels for the specified mode and preset
     * @return The default auto-brightness brightening ambient lux levels for the specified mode
     * and preset
     */
    public float[] getLuxArray(String mode, String preset) {
        return mBrightnessLevelsLuxMap.get(mode + "_" + preset);
    public float[] getLuxArray(@AutomaticBrightnessController.AutomaticBrightnessMode int mode,
            int preset) {
        return mBrightnessLevelsLuxMap.get(
                autoBrightnessModeToString(mode) + "_" + autoBrightnessPresetToString(preset));
    }

    /**
@@ -177,25 +171,16 @@ public class DisplayBrightnessMappingConfig {
        return mBrightnessLevelsNits;
    }

    /**
     * @param mode The auto-brightness mode
     * @return The default auto-brightness brightening levels for the specified mode and the normal
     * brightness preset
     */
    public float[] getBrightnessArray(
            @AutomaticBrightnessController.AutomaticBrightnessMode int mode) {
        return mBrightnessLevelsMap.get(
                autoBrightnessModeToString(mode) + "_" + DEFAULT_BRIGHTNESS_PRESET_NAME);
    }

    /**
     * @param mode The auto-brightness mode
     * @param preset The brightness preset. Presets are used on devices that allow users to choose
     *               from a set of predefined options in display auto-brightness settings.
     * @return Auto brightness brightening ambient lux levels for the specified mode and preset
     * @return The default auto-brightness brightening levels for the specified mode and preset
     */
    public float[] getBrightnessArray(String mode, String preset) {
        return mBrightnessLevelsMap.get(mode + "_" + preset);
    public float[] getBrightnessArray(
            @AutomaticBrightnessController.AutomaticBrightnessMode int mode, int preset) {
        return mBrightnessLevelsMap.get(
                autoBrightnessModeToString(mode) + "_" + autoBrightnessPresetToString(preset));
    }

    @Override
@@ -247,6 +232,24 @@ public class DisplayBrightnessMappingConfig {
        }
    }

    /**
     * @param preset The brightness preset. Presets are used on devices that allow users to choose
     *               from a set of predefined options in display auto-brightness settings.
     * @return The string representing the preset
     */
    public static String autoBrightnessPresetToString(int preset) {
        return switch (preset) {
            case Settings.System.SCREEN_BRIGHTNESS_AUTOMATIC_DIM ->
                    AutoBrightnessSettingName.dim.getRawName();
            case Settings.System.SCREEN_BRIGHTNESS_AUTOMATIC_NORMAL ->
                    AutoBrightnessSettingName.normal.getRawName();
            case Settings.System.SCREEN_BRIGHTNESS_AUTOMATIC_BRIGHT ->
                    AutoBrightnessSettingName.bright.getRawName();
            default -> throw new IllegalArgumentException(
                    "Unknown auto-brightness preset value: " + preset);
        };
    }

    private float[] brightnessArrayIntToFloat(int[] brightnessInt,
            Spline backlightToBrightnessSpline) {
        float[] brightnessFloat = new float[brightnessInt.length];
Loading