Merge "Reload DPC values when display device changes" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
52a33adf57
@@ -365,7 +365,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private final ColorDisplayServiceInternal mCdsi;
|
private final ColorDisplayServiceInternal mCdsi;
|
||||||
private final float[] mNitsRange;
|
private float[] mNitsRange;
|
||||||
|
|
||||||
private final HighBrightnessModeController mHbmController;
|
private final HighBrightnessModeController mHbmController;
|
||||||
|
|
||||||
@@ -447,6 +447,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
|||||||
mLogicalDisplay = logicalDisplay;
|
mLogicalDisplay = logicalDisplay;
|
||||||
mDisplayId = mLogicalDisplay.getDisplayIdLocked();
|
mDisplayId = mLogicalDisplay.getDisplayIdLocked();
|
||||||
mDisplayDevice = mLogicalDisplay.getPrimaryDisplayDeviceLocked();
|
mDisplayDevice = mLogicalDisplay.getPrimaryDisplayDeviceLocked();
|
||||||
|
mUniqueDisplayId = logicalDisplay.getPrimaryDisplayDeviceLocked().getUniqueId();
|
||||||
mHandler = new DisplayControllerHandler(handler.getLooper());
|
mHandler = new DisplayControllerHandler(handler.getLooper());
|
||||||
|
|
||||||
if (mDisplayId == Display.DEFAULT_DISPLAY) {
|
if (mDisplayId == Display.DEFAULT_DISPLAY) {
|
||||||
@@ -462,6 +463,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
|||||||
mBlanker = blanker;
|
mBlanker = blanker;
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mBrightnessTracker = brightnessTracker;
|
mBrightnessTracker = brightnessTracker;
|
||||||
|
// TODO: b/186428377 update brightness setting when display changes
|
||||||
mBrightnessSetting = brightnessSetting;
|
mBrightnessSetting = brightnessSetting;
|
||||||
mOnBrightnessChangeRunnable = onBrightnessChangeRunnable;
|
mOnBrightnessChangeRunnable = onBrightnessChangeRunnable;
|
||||||
|
|
||||||
@@ -498,13 +500,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
|||||||
mAllowAutoBrightnessWhileDozingConfig = resources.getBoolean(
|
mAllowAutoBrightnessWhileDozingConfig = resources.getBoolean(
|
||||||
com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing);
|
com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing);
|
||||||
|
|
||||||
|
mDisplayDeviceConfig = logicalDisplay.getPrimaryDisplayDeviceLocked()
|
||||||
|
.getDisplayDeviceConfig();
|
||||||
|
|
||||||
mDisplayDeviceConfig = logicalDisplay
|
loadBrightnessRampRates();
|
||||||
.getPrimaryDisplayDeviceLocked().getDisplayDeviceConfig();
|
|
||||||
mBrightnessRampRateFastDecrease = mDisplayDeviceConfig.getBrightnessRampFastDecrease();
|
|
||||||
mBrightnessRampRateFastIncrease = mDisplayDeviceConfig.getBrightnessRampFastIncrease();
|
|
||||||
mBrightnessRampRateSlowDecrease = mDisplayDeviceConfig.getBrightnessRampSlowDecrease();
|
|
||||||
mBrightnessRampRateSlowIncrease = mDisplayDeviceConfig.getBrightnessRampSlowIncrease();
|
|
||||||
mSkipScreenOnBrightnessRamp = resources.getBoolean(
|
mSkipScreenOnBrightnessRamp = resources.getBoolean(
|
||||||
com.android.internal.R.bool.config_skipScreenOnBrightnessRamp);
|
com.android.internal.R.bool.config_skipScreenOnBrightnessRamp);
|
||||||
|
|
||||||
@@ -513,66 +512,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
|||||||
// Seed the cached brightness
|
// Seed the cached brightness
|
||||||
saveBrightnessInfo(getScreenBrightnessSetting());
|
saveBrightnessInfo(getScreenBrightnessSetting());
|
||||||
|
|
||||||
if (mUseSoftwareAutoBrightnessConfig) {
|
setUpAutoBrightness(resources, handler);
|
||||||
final float dozeScaleFactor = resources.getFraction(
|
|
||||||
com.android.internal.R.fraction.config_screenAutoBrightnessDozeScaleFactor,
|
|
||||||
1, 1);
|
|
||||||
|
|
||||||
int[] ambientBrighteningThresholds = resources.getIntArray(
|
|
||||||
com.android.internal.R.array.config_ambientBrighteningThresholds);
|
|
||||||
int[] ambientDarkeningThresholds = resources.getIntArray(
|
|
||||||
com.android.internal.R.array.config_ambientDarkeningThresholds);
|
|
||||||
int[] ambientThresholdLevels = resources.getIntArray(
|
|
||||||
com.android.internal.R.array.config_ambientThresholdLevels);
|
|
||||||
HysteresisLevels ambientBrightnessThresholds = new HysteresisLevels(
|
|
||||||
ambientBrighteningThresholds, ambientDarkeningThresholds,
|
|
||||||
ambientThresholdLevels);
|
|
||||||
|
|
||||||
int[] screenBrighteningThresholds = resources.getIntArray(
|
|
||||||
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);
|
|
||||||
HysteresisLevels screenBrightnessThresholds = new HysteresisLevels(
|
|
||||||
screenBrighteningThresholds, screenDarkeningThresholds, screenThresholdLevels);
|
|
||||||
|
|
||||||
long brighteningLightDebounce = resources.getInteger(
|
|
||||||
com.android.internal.R.integer.config_autoBrightnessBrighteningLightDebounce);
|
|
||||||
long darkeningLightDebounce = resources.getInteger(
|
|
||||||
com.android.internal.R.integer.config_autoBrightnessDarkeningLightDebounce);
|
|
||||||
boolean autoBrightnessResetAmbientLuxAfterWarmUp = resources.getBoolean(
|
|
||||||
com.android.internal.R.bool.config_autoBrightnessResetAmbientLuxAfterWarmUp);
|
|
||||||
|
|
||||||
int lightSensorWarmUpTimeConfig = resources.getInteger(
|
|
||||||
com.android.internal.R.integer.config_lightSensorWarmupTime);
|
|
||||||
int lightSensorRate = resources.getInteger(
|
|
||||||
com.android.internal.R.integer.config_autoBrightnessLightSensorRate);
|
|
||||||
int initialLightSensorRate = resources.getInteger(
|
|
||||||
com.android.internal.R.integer.config_autoBrightnessInitialLightSensorRate);
|
|
||||||
if (initialLightSensorRate == -1) {
|
|
||||||
initialLightSensorRate = lightSensorRate;
|
|
||||||
} else if (initialLightSensorRate > lightSensorRate) {
|
|
||||||
Slog.w(TAG, "Expected config_autoBrightnessInitialLightSensorRate ("
|
|
||||||
+ initialLightSensorRate + ") to be less than or equal to "
|
|
||||||
+ "config_autoBrightnessLightSensorRate (" + lightSensorRate + ").");
|
|
||||||
}
|
|
||||||
|
|
||||||
loadAmbientLightSensor();
|
|
||||||
|
|
||||||
mBrightnessMapper = BrightnessMappingStrategy.create(resources, mDisplayDeviceConfig);
|
|
||||||
if (mBrightnessMapper != null) {
|
|
||||||
mAutomaticBrightnessController = new AutomaticBrightnessController(this,
|
|
||||||
handler.getLooper(), sensorManager, mLightSensor, mBrightnessMapper,
|
|
||||||
lightSensorWarmUpTimeConfig, PowerManager.BRIGHTNESS_MIN,
|
|
||||||
PowerManager.BRIGHTNESS_MAX, dozeScaleFactor, lightSensorRate,
|
|
||||||
initialLightSensorRate, brighteningLightDebounce, darkeningLightDebounce,
|
|
||||||
autoBrightnessResetAmbientLuxAfterWarmUp, ambientBrightnessThresholds,
|
|
||||||
screenBrightnessThresholds, logicalDisplay, context, mHbmController);
|
|
||||||
} else {
|
|
||||||
mUseSoftwareAutoBrightnessConfig = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mColorFadeEnabled = !ActivityManager.isLowRamDeviceStatic();
|
mColorFadeEnabled = !ActivityManager.isLowRamDeviceStatic();
|
||||||
mColorFadeFadesConfig = resources.getBoolean(
|
mColorFadeFadesConfig = resources.getBoolean(
|
||||||
@@ -610,13 +550,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
|||||||
mDisplayWhiteBalanceSettings = displayWhiteBalanceSettings;
|
mDisplayWhiteBalanceSettings = displayWhiteBalanceSettings;
|
||||||
mDisplayWhiteBalanceController = displayWhiteBalanceController;
|
mDisplayWhiteBalanceController = displayWhiteBalanceController;
|
||||||
|
|
||||||
if (mDisplayDeviceConfig != null && mDisplayDeviceConfig.getNits() != null) {
|
loadNitsRange(resources);
|
||||||
mNitsRange = mDisplayDeviceConfig.getNits();
|
|
||||||
} else {
|
|
||||||
Slog.w(TAG, "Screen brightness nits configuration is unavailable; falling back");
|
|
||||||
mNitsRange = BrightnessMappingStrategy.getFloatArray(context.getResources()
|
|
||||||
.obtainTypedArray(com.android.internal.R.array.config_screenBrightnessNits));
|
|
||||||
}
|
|
||||||
if (mDisplayId == Display.DEFAULT_DISPLAY) {
|
if (mDisplayId == Display.DEFAULT_DISPLAY) {
|
||||||
mCdsi = LocalServices.getService(ColorDisplayServiceInternal.class);
|
mCdsi = LocalServices.getService(ColorDisplayServiceInternal.class);
|
||||||
boolean active = mCdsi.setReduceBrightColorsListener(new ReduceBrightColorsListener() {
|
boolean active = mCdsi.setReduceBrightColorsListener(new ReduceBrightColorsListener() {
|
||||||
@@ -802,10 +737,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
|||||||
mDisplayDevice = device;
|
mDisplayDevice = device;
|
||||||
mUniqueDisplayId = uniqueId;
|
mUniqueDisplayId = uniqueId;
|
||||||
mDisplayDeviceConfig = config;
|
mDisplayDeviceConfig = config;
|
||||||
|
loadFromDisplayDeviceConfig(token);
|
||||||
loadAmbientLightSensor();
|
|
||||||
loadProximitySensor();
|
|
||||||
mHbmController.resetHbmData(token, config.getHighBrightnessModeData());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -846,6 +778,18 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void loadFromDisplayDeviceConfig(IBinder token) {
|
||||||
|
// All properties that depend on the associated DisplayDevice and the DDC must be
|
||||||
|
// updated here.
|
||||||
|
loadAmbientLightSensor();
|
||||||
|
loadBrightnessRampRates();
|
||||||
|
loadProximitySensor();
|
||||||
|
loadNitsRange(mContext.getResources());
|
||||||
|
setUpAutoBrightness(mContext.getResources(), mHandler);
|
||||||
|
reloadReduceBrightColours();
|
||||||
|
mHbmController.resetHbmData(token, mDisplayDeviceConfig.getHighBrightnessModeData());
|
||||||
|
}
|
||||||
|
|
||||||
private void sendUpdatePowerState() {
|
private void sendUpdatePowerState() {
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
sendUpdatePowerStateLocked();
|
sendUpdatePowerStateLocked();
|
||||||
@@ -903,6 +847,98 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
|||||||
false /*notifyForDescendants*/, mSettingsObserver, UserHandle.USER_ALL);
|
false /*notifyForDescendants*/, mSettingsObserver, UserHandle.USER_ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setUpAutoBrightness(Resources resources, Handler handler) {
|
||||||
|
if (!mUseSoftwareAutoBrightnessConfig) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mBrightnessMapper = BrightnessMappingStrategy.create(resources, mDisplayDeviceConfig);
|
||||||
|
|
||||||
|
if (mBrightnessMapper != null) {
|
||||||
|
final float dozeScaleFactor = resources.getFraction(
|
||||||
|
com.android.internal.R.fraction.config_screenAutoBrightnessDozeScaleFactor,
|
||||||
|
1, 1);
|
||||||
|
|
||||||
|
int[] ambientBrighteningThresholds = resources.getIntArray(
|
||||||
|
com.android.internal.R.array.config_ambientBrighteningThresholds);
|
||||||
|
int[] ambientDarkeningThresholds = resources.getIntArray(
|
||||||
|
com.android.internal.R.array.config_ambientDarkeningThresholds);
|
||||||
|
int[] ambientThresholdLevels = resources.getIntArray(
|
||||||
|
com.android.internal.R.array.config_ambientThresholdLevels);
|
||||||
|
HysteresisLevels ambientBrightnessThresholds = new HysteresisLevels(
|
||||||
|
ambientBrighteningThresholds, ambientDarkeningThresholds,
|
||||||
|
ambientThresholdLevels);
|
||||||
|
|
||||||
|
int[] screenBrighteningThresholds = resources.getIntArray(
|
||||||
|
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);
|
||||||
|
HysteresisLevels screenBrightnessThresholds = new HysteresisLevels(
|
||||||
|
screenBrighteningThresholds, screenDarkeningThresholds, screenThresholdLevels);
|
||||||
|
|
||||||
|
long brighteningLightDebounce = resources.getInteger(
|
||||||
|
com.android.internal.R.integer.config_autoBrightnessBrighteningLightDebounce);
|
||||||
|
long darkeningLightDebounce = resources.getInteger(
|
||||||
|
com.android.internal.R.integer.config_autoBrightnessDarkeningLightDebounce);
|
||||||
|
boolean autoBrightnessResetAmbientLuxAfterWarmUp = resources.getBoolean(
|
||||||
|
com.android.internal.R.bool.config_autoBrightnessResetAmbientLuxAfterWarmUp);
|
||||||
|
|
||||||
|
int lightSensorWarmUpTimeConfig = resources.getInteger(
|
||||||
|
com.android.internal.R.integer.config_lightSensorWarmupTime);
|
||||||
|
int lightSensorRate = resources.getInteger(
|
||||||
|
com.android.internal.R.integer.config_autoBrightnessLightSensorRate);
|
||||||
|
int initialLightSensorRate = resources.getInteger(
|
||||||
|
com.android.internal.R.integer.config_autoBrightnessInitialLightSensorRate);
|
||||||
|
if (initialLightSensorRate == -1) {
|
||||||
|
initialLightSensorRate = lightSensorRate;
|
||||||
|
} else if (initialLightSensorRate > lightSensorRate) {
|
||||||
|
Slog.w(TAG, "Expected config_autoBrightnessInitialLightSensorRate ("
|
||||||
|
+ initialLightSensorRate + ") to be less than or equal to "
|
||||||
|
+ "config_autoBrightnessLightSensorRate (" + lightSensorRate + ").");
|
||||||
|
}
|
||||||
|
|
||||||
|
loadAmbientLightSensor();
|
||||||
|
|
||||||
|
if (mAutomaticBrightnessController != null) {
|
||||||
|
mAutomaticBrightnessController.stop();
|
||||||
|
}
|
||||||
|
mAutomaticBrightnessController = new AutomaticBrightnessController(this,
|
||||||
|
handler.getLooper(), mSensorManager, mLightSensor, mBrightnessMapper,
|
||||||
|
lightSensorWarmUpTimeConfig, PowerManager.BRIGHTNESS_MIN,
|
||||||
|
PowerManager.BRIGHTNESS_MAX, dozeScaleFactor, lightSensorRate,
|
||||||
|
initialLightSensorRate, brighteningLightDebounce, darkeningLightDebounce,
|
||||||
|
autoBrightnessResetAmbientLuxAfterWarmUp, ambientBrightnessThresholds,
|
||||||
|
screenBrightnessThresholds, mLogicalDisplay, mContext, mHbmController);
|
||||||
|
} else {
|
||||||
|
mUseSoftwareAutoBrightnessConfig = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadBrightnessRampRates() {
|
||||||
|
mBrightnessRampRateFastDecrease = mDisplayDeviceConfig.getBrightnessRampFastDecrease();
|
||||||
|
mBrightnessRampRateFastIncrease = mDisplayDeviceConfig.getBrightnessRampFastIncrease();
|
||||||
|
mBrightnessRampRateSlowDecrease = mDisplayDeviceConfig.getBrightnessRampSlowDecrease();
|
||||||
|
mBrightnessRampRateSlowIncrease = mDisplayDeviceConfig.getBrightnessRampSlowIncrease();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadNitsRange(Resources resources) {
|
||||||
|
if (mDisplayDeviceConfig != null && mDisplayDeviceConfig.getNits() != null) {
|
||||||
|
mNitsRange = mDisplayDeviceConfig.getNits();
|
||||||
|
} else {
|
||||||
|
Slog.w(TAG, "Screen brightness nits configuration is unavailable; falling back");
|
||||||
|
mNitsRange = BrightnessMappingStrategy.getFloatArray(resources
|
||||||
|
.obtainTypedArray(com.android.internal.R.array.config_screenBrightnessNits));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void reloadReduceBrightColours() {
|
||||||
|
if (mCdsi != null && mCdsi.isReduceBrightColorsActivated()) {
|
||||||
|
applyReduceBrightColorsSplineAdjustment();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private final Animator.AnimatorListener mAnimatorListener = new Animator.AnimatorListener() {
|
private final Animator.AnimatorListener mAnimatorListener = new Animator.AnimatorListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onAnimationStart(Animator animation) {
|
public void onAnimationStart(Animator animation) {
|
||||||
|
|||||||
Reference in New Issue
Block a user