Merge "Making the config_screenThresholdLevels a float array to fix the issue where it was always greater than all possible brightness values" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
c6fc1d9819
@@ -1662,13 +1662,18 @@
|
||||
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
|
||||
level[n] <= value < level[n+1] n+1
|
||||
level[MAX] <= value MAX+1 -->
|
||||
<integer-array name="config_screenThresholdLevels">
|
||||
</integer-array>
|
||||
<array name="config_screenThresholdLevels">
|
||||
</array>
|
||||
|
||||
<!-- Array of hysteresis constraint values for brightening, represented as tenths of a
|
||||
percent. The length of this array is assumed to be one greater than
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -36,8 +36,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.
|
||||
@@ -58,6 +57,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.
|
||||
*/
|
||||
@@ -104,11 +125,42 @@ public class HysteresisLevels {
|
||||
private float[] setArrayFormat(int[] configArray, float divideFactor) {
|
||||
float[] levelArray = new float[configArray.length];
|
||||
for (int index = 0; levelArray.length > index; ++index) {
|
||||
levelArray[index] = (float)configArray[index] / divideFactor;
|
||||
levelArray[index] = (float) configArray[index] / divideFactor;
|
||||
}
|
||||
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));
|
||||
|
||||
Reference in New Issue
Block a user