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

Commit fdc5610e authored by Rupesh Bansal's avatar Rupesh Bansal Committed by Gerrit Code Review
Browse files

Merge "Making the config_screenThresholdLevels a float array to fix the issue...

Merge "Making the config_screenThresholdLevels a float array to fix the issue where it was always greater than all possible brightness values"
parents 270337f9 54a69e7a
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1649,6 +1649,11 @@
         darkening hysteresis constraint value is the n-th element of
         config_screenDarkeningThresholds.

         Historically, it has been assumed that this will be an integer array with values in the
         range of [0, 255]. However, it is now assumed to be a float array with values in the
         range of [0, 1]. To accommodate both the possibilities, we internally check the scale on
         which the thresholds are defined, and calibrate it accordingly.

         The (zero-based) index is calculated as follows: (MAX is the largest index of the array)
         condition                       calculated index
         value < level[0]                0
+2 −2
Original line number Diff line number Diff line
@@ -975,8 +975,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    com.android.internal.R.array.config_screenBrighteningThresholds);
            int[] screenDarkeningThresholds = resources.getIntArray(
                    com.android.internal.R.array.config_screenDarkeningThresholds);
            int[] screenThresholdLevels = resources.getIntArray(
                    com.android.internal.R.array.config_screenThresholdLevels);
            float[] screenThresholdLevels = BrightnessMappingStrategy.getFloatArray(resources
                    .obtainTypedArray(com.android.internal.R.array.config_screenThresholdLevels));
            float screenDarkeningMinThreshold =
                    mDisplayDeviceConfig.getScreenDarkeningMinThreshold();
            float screenBrighteningMinThreshold =
+55 −3
Original line number Diff line number Diff line
@@ -39,8 +39,7 @@ public class HysteresisLevels {
    private final float mMinBrightening;

    /**
     * Creates a {@code HysteresisLevels} object with the given equal-length
     * integer arrays.
     * Creates a {@code HysteresisLevels} object for ambient brightness.
     * @param brighteningThresholds an array of brightening hysteresis constraint constants.
     * @param darkeningThresholds an array of darkening hysteresis constraint constants.
     * @param thresholdLevels a monotonically increasing array of threshold levels.
@@ -61,6 +60,28 @@ public class HysteresisLevels {
        mMinBrightening = minBrighteningThreshold;
    }

    /**
     * Creates a {@code HysteresisLevels} object for screen brightness.
     * @param brighteningThresholds an array of brightening hysteresis constraint constants.
     * @param darkeningThresholds an array of darkening hysteresis constraint constants.
     * @param thresholdLevels a monotonically increasing array of threshold levels.
     * @param minBrighteningThreshold the minimum value for which the brightening value needs to
     *                                return.
     * @param minDarkeningThreshold the minimum value for which the darkening value needs to return.
     */
    HysteresisLevels(int[] brighteningThresholds, int[] darkeningThresholds,
            float[] thresholdLevels, float minDarkeningThreshold, float minBrighteningThreshold) {
        if (brighteningThresholds.length != darkeningThresholds.length
                || darkeningThresholds.length != thresholdLevels.length + 1) {
            throw new IllegalArgumentException("Mismatch between hysteresis array lengths.");
        }
        mBrighteningThresholds = setArrayFormat(brighteningThresholds, 1000.0f);
        mDarkeningThresholds = setArrayFormat(darkeningThresholds, 1000.0f);
        mThresholdLevels = constraintInRangeIfNeeded(thresholdLevels);
        mMinDarkening = minDarkeningThreshold;
        mMinBrightening = minBrighteningThreshold;
    }

    /**
     * Return the brightening hysteresis threshold for the given value level.
     */
@@ -112,6 +133,37 @@ public class HysteresisLevels {
        return levelArray;
    }

    /**
     * This check is due to historical reasons, where screen thresholdLevels used to be
     * integer values in the range of [0-255], but then was changed to be float values from [0,1].
     * To accommodate both the possibilities, we first check if all the thresholdLevels are in [0,
     * 1], and if not, we divide all the levels with 255 to bring them down to the same scale.
     */
    private float[] constraintInRangeIfNeeded(float[] thresholdLevels) {
        if (isAllInRange(thresholdLevels, /* minValueInclusive = */ 0.0f, /* maxValueInclusive = */
                1.0f)) {
            return thresholdLevels;
        }

        Slog.w(TAG, "Detected screen thresholdLevels on a deprecated brightness scale");
        float[] thresholdLevelsScaled = new float[thresholdLevels.length];
        for (int index = 0; thresholdLevels.length > index; ++index) {
            thresholdLevelsScaled[index] = thresholdLevels[index] / 255.0f;
        }
        return thresholdLevelsScaled;
    }

    private boolean isAllInRange(float[] configArray, float minValueInclusive,
                                 float maxValueInclusive) {
        int configArraySize = configArray.length;
        for (int index = 0; configArraySize > index; ++index) {
            if (configArray[index] < minValueInclusive || configArray[index] > maxValueInclusive) {
                return false;
            }
        }
        return true;
    }

    void dump(PrintWriter pw) {
        pw.println("HysteresisLevels");
        pw.println("  mBrighteningThresholds=" + Arrays.toString(mBrighteningThresholds));