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

Commit c76d8175 authored by Christine Franks's avatar Christine Franks
Browse files

Make DWB light mode availability configurable

Bug: 231642251
Test: builds, no adverse effects
Change-Id: I81dd8120c85a64bd2ea8ad8a062c4ab21bea271e
parent bc18e296
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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">
+1 −0
Original line number Diff line number Diff line
@@ -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" />
+8 −1
Original line number Diff line number Diff line
@@ -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.
+14 −0
Original line number Diff line number Diff line
@@ -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",
+9 −1
Original line number Diff line number Diff line
@@ -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();
Loading