summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Fiona Campbell <flc@google.com> 2023-08-08 17:01:15 +0000
committer Fiona Campbell <flc@google.com> 2023-08-16 18:28:31 +0000
commitdfc22d9975a299d9c29363e88175a6a39bca1c3e (patch)
tree3186908521aa9395f103470f32db2dfd7a630e3a
parent8b9b6a47031f7ef98a0a68d690c0241ee8bd0ec9 (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
-rw-r--r--core/res/res/values/config.xml58
-rw-r--r--core/res/res/values/symbols.xml6
-rw-r--r--services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceController.java104
-rw-r--r--services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceFactory.java28
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/whitebalance/AmbientLuxTest.java38
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);
}