Make DWB light mode availability configurable
Bug: 231642251 Test: builds, no adverse effects Change-Id: I81dd8120c85a64bd2ea8ad8a062c4ab21bea271e
This commit is contained in:
@@ -932,6 +932,8 @@
|
||||
<!-- Nominal White Z --> <item>1.089058</item>
|
||||
</string-array>
|
||||
|
||||
<!-- Boolean indicating whether light mode is allowed when DWB is turned on. -->
|
||||
<bool name="config_displayWhiteBalanceLightModeAllowed">true</bool>
|
||||
|
||||
<!-- Indicate available ColorDisplayManager.COLOR_MODE_xxx. -->
|
||||
<integer-array name="config_availableColorModes">
|
||||
|
||||
@@ -3415,6 +3415,7 @@
|
||||
<java-symbol type="integer" name="config_displayWhiteBalanceColorTemperatureDefault" />
|
||||
<java-symbol type="array" name="config_displayWhiteBalanceDisplayPrimaries" />
|
||||
<java-symbol type="array" name="config_displayWhiteBalanceDisplayNominalWhite" />
|
||||
<java-symbol type="bool" name="config_displayWhiteBalanceLightModeAllowed" />
|
||||
|
||||
<!-- Default first user restrictions -->
|
||||
<java-symbol type="array" name="config_defaultFirstUserRestrictions" />
|
||||
|
||||
@@ -740,7 +740,8 @@ public final class ColorDisplayService extends SystemService {
|
||||
mDisplayWhiteBalanceTintController.setActivated(isDisplayWhiteBalanceSettingEnabled()
|
||||
&& !mNightDisplayTintController.isActivated()
|
||||
&& !isAccessibilityEnabled()
|
||||
&& dtm.needsLinearColorMatrix());
|
||||
&& dtm.needsLinearColorMatrix()
|
||||
&& mDisplayWhiteBalanceTintController.isAllowed());
|
||||
boolean activated = mDisplayWhiteBalanceTintController.isActivated();
|
||||
|
||||
if (mDisplayWhiteBalanceListener != null && oldActivated != activated) {
|
||||
@@ -1453,6 +1454,12 @@ public final class ColorDisplayService extends SystemService {
|
||||
*/
|
||||
public class ColorDisplayServiceInternal {
|
||||
|
||||
/** Sets whether DWB should be allowed in the current state. */
|
||||
public void setDisplayWhiteBalanceAllowed(boolean allowed) {
|
||||
mDisplayWhiteBalanceTintController.setAllowed(allowed);
|
||||
updateDisplayWhiteBalanceStatus();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the current CCT value for the display white balance transform, and if the transform
|
||||
* is enabled, apply it.
|
||||
|
||||
@@ -61,12 +61,17 @@ final class DisplayWhiteBalanceTintController extends TintController {
|
||||
boolean mSetUp = false;
|
||||
private float[] mMatrixDisplayWhiteBalance = new float[16];
|
||||
private Boolean mIsAvailable;
|
||||
// This feature becomes disallowed if the device is in an unsupported strong/light state.
|
||||
private boolean mIsAllowed = true;
|
||||
|
||||
@Override
|
||||
public void setUp(Context context, boolean needsLinear) {
|
||||
mSetUp = false;
|
||||
final Resources res = context.getResources();
|
||||
|
||||
// Initialize with the config value for light mode, so it starts in the right state.
|
||||
setAllowed(res.getBoolean(R.bool.config_displayWhiteBalanceLightModeAllowed));
|
||||
|
||||
ColorSpace.Rgb displayColorSpaceRGB = getDisplayColorSpaceFromSurfaceControl();
|
||||
if (displayColorSpaceRGB == null) {
|
||||
Slog.w(ColorDisplayService.TAG,
|
||||
@@ -248,6 +253,7 @@ final class DisplayWhiteBalanceTintController extends TintController {
|
||||
+ matrixToString(mDisplayColorSpaceRGB.getInverseTransform(), 3));
|
||||
pw.println(" mMatrixDisplayWhiteBalance = "
|
||||
+ matrixToString(mMatrixDisplayWhiteBalance, 4));
|
||||
pw.println(" mIsAllowed = " + mIsAllowed);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,6 +269,14 @@ final class DisplayWhiteBalanceTintController extends TintController {
|
||||
}
|
||||
}
|
||||
|
||||
public void setAllowed(boolean allowed) {
|
||||
mIsAllowed = allowed;
|
||||
}
|
||||
|
||||
public boolean isAllowed() {
|
||||
return mIsAllowed;
|
||||
}
|
||||
|
||||
private ColorSpace.Rgb makeRgbColorSpaceFromXYZ(float[] redGreenBlueXYZ, float[] whiteXYZ) {
|
||||
return new ColorSpace.Rgb(
|
||||
"Display Color Space",
|
||||
|
||||
@@ -65,6 +65,8 @@ public class DisplayWhiteBalanceController implements
|
||||
// this effect.
|
||||
private final float mHighLightAmbientColorTemperature;
|
||||
|
||||
private final boolean mLightModeAllowed;
|
||||
|
||||
private float mAmbientColorTemperature;
|
||||
@VisibleForTesting
|
||||
float mPendingAmbientColorTemperature;
|
||||
@@ -148,6 +150,8 @@ public class DisplayWhiteBalanceController implements
|
||||
* @param displayColorTemperatures
|
||||
* The display color temperatures used to map the ambient color temperature to the display
|
||||
* color temperature (or null if no mapping is necessary).
|
||||
* @param lightModeAllowed
|
||||
* Whether a lighter version should be applied when Strong Mode is not enabled.
|
||||
*
|
||||
* @throws NullPointerException
|
||||
* - brightnessSensor is null;
|
||||
@@ -171,7 +175,8 @@ public class DisplayWhiteBalanceController implements
|
||||
float[] ambientColorTemperatures,
|
||||
float[] displayColorTemperatures,
|
||||
float[] strongAmbientColorTemperatures,
|
||||
float[] strongDisplayColorTemperatures) {
|
||||
float[] strongDisplayColorTemperatures,
|
||||
boolean lightModeAllowed) {
|
||||
validateArguments(brightnessSensor, brightnessFilter, colorTemperatureSensor,
|
||||
colorTemperatureFilter, throttler);
|
||||
mBrightnessSensor = brightnessSensor;
|
||||
@@ -186,6 +191,7 @@ public class DisplayWhiteBalanceController implements
|
||||
mLastAmbientColorTemperature = -1.0f;
|
||||
mAmbientColorTemperatureHistory = new History(/* size= */ 50);
|
||||
mAmbientColorTemperatureOverride = -1.0f;
|
||||
mLightModeAllowed = lightModeAllowed;
|
||||
|
||||
try {
|
||||
mLowLightAmbientBrightnessToBiasSpline = new Spline.LinearSpline(
|
||||
@@ -273,6 +279,8 @@ public class DisplayWhiteBalanceController implements
|
||||
*/
|
||||
public void setStrongModeEnabled(boolean enabled) {
|
||||
mStrongModeEnabled = enabled;
|
||||
mColorDisplayServiceInternal.setDisplayWhiteBalanceAllowed(mLightModeAllowed
|
||||
|| mStrongModeEnabled);
|
||||
if (mEnabled) {
|
||||
updateAmbientColorTemperature();
|
||||
updateDisplayColorTemperature();
|
||||
|
||||
@@ -95,6 +95,8 @@ public class DisplayWhiteBalanceFactory {
|
||||
final float[] strongDisplayColorTemperatures = getFloatArray(resources,
|
||||
com.android.internal.R.array
|
||||
.config_displayWhiteBalanceStrongDisplayColorTemperatures);
|
||||
final boolean lightModeAllowed = resources.getBoolean(
|
||||
com.android.internal.R.bool.config_displayWhiteBalanceLightModeAllowed);
|
||||
final DisplayWhiteBalanceController controller = new DisplayWhiteBalanceController(
|
||||
brightnessSensor, brightnessFilter, colorTemperatureSensor, colorTemperatureFilter,
|
||||
throttler, displayWhiteBalanceLowLightAmbientBrightnesses,
|
||||
@@ -102,7 +104,7 @@ public class DisplayWhiteBalanceFactory {
|
||||
displayWhiteBalanceHighLightAmbientBrightnesses,
|
||||
displayWhiteBalanceHighLightAmbientBiases, highLightAmbientColorTemperature,
|
||||
ambientColorTemperatures, displayColorTemperatures, strongAmbientColorTemperatures,
|
||||
strongDisplayColorTemperatures);
|
||||
strongDisplayColorTemperatures, lightModeAllowed);
|
||||
brightnessSensor.setCallbacks(controller);
|
||||
colorTemperatureSensor.setCallbacks(controller);
|
||||
return controller;
|
||||
|
||||
Reference in New Issue
Block a user