Merge "Make DWB light mode availability configurable" into tm-qpr-dev

This commit is contained in:
Christine Franks
2022-09-01 15:54:20 +00:00
committed by Android (Google) Code Review
6 changed files with 37 additions and 3 deletions

View File

@@ -935,6 +935,8 @@
<!-- Nominal White Z --> <item>1.089058</item> <!-- Nominal White Z --> <item>1.089058</item>
</string-array> </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. --> <!-- Indicate available ColorDisplayManager.COLOR_MODE_xxx. -->
<integer-array name="config_availableColorModes"> <integer-array name="config_availableColorModes">

View File

@@ -3418,6 +3418,7 @@
<java-symbol type="integer" name="config_displayWhiteBalanceColorTemperatureDefault" /> <java-symbol type="integer" name="config_displayWhiteBalanceColorTemperatureDefault" />
<java-symbol type="array" name="config_displayWhiteBalanceDisplayPrimaries" /> <java-symbol type="array" name="config_displayWhiteBalanceDisplayPrimaries" />
<java-symbol type="array" name="config_displayWhiteBalanceDisplayNominalWhite" /> <java-symbol type="array" name="config_displayWhiteBalanceDisplayNominalWhite" />
<java-symbol type="bool" name="config_displayWhiteBalanceLightModeAllowed" />
<!-- Default first user restrictions --> <!-- Default first user restrictions -->
<java-symbol type="array" name="config_defaultFirstUserRestrictions" /> <java-symbol type="array" name="config_defaultFirstUserRestrictions" />

View File

@@ -740,7 +740,8 @@ public final class ColorDisplayService extends SystemService {
mDisplayWhiteBalanceTintController.setActivated(isDisplayWhiteBalanceSettingEnabled() mDisplayWhiteBalanceTintController.setActivated(isDisplayWhiteBalanceSettingEnabled()
&& !mNightDisplayTintController.isActivated() && !mNightDisplayTintController.isActivated()
&& !isAccessibilityEnabled() && !isAccessibilityEnabled()
&& dtm.needsLinearColorMatrix()); && dtm.needsLinearColorMatrix()
&& mDisplayWhiteBalanceTintController.isAllowed());
boolean activated = mDisplayWhiteBalanceTintController.isActivated(); boolean activated = mDisplayWhiteBalanceTintController.isActivated();
if (mDisplayWhiteBalanceListener != null && oldActivated != activated) { if (mDisplayWhiteBalanceListener != null && oldActivated != activated) {
@@ -1453,6 +1454,12 @@ public final class ColorDisplayService extends SystemService {
*/ */
public class ColorDisplayServiceInternal { 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 * Set the current CCT value for the display white balance transform, and if the transform
* is enabled, apply it. * is enabled, apply it.

View File

@@ -61,12 +61,17 @@ final class DisplayWhiteBalanceTintController extends TintController {
boolean mSetUp = false; boolean mSetUp = false;
private float[] mMatrixDisplayWhiteBalance = new float[16]; private float[] mMatrixDisplayWhiteBalance = new float[16];
private Boolean mIsAvailable; private Boolean mIsAvailable;
// This feature becomes disallowed if the device is in an unsupported strong/light state.
private boolean mIsAllowed = true;
@Override @Override
public void setUp(Context context, boolean needsLinear) { public void setUp(Context context, boolean needsLinear) {
mSetUp = false; mSetUp = false;
final Resources res = context.getResources(); 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(); ColorSpace.Rgb displayColorSpaceRGB = getDisplayColorSpaceFromSurfaceControl();
if (displayColorSpaceRGB == null) { if (displayColorSpaceRGB == null) {
Slog.w(ColorDisplayService.TAG, Slog.w(ColorDisplayService.TAG,
@@ -248,6 +253,7 @@ final class DisplayWhiteBalanceTintController extends TintController {
+ matrixToString(mDisplayColorSpaceRGB.getInverseTransform(), 3)); + matrixToString(mDisplayColorSpaceRGB.getInverseTransform(), 3));
pw.println(" mMatrixDisplayWhiteBalance = " pw.println(" mMatrixDisplayWhiteBalance = "
+ matrixToString(mMatrixDisplayWhiteBalance, 4)); + 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) { private ColorSpace.Rgb makeRgbColorSpaceFromXYZ(float[] redGreenBlueXYZ, float[] whiteXYZ) {
return new ColorSpace.Rgb( return new ColorSpace.Rgb(
"Display Color Space", "Display Color Space",

View File

@@ -65,6 +65,8 @@ public class DisplayWhiteBalanceController implements
// this effect. // this effect.
private final float mHighLightAmbientColorTemperature; private final float mHighLightAmbientColorTemperature;
private final boolean mLightModeAllowed;
private float mAmbientColorTemperature; private float mAmbientColorTemperature;
@VisibleForTesting @VisibleForTesting
float mPendingAmbientColorTemperature; float mPendingAmbientColorTemperature;
@@ -148,6 +150,8 @@ public class DisplayWhiteBalanceController implements
* @param displayColorTemperatures * @param displayColorTemperatures
* The display color temperatures used to map the ambient color temperature to the display * The display color temperatures used to map the ambient color temperature to the display
* color temperature (or null if no mapping is necessary). * 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 * @throws NullPointerException
* - brightnessSensor is null; * - brightnessSensor is null;
@@ -171,7 +175,8 @@ public class DisplayWhiteBalanceController implements
float[] ambientColorTemperatures, float[] ambientColorTemperatures,
float[] displayColorTemperatures, float[] displayColorTemperatures,
float[] strongAmbientColorTemperatures, float[] strongAmbientColorTemperatures,
float[] strongDisplayColorTemperatures) { float[] strongDisplayColorTemperatures,
boolean lightModeAllowed) {
validateArguments(brightnessSensor, brightnessFilter, colorTemperatureSensor, validateArguments(brightnessSensor, brightnessFilter, colorTemperatureSensor,
colorTemperatureFilter, throttler); colorTemperatureFilter, throttler);
mBrightnessSensor = brightnessSensor; mBrightnessSensor = brightnessSensor;
@@ -186,6 +191,7 @@ public class DisplayWhiteBalanceController implements
mLastAmbientColorTemperature = -1.0f; mLastAmbientColorTemperature = -1.0f;
mAmbientColorTemperatureHistory = new History(/* size= */ 50); mAmbientColorTemperatureHistory = new History(/* size= */ 50);
mAmbientColorTemperatureOverride = -1.0f; mAmbientColorTemperatureOverride = -1.0f;
mLightModeAllowed = lightModeAllowed;
try { try {
mLowLightAmbientBrightnessToBiasSpline = new Spline.LinearSpline( mLowLightAmbientBrightnessToBiasSpline = new Spline.LinearSpline(
@@ -273,6 +279,8 @@ public class DisplayWhiteBalanceController implements
*/ */
public void setStrongModeEnabled(boolean enabled) { public void setStrongModeEnabled(boolean enabled) {
mStrongModeEnabled = enabled; mStrongModeEnabled = enabled;
mColorDisplayServiceInternal.setDisplayWhiteBalanceAllowed(mLightModeAllowed
|| mStrongModeEnabled);
if (mEnabled) { if (mEnabled) {
updateAmbientColorTemperature(); updateAmbientColorTemperature();
updateDisplayColorTemperature(); updateDisplayColorTemperature();

View File

@@ -95,6 +95,8 @@ public class DisplayWhiteBalanceFactory {
final float[] strongDisplayColorTemperatures = getFloatArray(resources, final float[] strongDisplayColorTemperatures = getFloatArray(resources,
com.android.internal.R.array com.android.internal.R.array
.config_displayWhiteBalanceStrongDisplayColorTemperatures); .config_displayWhiteBalanceStrongDisplayColorTemperatures);
final boolean lightModeAllowed = resources.getBoolean(
com.android.internal.R.bool.config_displayWhiteBalanceLightModeAllowed);
final DisplayWhiteBalanceController controller = new DisplayWhiteBalanceController( final DisplayWhiteBalanceController controller = new DisplayWhiteBalanceController(
brightnessSensor, brightnessFilter, colorTemperatureSensor, colorTemperatureFilter, brightnessSensor, brightnessFilter, colorTemperatureSensor, colorTemperatureFilter,
throttler, displayWhiteBalanceLowLightAmbientBrightnesses, throttler, displayWhiteBalanceLowLightAmbientBrightnesses,
@@ -102,7 +104,7 @@ public class DisplayWhiteBalanceFactory {
displayWhiteBalanceHighLightAmbientBrightnesses, displayWhiteBalanceHighLightAmbientBrightnesses,
displayWhiteBalanceHighLightAmbientBiases, highLightAmbientColorTemperature, displayWhiteBalanceHighLightAmbientBiases, highLightAmbientColorTemperature,
ambientColorTemperatures, displayColorTemperatures, strongAmbientColorTemperatures, ambientColorTemperatures, displayColorTemperatures, strongAmbientColorTemperatures,
strongDisplayColorTemperatures); strongDisplayColorTemperatures, lightModeAllowed);
brightnessSensor.setCallbacks(controller); brightnessSensor.setCallbacks(controller);
colorTemperatureSensor.setCallbacks(controller); colorTemperatureSensor.setCallbacks(controller);
return controller; return controller;