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

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

Merge "Add strong mode color temp configs" into main

parents 21ea08d1 dfc22d99
Loading
Loading
Loading
Loading
+58 −0
Original line number Diff line number Diff line
@@ -5040,6 +5040,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.
@@ -5049,12 +5064,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
@@ -5068,6 +5099,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.
@@ -5075,12 +5119,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
@@ -4173,11 +4173,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.