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

Commit dfc22d99 authored by Fiona Campbell's avatar Fiona Campbell
Browse files

Add strong mode color temp configs

- Create configs for low/highlightambientcolortemp
- Create configs for low/highlightBrightness
- Create configs for low/highlightBias
- Use different values, based on whether strong mode is enabled

Bug: 265233091
Test: adb shell dumpsys color_display | grep mTemperatureMin -A10 && adb shell dumpsys display | grep mLowLightAmbientBrightnessToBiasSpline -A2
Test: atest AmbientLuxTest

Change-Id: I084047cb70d91b4c23560005e46fc1f82d5e34f6
parent 8b9b6a47
Loading
Loading
Loading
Loading
+58 −0
Original line number Diff line number Diff line
@@ -5039,6 +5039,21 @@
        <item>10.0</item>
    </array>

    <!-- See DisplayWhiteBalanceController.
         A float array containing a list of ambient brightnesses, in Lux. This array,
         together with config_displayWhiteBalanceLowLightAmbientBiasesStrong, is used to generate a
         lookup table used in DisplayWhiteBalanceController. This lookup table is used to map
         ambient brightness readings to a bias, where the bias is used to linearly interpolate
         between ambient color temperature and
         config_displayWhiteBalanceLowLightAmbientColorTemperatureIdle.
         This table is optional. If used, this array must,
         1) Contain at least two entries
         2) Be the same length as config_displayWhiteBalanceLowLightAmbientBiasesStrong. -->
    <array name ="config_displayWhiteBalanceLowLightAmbientBrightnessesStrong">
        <item>10.0</item>
        <item>10.0</item>
    </array>

    <!-- See DisplayWhiteBalanceController.
         An array containing a list of biases. See
         config_displayWhiteBalanceLowLightAmbientBrightnesses for additional details.
@@ -5048,12 +5063,28 @@
        <item>1.0</item>
    </array>

    <!-- See DisplayWhiteBalanceController.
         An array containing a list of biases. See
         config_displayWhiteBalanceLowLightAmbientBrightnessesStrong for additional details.
         This array must be in the range of [0.0, 1.0]. -->
    <array name ="config_displayWhiteBalanceLowLightAmbientBiasesStrong">
        <item>0.0</item>
        <item>1.0</item>
    </array>

    <!-- See DisplayWhiteBalanceController.
         The ambient color temperature (in cct) to which we interpolate towards using the
         the look up table generated by config_displayWhiteBalanceLowLightAmbientBrightnesses
         and config_displayWhiteBalanceLowLightAmbientBiases. -->
    <item name="config_displayWhiteBalanceLowLightAmbientColorTemperature" format="float" type="dimen">6500.0</item>

    <!-- See DisplayWhiteBalanceController.
         The ambient color temperature (in cct) to which we interpolate towards using the
         the look up table generated by config_displayWhiteBalanceLowLightAmbientBrightnessesStrong
         and config_displayWhiteBalanceLowLightAmbientBiasesStrong. Used when device is in Idle Screen
         Brightness mode. -->
    <item name="config_displayWhiteBalanceLowLightAmbientColorTemperatureStrong" format="float" type="dimen">6500.0</item>

    <!-- See DisplayWhiteBalanceController.
         A float array containing a list of ambient brightnesses, in Lux. This array,
         together with config_displayWhiteBalanceHighLightAmbientBiases, is used to generate a
@@ -5067,6 +5098,19 @@
    <array name ="config_displayWhiteBalanceHighLightAmbientBrightnesses">
    </array>

    <!-- See DisplayWhiteBalanceController.
         A float array containing a list of ambient brightnesses, in Lux. This array,
         together with config_displayWhiteBalanceHighLightAmbientBiasesStrong, is used to generate a
         lookup table used in DisplayWhiteBalanceController. This lookup table is used to map
         ambient brightness readings to a bias, where the bias is used to linearly interpolate
         between ambient color temperature and
         config_displayWhiteBalanceHighLightAmbientColorTemperatureStrong.
         This table is optional. If used, this array must,
         1) Contain at least two entries
         2) Be the same length as config_displayWhiteBalanceHighLightAmbientBiasesStrong. -->
    <array name ="config_displayWhiteBalanceHighLightAmbientBrightnessesStrong">
    </array>

    <!-- See DisplayWhiteBalanceController.
         An array containing a list of biases. See
         config_displayWhiteBalanceHighLightAmbientBrightnesses for additional details.
@@ -5074,12 +5118,26 @@
    <array name ="config_displayWhiteBalanceHighLightAmbientBiases">
    </array>

    <!-- See DisplayWhiteBalanceController.
         An array containing a list of biases. See
         config_displayWhiteBalanceHighLightAmbientBrightnessesStrong for additional details.
         This array must be in the range of [0.0, 1.0]. -->
    <array name ="config_displayWhiteBalanceHighLightAmbientBiasesStrong">
    </array>

    <!-- See DisplayWhiteBalanceController.
         The ambient color temperature (in cct) to which we interpolate towards using the
         the look up table generated by config_displayWhiteBalanceHighLightAmbientBrightnesses
         and config_displayWhiteBalanceHighLightAmbientBiases. -->
    <item name="config_displayWhiteBalanceHighLightAmbientColorTemperature" format="float" type="dimen">8000.0</item>

    <!-- See DisplayWhiteBalanceController.
         The ambient color temperature (in cct) to which we interpolate towards using the
         the look up table generated by config_displayWhiteBalanceHighLightAmbientBrightnessesStrong
         and config_displayWhiteBalanceHighLightAmbientBiasesStrong. Used when device is in Idle
         Screen Brightness mode. -->
    <item name="config_displayWhiteBalanceHighLightAmbientColorTemperatureStrong" format="float" type="dimen">8000.0</item>

    <!-- See DisplayWhiteBalanceController.
         A float array containing a list of ambient color temperatures, in Kelvin. This array,
         together with config_displayWhiteBalanceDisplayColorTemperatures, is used to generate a
+6 −0
Original line number Diff line number Diff line
@@ -4161,11 +4161,17 @@
  <java-symbol type="array" name="config_displayWhiteBalanceIncreaseThresholds" />
  <java-symbol type="array" name="config_displayWhiteBalanceDecreaseThresholds" />
  <java-symbol type="array" name="config_displayWhiteBalanceLowLightAmbientBrightnesses" />
  <java-symbol type="array" name="config_displayWhiteBalanceLowLightAmbientBrightnessesStrong" />
  <java-symbol type="array" name="config_displayWhiteBalanceLowLightAmbientBiases" />
  <java-symbol type="array" name="config_displayWhiteBalanceLowLightAmbientBiasesStrong" />
  <java-symbol type="dimen" name="config_displayWhiteBalanceLowLightAmbientColorTemperature" />
  <java-symbol type="dimen" name="config_displayWhiteBalanceLowLightAmbientColorTemperatureStrong" />
  <java-symbol type="array" name="config_displayWhiteBalanceHighLightAmbientBrightnesses" />
  <java-symbol type="array" name="config_displayWhiteBalanceHighLightAmbientBrightnessesStrong" />
  <java-symbol type="array" name="config_displayWhiteBalanceHighLightAmbientBiases" />
  <java-symbol type="array" name="config_displayWhiteBalanceHighLightAmbientBiasesStrong" />
  <java-symbol type="dimen" name="config_displayWhiteBalanceHighLightAmbientColorTemperature" />
  <java-symbol type="dimen" name="config_displayWhiteBalanceHighLightAmbientColorTemperatureStrong" />
  <java-symbol type="array" name="config_displayWhiteBalanceAmbientColorTemperatures" />
  <java-symbol type="array" name="config_displayWhiteBalanceDisplayColorTemperatures" />
  <java-symbol type="array" name="config_displayWhiteBalanceStrongAmbientColorTemperatures" />
+98 −6
Original line number Diff line number Diff line
@@ -63,10 +63,15 @@ public class DisplayWhiteBalanceController implements
    // high errors. This default is introduced to provide a fixed display color
    // temperature when sensor readings become unreliable.
    private final float mLowLightAmbientColorTemperature;
    // As above, but used when in strong mode (idle screen brightness mode).
    private final float mLowLightAmbientColorTemperatureStrong;

    // In high brightness conditions certain color temperatures can cause peak display
    // brightness to drop. This fixed color temperature can be used to compensate for
    // this effect.
    private final float mHighLightAmbientColorTemperature;
    // As above, but used when in strong mode (idle screen brightness mode).
    private final float mHighLightAmbientColorTemperatureStrong;

    private final boolean mLightModeAllowed;

@@ -97,9 +102,11 @@ public class DisplayWhiteBalanceController implements
    // ambient color temperature to the defaults. A piecewise linear relationship
    // between low light brightness and low light bias.
    private Spline.LinearSpline mLowLightAmbientBrightnessToBiasSpline;
    private Spline.LinearSpline mLowLightAmbientBrightnessToBiasSplineStrong;

    // A piecewise linear relationship between high light brightness and high light bias.
    private Spline.LinearSpline mHighLightAmbientBrightnessToBiasSpline;
    private Spline.LinearSpline mHighLightAmbientBrightnessToBiasSplineStrong;

    private float mLatestAmbientColorTemperature;
    private float mLatestAmbientBrightness;
@@ -134,17 +141,29 @@ public class DisplayWhiteBalanceController implements
     * @param lowLightAmbientBrightnesses
     *      The ambient brightness used to map the ambient brightnesses to the biases used to
     *      interpolate to lowLightAmbientColorTemperature.
     * @param lowLightAmbientBrightnessesStrong
     *      The ambient brightness used to map the ambient brightnesses to the biases used to
     *      interpolate to lowLightAmbientColorTemperature.
     * @param lowLightAmbientBiases
     *      The biases used to map the ambient brightnesses to the biases used to interpolate to
     *      lowLightAmbientColorTemperature.
     * @param lowLightAmbientBiasesStrong
     *      The biases used to map the ambient brightnesses to the biases used to interpolate to
     *      lowLightAmbientColorTemperature.
     * @param lowLightAmbientColorTemperature
     *      The ambient color temperature to which we interpolate to based on the low light curve.
     * @param highLightAmbientBrightnesses
     *      The ambient brightness used to map the ambient brightnesses to the biases used to
     *      interpolate to highLightAmbientColorTemperature.
     * @param highLightAmbientBrightnessesStrong
     *      The ambient brightness used to map the ambient brightnesses to the biases used to
     *      interpolate to highLightAmbientColorTemperature.
     * @param highLightAmbientBiases
     *      The biases used to map the ambient brightnesses to the biases used to interpolate to
     *      highLightAmbientColorTemperature.
     * @param highLightAmbientBiasesStrong
     *      The biases used to map the ambient brightnesses to the biases used to interpolate to
     *      highLightAmbientColorTemperature.
     * @param highLightAmbientColorTemperature
     *      The ambient color temperature to which we interpolate to based on the high light curve.
     * @param ambientColorTemperatures
@@ -170,11 +189,17 @@ public class DisplayWhiteBalanceController implements
            @NonNull AmbientFilter colorTemperatureFilter,
            @NonNull DisplayWhiteBalanceThrottler throttler,
            float[] lowLightAmbientBrightnesses,
            float[] lowLightAmbientBrightnessesStrong,
            float[] lowLightAmbientBiases,
            float[] lowLightAmbientBiasesStrong,
            float lowLightAmbientColorTemperature,
            float lowLightAmbientColorTemperatureStrong,
            float[] highLightAmbientBrightnesses,
            float[] highLightAmbientBrightnessesStrong,
            float[] highLightAmbientBiases,
            float[] highLightAmbientBiasesStrong,
            float highLightAmbientColorTemperature,
            float highLightAmbientColorTemperatureStrong,
            float[] ambientColorTemperatures,
            float[] displayColorTemperatures,
            float[] strongAmbientColorTemperatures,
@@ -188,7 +213,9 @@ public class DisplayWhiteBalanceController implements
        mColorTemperatureFilter = colorTemperatureFilter;
        mThrottler = throttler;
        mLowLightAmbientColorTemperature = lowLightAmbientColorTemperature;
        mLowLightAmbientColorTemperatureStrong = lowLightAmbientColorTemperatureStrong;
        mHighLightAmbientColorTemperature = highLightAmbientColorTemperature;
        mHighLightAmbientColorTemperatureStrong = highLightAmbientColorTemperatureStrong;
        mAmbientColorTemperature = -1.0f;
        mPendingAmbientColorTemperature = -1.0f;
        mLastAmbientColorTemperature = -1.0f;
@@ -213,6 +240,23 @@ public class DisplayWhiteBalanceController implements
            }
        }

        try {
            mLowLightAmbientBrightnessToBiasSplineStrong = new Spline.LinearSpline(
                    lowLightAmbientBrightnessesStrong, lowLightAmbientBiasesStrong);
        } catch (Exception e) {
            Slog.e(TAG, "failed to create strong low light ambient brightness to bias spline.", e);
            mLowLightAmbientBrightnessToBiasSplineStrong = null;
        }
        if (mLowLightAmbientBrightnessToBiasSplineStrong != null) {
            if (mLowLightAmbientBrightnessToBiasSplineStrong.interpolate(0.0f) != 0.0f
                    || mLowLightAmbientBrightnessToBiasSplineStrong.interpolate(
                    Float.POSITIVE_INFINITY) != 1.0f) {
                Slog.d(TAG, "invalid strong low light ambient brightness to bias spline, "
                        + "bias must begin at 0.0 and end at 1.0.");
                mLowLightAmbientBrightnessToBiasSplineStrong = null;
            }
        }

        try {
            mHighLightAmbientBrightnessToBiasSpline = new Spline.LinearSpline(
                    highLightAmbientBrightnesses, highLightAmbientBiases);
@@ -230,6 +274,23 @@ public class DisplayWhiteBalanceController implements
            }
        }

        try {
            mHighLightAmbientBrightnessToBiasSplineStrong = new Spline.LinearSpline(
                    highLightAmbientBrightnessesStrong, highLightAmbientBiasesStrong);
        } catch (Exception e) {
            Slog.e(TAG, "failed to create strong high light ambient brightness to bias spline.", e);
            mHighLightAmbientBrightnessToBiasSplineStrong = null;
        }
        if (mHighLightAmbientBrightnessToBiasSplineStrong != null) {
            if (mHighLightAmbientBrightnessToBiasSplineStrong.interpolate(0.0f) != 0.0f
                    || mHighLightAmbientBrightnessToBiasSplineStrong.interpolate(
                    Float.POSITIVE_INFINITY) != 1.0f) {
                Slog.d(TAG, "invalid strong high light ambient brightness to bias spline, "
                        + "bias must begin at 0.0 and end at 1.0.");
                mHighLightAmbientBrightnessToBiasSplineStrong = null;
            }
        }

        if (mLowLightAmbientBrightnessToBiasSpline != null &&
                mHighLightAmbientBrightnessToBiasSpline != null) {
            if (lowLightAmbientBrightnesses[lowLightAmbientBrightnesses.length - 1] >
@@ -241,6 +302,18 @@ public class DisplayWhiteBalanceController implements
            }
        }

        if (mLowLightAmbientBrightnessToBiasSplineStrong != null
                && mHighLightAmbientBrightnessToBiasSplineStrong != null) {
            if (lowLightAmbientBrightnessesStrong[lowLightAmbientBrightnessesStrong.length - 1]
                    > highLightAmbientBrightnessesStrong[0]) {
                Slog.d(TAG,
                        "invalid strong low light and high light ambient brightness to bias "
                                + "spline combination, defined domains must not intersect.");
                mLowLightAmbientBrightnessToBiasSplineStrong = null;
                mHighLightAmbientBrightnessToBiasSplineStrong = null;
            }
        }

        try {
            mAmbientToDisplayColorTemperatureSpline = new Spline.LinearSpline(
                    ambientColorTemperatures, displayColorTemperatures);
@@ -365,7 +438,11 @@ public class DisplayWhiteBalanceController implements
        mColorTemperatureFilter.dump(writer);
        mThrottler.dump(writer);
        writer.println("  mLowLightAmbientColorTemperature=" + mLowLightAmbientColorTemperature);
        writer.println("  mLowLightAmbientColorTemperatureStrong="
                + mLowLightAmbientColorTemperatureStrong);
        writer.println("  mHighLightAmbientColorTemperature=" + mHighLightAmbientColorTemperature);
        writer.println("  mHighLightAmbientColorTemperatureStrong="
                + mHighLightAmbientColorTemperatureStrong);
        writer.println("  mAmbientColorTemperature=" + mAmbientColorTemperature);
        writer.println("  mPendingAmbientColorTemperature=" + mPendingAmbientColorTemperature);
        writer.println("  mLastAmbientColorTemperature=" + mLastAmbientColorTemperature);
@@ -377,8 +454,12 @@ public class DisplayWhiteBalanceController implements
                + mStrongAmbientToDisplayColorTemperatureSpline);
        writer.println("  mLowLightAmbientBrightnessToBiasSpline="
                + mLowLightAmbientBrightnessToBiasSpline);
        writer.println("  mLowLightAmbientBrightnessToBiasSplineStrong="
                + mLowLightAmbientBrightnessToBiasSplineStrong);
        writer.println("  mHighLightAmbientBrightnessToBiasSpline="
                + mHighLightAmbientBrightnessToBiasSpline);
        writer.println("  mHighLightAmbientBrightnessToBiasSplineStrong="
                + mHighLightAmbientBrightnessToBiasSplineStrong);
    }

    @Override // AmbientSensor.AmbientBrightnessSensor.Callbacks
@@ -400,6 +481,17 @@ public class DisplayWhiteBalanceController implements
     */
    public void updateAmbientColorTemperature() {
        final long time = System.currentTimeMillis();
        final float lowLightAmbientColorTemperature = mStrongModeEnabled
                ? mLowLightAmbientColorTemperatureStrong : mLowLightAmbientColorTemperature;
        final float highLightAmbientColorTemperature = mStrongModeEnabled
                ? mHighLightAmbientColorTemperatureStrong : mHighLightAmbientColorTemperature;
        final Spline.LinearSpline lowLightAmbientBrightnessToBiasSpline = mStrongModeEnabled
                ? mLowLightAmbientBrightnessToBiasSplineStrong
                : mLowLightAmbientBrightnessToBiasSpline;
        final Spline.LinearSpline highLightAmbientBrightnessToBiasSpline = mStrongModeEnabled
                ? mHighLightAmbientBrightnessToBiasSplineStrong
                : mHighLightAmbientBrightnessToBiasSpline;

        float ambientColorTemperature = mColorTemperatureFilter.getEstimate(time);
        mLatestAmbientColorTemperature = ambientColorTemperature;

@@ -423,19 +515,19 @@ public class DisplayWhiteBalanceController implements
        mLatestAmbientBrightness = ambientBrightness;

        if (ambientColorTemperature != -1.0f && ambientBrightness != -1.0f
                && mLowLightAmbientBrightnessToBiasSpline != null) {
            float bias = mLowLightAmbientBrightnessToBiasSpline.interpolate(ambientBrightness);
                && lowLightAmbientBrightnessToBiasSpline != null) {
            float bias = lowLightAmbientBrightnessToBiasSpline.interpolate(ambientBrightness);
            ambientColorTemperature =
                    bias * ambientColorTemperature + (1.0f - bias)
                    * mLowLightAmbientColorTemperature;
                    * lowLightAmbientColorTemperature;
            mLatestLowLightBias = bias;
        }
        if (ambientColorTemperature != -1.0f && ambientBrightness != -1.0f
                && mHighLightAmbientBrightnessToBiasSpline != null) {
            float bias = mHighLightAmbientBrightnessToBiasSpline.interpolate(ambientBrightness);
                && highLightAmbientBrightnessToBiasSpline != null) {
            float bias = highLightAmbientBrightnessToBiasSpline.interpolate(ambientBrightness);
            ambientColorTemperature =
                    (1.0f - bias) * ambientColorTemperature + bias
                    * mHighLightAmbientColorTemperature;
                    * highLightAmbientColorTemperature;
            mLatestHighLightBias = bias;
        }

+26 −2
Original line number Diff line number Diff line
@@ -70,21 +70,39 @@ public class DisplayWhiteBalanceFactory {
        final float[] displayWhiteBalanceLowLightAmbientBrightnesses = getFloatArray(resources,
                com.android.internal.R.array
                .config_displayWhiteBalanceLowLightAmbientBrightnesses);
        final float[] displayWhiteBalanceLowLightAmbientBrightnessesStrong = getFloatArray(
                resources, com.android.internal.R.array
                .config_displayWhiteBalanceLowLightAmbientBrightnessesStrong);
        final float[] displayWhiteBalanceLowLightAmbientBiases = getFloatArray(resources,
                com.android.internal.R.array
                .config_displayWhiteBalanceLowLightAmbientBiases);
        final float[] displayWhiteBalanceLowLightAmbientBiasesStrong = getFloatArray(resources,
                com.android.internal.R.array
                .config_displayWhiteBalanceLowLightAmbientBiasesStrong);
        final float lowLightAmbientColorTemperature = getFloat(resources,
                com.android.internal.R.dimen
                .config_displayWhiteBalanceLowLightAmbientColorTemperature);
        final float lowLightAmbientColorTemperatureStrong = getFloat(resources,
                com.android.internal.R.dimen
                .config_displayWhiteBalanceLowLightAmbientColorTemperatureStrong);
        final float[] displayWhiteBalanceHighLightAmbientBrightnesses = getFloatArray(resources,
                com.android.internal.R.array
                .config_displayWhiteBalanceHighLightAmbientBrightnesses);
        final float[] displayWhiteBalanceHighLightAmbientBrightnessesStrong = getFloatArray(
                resources, com.android.internal.R.array
                .config_displayWhiteBalanceHighLightAmbientBrightnessesStrong);
        final float[] displayWhiteBalanceHighLightAmbientBiases = getFloatArray(resources,
                com.android.internal.R.array
                .config_displayWhiteBalanceHighLightAmbientBiases);
        final float[] displayWhiteBalanceHighLightAmbientBiasesStrong = getFloatArray(resources,
                com.android.internal.R.array
                .config_displayWhiteBalanceHighLightAmbientBiasesStrong);
        final float highLightAmbientColorTemperature = getFloat(resources,
                com.android.internal.R.dimen
                .config_displayWhiteBalanceHighLightAmbientColorTemperature);
        final float highLightAmbientColorTemperatureStrong = getFloat(resources,
                com.android.internal.R.dimen
                .config_displayWhiteBalanceHighLightAmbientColorTemperatureStrong);
        final float[] ambientColorTemperatures = getFloatArray(resources,
                com.android.internal.R.array.config_displayWhiteBalanceAmbientColorTemperatures);
        final float[] displayColorTemperatures = getFloatArray(resources,
@@ -100,9 +118,15 @@ public class DisplayWhiteBalanceFactory {
        final DisplayWhiteBalanceController controller = new DisplayWhiteBalanceController(
                brightnessSensor, brightnessFilter, colorTemperatureSensor, colorTemperatureFilter,
                throttler, displayWhiteBalanceLowLightAmbientBrightnesses,
                displayWhiteBalanceLowLightAmbientBiases, lowLightAmbientColorTemperature,
                displayWhiteBalanceLowLightAmbientBrightnessesStrong,
                displayWhiteBalanceLowLightAmbientBiases,
                displayWhiteBalanceLowLightAmbientBiasesStrong, lowLightAmbientColorTemperature,
                lowLightAmbientColorTemperatureStrong,
                displayWhiteBalanceHighLightAmbientBrightnesses,
                displayWhiteBalanceHighLightAmbientBiases, highLightAmbientColorTemperature,
                displayWhiteBalanceHighLightAmbientBrightnessesStrong,
                displayWhiteBalanceHighLightAmbientBiases,
                displayWhiteBalanceHighLightAmbientBiasesStrong, highLightAmbientColorTemperature,
                highLightAmbientColorTemperatureStrong,
                ambientColorTemperatures, displayColorTemperatures, strongAmbientColorTemperatures,
                strongDisplayColorTemperatures, lightModeAllowed);
        brightnessSensor.setCallbacks(controller);
+34 −4

File changed.

Preview size limit exceeded, changes collapsed.