diff options
| author | 2023-08-08 17:01:15 +0000 | |
|---|---|---|
| committer | 2023-08-16 18:28:31 +0000 | |
| commit | dfc22d9975a299d9c29363e88175a6a39bca1c3e (patch) | |
| tree | 3186908521aa9395f103470f32db2dfd7a630e3a | |
| parent | 8b9b6a47031f7ef98a0a68d690c0241ee8bd0ec9 (diff) | |
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
5 files changed, 222 insertions, 12 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 73a1abc10f3c..fe3587ff7a8c 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -5040,6 +5040,21 @@ </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. This array must be in the range of [0.0, 1.0]. --> @@ -5049,12 +5064,28 @@ </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 lookup table used in DisplayWhiteBalanceController. This lookup table is used to map @@ -5068,6 +5099,19 @@ </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. This array must be in the range of [0.0, 1.0]. --> @@ -5075,12 +5119,26 @@ </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 lookup table used in DisplayWhiteBalanceController. This lookup table is used to map diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index b14bf5be6fa1..3ede021b968a 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -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" /> diff --git a/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceController.java b/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceController.java index 4ad26c46d7ed..7ea576d1ed3a 100644 --- a/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceController.java +++ b/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceController.java @@ -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; @@ -214,6 +241,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); } catch (Exception e) { @@ -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; } diff --git a/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceFactory.java b/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceFactory.java index 62f813f2857a..39e6b3f288fb 100644 --- a/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceFactory.java +++ b/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceFactory.java @@ -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); diff --git a/services/tests/displayservicetests/src/com/android/server/display/whitebalance/AmbientLuxTest.java b/services/tests/displayservicetests/src/com/android/server/display/whitebalance/AmbientLuxTest.java index f975b6fd1d6f..183a84de0eb0 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/whitebalance/AmbientLuxTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/whitebalance/AmbientLuxTest.java @@ -64,7 +64,9 @@ public final class AmbientLuxTest { private static final int AMBIENT_COLOR_TYPE = 20705; private static final String AMBIENT_COLOR_TYPE_STR = "colorSensoryDensoryDoc"; private static final float LOW_LIGHT_AMBIENT_COLOR_TEMPERATURE = 5432.1f; + private static final float LOW_LIGHT_AMBIENT_COLOR_TEMPERATURE_STRONG = 5555.5f; private static final float HIGH_LIGHT_AMBIENT_COLOR_TEMPERATURE = 3456.7f; + private static final float HIGH_LIGHT_AMBIENT_COLOR_TEMPERATURE_STRONG = 3333.3f; private Handler mHandler = new Handler(Looper.getMainLooper()); private Sensor mLightSensor; @@ -78,6 +80,10 @@ public final class AmbientLuxTest { @Mock private TypedArray mBiases; @Mock private TypedArray mHighLightBrightnesses; @Mock private TypedArray mHighLightBiases; + @Mock private TypedArray mBrightnessesStrong; + @Mock private TypedArray mBiasesStrong; + @Mock private TypedArray mHighLightBrightnessesStrong; + @Mock private TypedArray mHighLightBiasesStrong; @Mock private TypedArray mAmbientColorTemperatures; @Mock private TypedArray mDisplayColorTemperatures; @Mock private TypedArray mStrongAmbientColorTemperatures; @@ -108,6 +114,10 @@ public final class AmbientLuxTest { LOW_LIGHT_AMBIENT_COLOR_TEMPERATURE); mockResourcesFloat(R.dimen.config_displayWhiteBalanceHighLightAmbientColorTemperature, HIGH_LIGHT_AMBIENT_COLOR_TEMPERATURE); + mockResourcesFloat(R.dimen.config_displayWhiteBalanceLowLightAmbientColorTemperatureStrong, + LOW_LIGHT_AMBIENT_COLOR_TEMPERATURE_STRONG); + mockResourcesFloat(R.dimen.config_displayWhiteBalanceHighLightAmbientColorTemperatureStrong, + HIGH_LIGHT_AMBIENT_COLOR_TEMPERATURE_STRONG); when(mResourcesSpy.obtainTypedArray( R.array.config_displayWhiteBalanceAmbientColorTemperatures)) .thenReturn(mAmbientColorTemperatures); @@ -133,6 +143,18 @@ public final class AmbientLuxTest { when(mResourcesSpy.obtainTypedArray( R.array.config_displayWhiteBalanceHighLightAmbientBiases)) .thenReturn(mHighLightBiases); + when(mResourcesSpy.obtainTypedArray( + R.array.config_displayWhiteBalanceLowLightAmbientBrightnessesStrong)) + .thenReturn(mBrightnessesStrong); + when(mResourcesSpy.obtainTypedArray( + R.array.config_displayWhiteBalanceLowLightAmbientBiasesStrong)) + .thenReturn(mBiasesStrong); + when(mResourcesSpy.obtainTypedArray( + R.array.config_displayWhiteBalanceHighLightAmbientBrightnessesStrong)) + .thenReturn(mHighLightBrightnessesStrong); + when(mResourcesSpy.obtainTypedArray( + R.array.config_displayWhiteBalanceHighLightAmbientBiasesStrong)) + .thenReturn(mHighLightBiasesStrong); mockThrottler(); LocalServices.removeServiceForTest(ColorDisplayService.ColorDisplayServiceInternal.class); LocalServices.addService(ColorDisplayService.ColorDisplayServiceInternal.class, @@ -388,8 +410,8 @@ public final class AmbientLuxTest { public void testStrongMode() { final float lowerBrightness = 10.0f; final float upperBrightness = 50.0f; - setBrightnesses(lowerBrightness, upperBrightness); - setBiases(0.0f, 1.0f); + setBrightnessesStrong(lowerBrightness, upperBrightness); + setBiasesStrong(0.0f, 1.0f); final int ambientColorTempLow = 6000; final int ambientColorTempHigh = 8000; final int displayColorTempLow = 6400; @@ -413,7 +435,7 @@ public final class AmbientLuxTest { setEstimatedBrightnessAndUpdate(controller, mix(lowerBrightness, upperBrightness, brightnessFraction)); assertEquals(controller.mPendingAmbientColorTemperature, - mix(LOW_LIGHT_AMBIENT_COLOR_TEMPERATURE, + mix(LOW_LIGHT_AMBIENT_COLOR_TEMPERATURE_STRONG, mix(displayColorTempLow, displayColorTempHigh, ambientTempFraction), brightnessFraction), ALLOWED_ERROR_DELTA); @@ -458,7 +480,7 @@ public final class AmbientLuxTest { assertEquals(-1.0f, controller.mPendingAmbientColorTemperature, 0); } - void mockThrottler() { + private void mockThrottler() { when(mResourcesSpy.getInteger( R.integer.config_displayWhiteBalanceDecreaseDebounce)).thenReturn(0); when(mResourcesSpy.getInteger( @@ -513,10 +535,18 @@ public final class AmbientLuxTest { setFloatArrayResource(mBrightnesses, vals); } + private void setBrightnessesStrong(float... vals) { + setFloatArrayResource(mBrightnessesStrong, vals); + } + private void setBiases(float... vals) { setFloatArrayResource(mBiases, vals); } + private void setBiasesStrong(float... vals) { + setFloatArrayResource(mBiasesStrong, vals); + } + private void setHighLightBrightnesses(float... vals) { setFloatArrayResource(mHighLightBrightnesses, vals); } |