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

Commit 06d0c27a authored by Fiona Campbell's avatar Fiona Campbell
Browse files

Simplify BrightnessSynchronizer

Using the 0.0-1.0 scale for these operations is equivalent to using a constrained scale.
Therefore using the hardcoded PowerManager values is more efficient.
The context parameter has also been removed from these methods since this is no longer necessary to get stored PowerManager values.

Bug: 162398030

Test: manual - test with different brightness constraints.

Change-Id: Ie18e73b6f1b3effdbaf7e35eab14d51034442d07
parent 2d727a0c
Loading
Loading
Loading
Loading
+18 −52
Original line number Diff line number Diff line
@@ -83,63 +83,25 @@ public class BrightnessSynchronizer{
    /**
     * Converts between the int brightness system and the float brightness system.
     */
    public static float brightnessIntToFloat(Context context, int brightnessInt) {
        final PowerManager pm = context.getSystemService(PowerManager.class);
        final float pmMinBrightness = pm.getBrightnessConstraint(
                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM);
        final float pmMaxBrightness = pm.getBrightnessConstraint(
                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM);
        final int minBrightnessInt = Math.round(brightnessFloatToIntRange(pmMinBrightness,
                PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX,
                PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON));
        final int maxBrightnessInt = Math.round(brightnessFloatToIntRange(pmMaxBrightness,
                PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX,
                PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON));

        return brightnessIntToFloat(brightnessInt, minBrightnessInt, maxBrightnessInt,
                pmMinBrightness, pmMaxBrightness);
    }

    /**
     * Converts between the int brightness system and the float brightness system.
     */
    public static float brightnessIntToFloat(int brightnessInt, int minInt, int maxInt,
            float minFloat, float maxFloat) {
    public static float brightnessIntToFloat(int brightnessInt) {
        if (brightnessInt == PowerManager.BRIGHTNESS_OFF) {
            return PowerManager.BRIGHTNESS_OFF_FLOAT;
        } else if (brightnessInt == PowerManager.BRIGHTNESS_INVALID) {
            return PowerManager.BRIGHTNESS_INVALID_FLOAT;
        } else {
            return MathUtils.constrainedMap(minFloat, maxFloat, (float) minInt, (float) maxInt,
                    brightnessInt);
            final float minFloat = PowerManager.BRIGHTNESS_MIN;
            final float maxFloat = PowerManager.BRIGHTNESS_MAX;
            final float minInt = PowerManager.BRIGHTNESS_OFF + 1;
            final float maxInt = PowerManager.BRIGHTNESS_ON;
            return MathUtils.constrainedMap(minFloat, maxFloat, minInt, maxInt, brightnessInt);
        }
    }

    /**
     * Converts between the float brightness system and the int brightness system.
     */
    public static int brightnessFloatToInt(Context context, float brightnessFloat) {
        return Math.round(brightnessFloatToIntRange(context, brightnessFloat));
    }

    /**
     * Converts between the float brightness system and the int brightness system, but returns
     * the converted value as a float within the int-system's range. This method helps with
     * conversions from one system to the other without losing the floating-point precision.
     */
    public static float brightnessFloatToIntRange(Context context, float brightnessFloat) {
        final PowerManager pm = context.getSystemService(PowerManager.class);
        final float minFloat = pm.getBrightnessConstraint(
                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM);
        final float maxFloat = pm.getBrightnessConstraint(
                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM);
        final float minInt = brightnessFloatToIntRange(minFloat,
                PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX,
                PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON);
        final float maxInt = brightnessFloatToIntRange(maxFloat,
                PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX,
                PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON);
        return brightnessFloatToIntRange(brightnessFloat, minFloat, maxFloat, minInt, maxInt);
    public static int brightnessFloatToInt(float brightnessFloat) {
        return Math.round(brightnessFloatToIntRange(brightnessFloat));
    }

    /**
@@ -148,20 +110,24 @@ public class BrightnessSynchronizer{
     * Value returned as a float privimite (to preserve precision), but is a value within the
     * int-system range.
     */
    private static float brightnessFloatToIntRange(float brightnessFloat, float minFloat,
            float maxFloat, float minInt, float maxInt) {
    public static float brightnessFloatToIntRange(float brightnessFloat) {
        if (floatEquals(brightnessFloat, PowerManager.BRIGHTNESS_OFF_FLOAT)) {
            return PowerManager.BRIGHTNESS_OFF;
        } else if (Float.isNaN(brightnessFloat)) {
            return PowerManager.BRIGHTNESS_INVALID;
        } else {
            final float minFloat = PowerManager.BRIGHTNESS_MIN;
            final float maxFloat = PowerManager.BRIGHTNESS_MAX;
            final float minInt = PowerManager.BRIGHTNESS_OFF + 1;
            final float maxInt = PowerManager.BRIGHTNESS_ON;
            return MathUtils.constrainedMap(minInt, maxInt, minFloat, maxFloat, brightnessFloat);
        }
    }

    private static float getScreenBrightnessFloat(Context context) {
        return Settings.System.getFloatForUser(context.getContentResolver(),
                Settings.System.SCREEN_BRIGHTNESS_FLOAT, Float.NaN, UserHandle.USER_CURRENT);
                Settings.System.SCREEN_BRIGHTNESS_FLOAT, PowerManager.BRIGHTNESS_INVALID_FLOAT,
                UserHandle.USER_CURRENT);
    }

    private static int getScreenBrightnessInt(Context context) {
@@ -185,10 +151,10 @@ public class BrightnessSynchronizer{
        if (topOfQueue != null && topOfQueue.equals(value)) {
            mWriteHistory.poll();
        } else {
            if (brightnessFloatToInt(mContext, mPreferredSettingValue) == value) {
            if (brightnessFloatToInt(mPreferredSettingValue) == value) {
                return;
            }
            float newBrightnessFloat = brightnessIntToFloat(mContext, value);
            float newBrightnessFloat = brightnessIntToFloat(value);
            mWriteHistory.offer(newBrightnessFloat);
            mPreferredSettingValue = newBrightnessFloat;
            Settings.System.putFloatForUser(mContext.getContentResolver(),
@@ -207,7 +173,7 @@ public class BrightnessSynchronizer{
     * @param value Brightness setting as float to store in int setting.
     */
    private void updateBrightnessIntFromFloat(float value) {
        int newBrightnessInt = brightnessFloatToInt(mContext, value);
        int newBrightnessInt = brightnessFloatToInt(value);
        Object topOfQueue = mWriteHistory.peek();
        if (topOfQueue != null && topOfQueue.equals(value)) {
            mWriteHistory.poll();
+1 −1
Original line number Diff line number Diff line
@@ -385,7 +385,7 @@ public class BrightnessController implements ToggleSlider.Listener {
        if (stopTracking) {
            // TODO(brightnessfloat): change to use float value instead.
            MetricsLogger.action(mContext, metric,
                    BrightnessSynchronizer.brightnessFloatToInt(mContext, valFloat));
                    BrightnessSynchronizer.brightnessFloatToInt(valFloat));

        }
        setBrightness(valFloat);
+1 −3
Original line number Diff line number Diff line
@@ -349,9 +349,7 @@ public abstract class BrightnessMappingStrategy {

    // Normalize entire brightness range to 0 - 1.
    protected static float normalizeAbsoluteBrightness(int brightness) {
        return BrightnessSynchronizer.brightnessIntToFloat(brightness,
                PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON,
                PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX);
        return BrightnessSynchronizer.brightnessIntToFloat(brightness);
    }

    private Pair<float[], float[]> insertControlPoint(
+4 −5
Original line number Diff line number Diff line
@@ -699,13 +699,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        // Initialize screen state for battery stats.
        try {
            mBatteryStats.noteScreenState(mPowerState.getScreenState());
            mBatteryStats.noteScreenBrightness(BrightnessSynchronizer.brightnessFloatToInt(mContext,
            mBatteryStats.noteScreenBrightness(BrightnessSynchronizer.brightnessFloatToInt(
                    mPowerState.getScreenBrightness()));
        } catch (RemoteException ex) {
            // same process
        }
        // Initialize all of the brightness tracking state
        final float brightness = convertToNits(BrightnessSynchronizer.brightnessFloatToInt(mContext,
        final float brightness = convertToNits(BrightnessSynchronizer.brightnessFloatToInt(
                mPowerState.getScreenBrightness()));
        if (brightness >= 0.0f) {
            mBrightnessTracker.start(brightness);
@@ -1093,7 +1093,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    userInitiatedChange = false;
                }
                notifyBrightnessChanged(
                        BrightnessSynchronizer.brightnessFloatToInt(mContext, brightnessState),
                        BrightnessSynchronizer.brightnessFloatToInt(brightnessState),
                        userInitiatedChange, hadUserBrightnessPoint);
            }

@@ -1341,8 +1341,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
            try {
                // TODO(brightnessfloat): change BatteryStats to use float
                mBatteryStats.noteScreenBrightness(
                        BrightnessSynchronizer.brightnessFloatToInt(
                        mContext, target));
                        BrightnessSynchronizer.brightnessFloatToInt(target));
            } catch (RemoteException ex) {
                // same process
            }
+2 −4
Original line number Diff line number Diff line
@@ -718,16 +718,14 @@ final class LocalDisplayAdapter extends DisplayAdapter {
                        try {
                            if (isHalBrightnessRangeSpecified()) {
                                brightness = displayBrightnessToHalBrightness(
                                        BrightnessSynchronizer.brightnessFloatToIntRange(
                                                getContext(), brightness));
                                        BrightnessSynchronizer.brightnessFloatToIntRange(brightness));
                            }
                            if (mBacklight != null) {
                                mBacklight.setBrightness(brightness);
                            }
                            Trace.traceCounter(Trace.TRACE_TAG_POWER,
                                    "ScreenBrightness",
                                    BrightnessSynchronizer.brightnessFloatToInt(
                                            getContext(), brightness));
                                    BrightnessSynchronizer.brightnessFloatToInt(brightness));
                        } finally {
                            Trace.traceEnd(Trace.TRACE_TAG_POWER);
                        }
Loading