Loading services/core/java/com/android/server/display/AutomaticBrightnessController.java +8 −0 Original line number Original line Diff line number Diff line Loading @@ -579,6 +579,14 @@ public class AutomaticBrightnessController { return mCurrentBrightnessMapper.getMode(); return mCurrentBrightnessMapper.getMode(); } } /** * @return The preset for this mapping strategy. Presets are used on devices that allow users * to choose from a set of predefined options in display auto-brightness settings. */ public int getPreset() { return mCurrentBrightnessMapper.getPreset(); } public boolean isInIdleMode() { public boolean isInIdleMode() { return mCurrentBrightnessMapper.getMode() == AUTO_BRIGHTNESS_MODE_IDLE; return mCurrentBrightnessMapper.getMode() == AUTO_BRIGHTNESS_MODE_IDLE; } } Loading services/core/java/com/android/server/display/BrightnessMappingStrategy.java +27 −4 Original line number Original line Diff line number Diff line Loading @@ -140,10 +140,10 @@ public abstract class BrightnessMappingStrategy { builder.setShortTermModelLowerLuxMultiplier(SHORT_TERM_MODEL_THRESHOLD_RATIO); builder.setShortTermModelLowerLuxMultiplier(SHORT_TERM_MODEL_THRESHOLD_RATIO); builder.setShortTermModelUpperLuxMultiplier(SHORT_TERM_MODEL_THRESHOLD_RATIO); builder.setShortTermModelUpperLuxMultiplier(SHORT_TERM_MODEL_THRESHOLD_RATIO); return new PhysicalMappingStrategy(builder.build(), nitsRange, brightnessRange, return new PhysicalMappingStrategy(builder.build(), nitsRange, brightnessRange, autoBrightnessAdjustmentMaxGamma, mode, displayWhiteBalanceController); autoBrightnessAdjustmentMaxGamma, mode, preset, displayWhiteBalanceController); } else if (isValidMapping(luxLevels, brightnessLevels)) { } else if (isValidMapping(luxLevels, brightnessLevels)) { return new SimpleMappingStrategy(luxLevels, brightnessLevels, return new SimpleMappingStrategy(luxLevels, brightnessLevels, autoBrightnessAdjustmentMaxGamma, shortTermModelTimeout, mode); autoBrightnessAdjustmentMaxGamma, shortTermModelTimeout, mode, preset); } else { } else { return null; return null; } } Loading Loading @@ -393,6 +393,12 @@ public abstract class BrightnessMappingStrategy { @AutomaticBrightnessController.AutomaticBrightnessMode @AutomaticBrightnessController.AutomaticBrightnessMode abstract int getMode(); abstract int getMode(); /** * @return The preset for this mapping strategy. Presets are used on devices that allow users * to choose from a set of predefined options in display auto-brightness settings. */ abstract int getPreset(); /** /** * Check if the short term model should be reset given the anchor lux the last * Check if the short term model should be reset given the anchor lux the last * brightness change was made at and the current ambient lux. * brightness change was made at and the current ambient lux. Loading Loading @@ -598,6 +604,8 @@ public abstract class BrightnessMappingStrategy { @AutomaticBrightnessController.AutomaticBrightnessMode @AutomaticBrightnessController.AutomaticBrightnessMode private final int mMode; private final int mMode; private final int mPreset; private Spline mSpline; private Spline mSpline; private float mMaxGamma; private float mMaxGamma; private float mAutoBrightnessAdjustment; private float mAutoBrightnessAdjustment; Loading @@ -606,7 +614,8 @@ public abstract class BrightnessMappingStrategy { private long mShortTermModelTimeout; private long mShortTermModelTimeout; private SimpleMappingStrategy(float[] lux, float[] brightness, float maxGamma, private SimpleMappingStrategy(float[] lux, float[] brightness, float maxGamma, long timeout, @AutomaticBrightnessController.AutomaticBrightnessMode int mode) { long timeout, @AutomaticBrightnessController.AutomaticBrightnessMode int mode, int preset) { Preconditions.checkArgument(lux.length != 0 && brightness.length != 0, Preconditions.checkArgument(lux.length != 0 && brightness.length != 0, "Lux and brightness arrays must not be empty!"); "Lux and brightness arrays must not be empty!"); Preconditions.checkArgument(lux.length == brightness.length, Preconditions.checkArgument(lux.length == brightness.length, Loading @@ -633,6 +642,7 @@ public abstract class BrightnessMappingStrategy { computeSpline(); computeSpline(); mShortTermModelTimeout = timeout; mShortTermModelTimeout = timeout; mMode = mode; mMode = mode; mPreset = preset; } } @Override @Override Loading Loading @@ -765,6 +775,11 @@ public abstract class BrightnessMappingStrategy { return mMode; return mMode; } } @Override int getPreset() { return mPreset; } @Override @Override float getUserLux() { float getUserLux() { return mUserLux; return mUserLux; Loading Loading @@ -837,6 +852,8 @@ public abstract class BrightnessMappingStrategy { @AutomaticBrightnessController.AutomaticBrightnessMode @AutomaticBrightnessController.AutomaticBrightnessMode private final int mMode; private final int mMode; private final int mPreset; // Previous short-term models and the times that they were computed stored for debugging // Previous short-term models and the times that they were computed stored for debugging // purposes // purposes private List<Spline> mPreviousBrightnessSplines = new ArrayList<>(); private List<Spline> mPreviousBrightnessSplines = new ArrayList<>(); Loading @@ -846,7 +863,7 @@ public abstract class BrightnessMappingStrategy { public PhysicalMappingStrategy(BrightnessConfiguration config, float[] nits, public PhysicalMappingStrategy(BrightnessConfiguration config, float[] nits, float[] brightness, float maxGamma, float[] brightness, float maxGamma, @AutomaticBrightnessController.AutomaticBrightnessMode int mode, @AutomaticBrightnessController.AutomaticBrightnessMode int mode, int preset, @Nullable DisplayWhiteBalanceController displayWhiteBalanceController) { @Nullable DisplayWhiteBalanceController displayWhiteBalanceController) { Preconditions.checkArgument(nits.length != 0 && brightness.length != 0, Preconditions.checkArgument(nits.length != 0 && brightness.length != 0, Loading @@ -860,6 +877,7 @@ public abstract class BrightnessMappingStrategy { PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX, "brightness"); PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX, "brightness"); mMode = mode; mMode = mode; mPreset = preset; mMaxGamma = maxGamma; mMaxGamma = maxGamma; mAutoBrightnessAdjustment = 0; mAutoBrightnessAdjustment = 0; mUserLux = INVALID_LUX; mUserLux = INVALID_LUX; Loading Loading @@ -1072,6 +1090,11 @@ public abstract class BrightnessMappingStrategy { return mMode; return mMode; } } @Override int getPreset() { return mPreset; } @Override @Override float getUserLux() { float getUserLux() { return mUserLux; return mUserLux; Loading services/core/java/com/android/server/display/DisplayDeviceConfig.java +37 −16 Original line number Original line Diff line number Diff line Loading @@ -589,21 +589,42 @@ import javax.xml.datatype.DatatypeConfigurationException; * </usiVersion> * </usiVersion> * <evenDimmer enabled="true"> * <evenDimmer enabled="true"> * <transitionPoint>0.1</transitionPoint> * <transitionPoint>0.1</transitionPoint> * * <brightnessMapping> * <brightnessPoint> * <nits>0.2</nits> * <nits>0.2</nits> * <backlight>0</backlight> * <brightness>0</brightness> * </brightnessPoint> * <brightnessPoint> * <nits>2.0</nits> * <nits>2.0</nits> * <backlight>0.01</backlight> * <brightness>0.002</brightness> * </brightnessPoint> * <brightnessPoint> * <nits>500.0</nits> * <nits>500.0</nits> * <nits>1000.0</nits> * * <backlight>0</backlight> * <backlight>0.0001</backlight> * <backlight>0.5</backlight> * <backlight>0.5</backlight> * <backlight>1.0</backlight> * * <brightness>0</brightness> * <brightness>0.1</brightness> * <brightness>0.5</brightness> * <brightness>0.5</brightness> * </brightnessPoint> * <brightnessPoint> * <nits>1000</nits> * <backlight>1.0</backlight> * <brightness>1.0</brightness> * <brightness>1.0</brightness> * </brightnessPoint> * </brightnessMapping> * <luxToMinimumNitsMap> * <point> * <value>10</value> * <nits>0.3</nits> * </point> * <point> * <value>50</value> * <nits>0.7</nits> * </point> * <point> * <value>100</value> * <nits>1.0</nits> * </point> * </luxToMinimumNitsMap> * </evenDimmer> * </evenDimmer> * <screenBrightnessCapForWearBedtimeMode>0.1</screenBrightnessCapForWearBedtimeMode> * <screenBrightnessCapForWearBedtimeMode>0.1</screenBrightnessCapForWearBedtimeMode> * <idleScreenRefreshRateTimeout> * <idleScreenRefreshRateTimeout> Loading services/core/java/com/android/server/display/DisplayManagerService.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -722,6 +722,7 @@ public final class DisplayManagerService extends SystemService { if (userSwitching) { if (userSwitching) { mCurrentUserId = newUserId; mCurrentUserId = newUserId; } } mDisplayModeDirector.onSwitchUser(); mLogicalDisplayMapper.forEachLocked(logicalDisplay -> { mLogicalDisplayMapper.forEachLocked(logicalDisplay -> { if (logicalDisplay.getDisplayInfoLocked().type != Display.TYPE_INTERNAL) { if (logicalDisplay.getDisplayInfoLocked().type != Display.TYPE_INTERNAL) { return; return; Loading services/core/java/com/android/server/display/DisplayPowerController.java +13 −1 Original line number Original line Diff line number Diff line Loading @@ -702,6 +702,17 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private void handleOnSwitchUser(@UserIdInt int newUserId, int userSerial, float newBrightness) { private void handleOnSwitchUser(@UserIdInt int newUserId, int userSerial, float newBrightness) { Slog.i(mTag, "Switching user newUserId=" + newUserId + " userSerial=" + userSerial Slog.i(mTag, "Switching user newUserId=" + newUserId + " userSerial=" + userSerial + " newBrightness=" + newBrightness); + " newBrightness=" + newBrightness); if (mAutomaticBrightnessController != null) { int autoBrightnessPreset = Settings.System.getIntForUser(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_FOR_ALS, Settings.System.SCREEN_BRIGHTNESS_AUTOMATIC_NORMAL, UserHandle.USER_CURRENT); if (autoBrightnessPreset != mAutomaticBrightnessController.getPreset()) { setUpAutoBrightness(mContext, mHandler); } } handleBrightnessModeChange(); handleBrightnessModeChange(); if (mBrightnessTracker != null) { if (mBrightnessTracker != null) { mBrightnessTracker.onSwitchUser(newUserId); mBrightnessTracker.onSwitchUser(newUserId); Loading @@ -714,6 +725,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call if (mAutomaticBrightnessController != null) { if (mAutomaticBrightnessController != null) { mAutomaticBrightnessController.resetShortTermModel(); mAutomaticBrightnessController.resetShortTermModel(); } } mBrightnessClamperController.onUserSwitch(); sendUpdatePowerState(); sendUpdatePowerState(); } } Loading Loading @@ -1009,7 +1021,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call if (mFlags.areAutoBrightnessModesEnabled()) { if (mFlags.areAutoBrightnessModesEnabled()) { mContext.getContentResolver().registerContentObserver( mContext.getContentResolver().registerContentObserver( Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FOR_ALS), Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FOR_ALS), /* notifyForDescendants= */ false, mSettingsObserver, UserHandle.USER_CURRENT); /* notifyForDescendants= */ false, mSettingsObserver, UserHandle.USER_ALL); } } handleBrightnessModeChange(); handleBrightnessModeChange(); } } Loading Loading
services/core/java/com/android/server/display/AutomaticBrightnessController.java +8 −0 Original line number Original line Diff line number Diff line Loading @@ -579,6 +579,14 @@ public class AutomaticBrightnessController { return mCurrentBrightnessMapper.getMode(); return mCurrentBrightnessMapper.getMode(); } } /** * @return The preset for this mapping strategy. Presets are used on devices that allow users * to choose from a set of predefined options in display auto-brightness settings. */ public int getPreset() { return mCurrentBrightnessMapper.getPreset(); } public boolean isInIdleMode() { public boolean isInIdleMode() { return mCurrentBrightnessMapper.getMode() == AUTO_BRIGHTNESS_MODE_IDLE; return mCurrentBrightnessMapper.getMode() == AUTO_BRIGHTNESS_MODE_IDLE; } } Loading
services/core/java/com/android/server/display/BrightnessMappingStrategy.java +27 −4 Original line number Original line Diff line number Diff line Loading @@ -140,10 +140,10 @@ public abstract class BrightnessMappingStrategy { builder.setShortTermModelLowerLuxMultiplier(SHORT_TERM_MODEL_THRESHOLD_RATIO); builder.setShortTermModelLowerLuxMultiplier(SHORT_TERM_MODEL_THRESHOLD_RATIO); builder.setShortTermModelUpperLuxMultiplier(SHORT_TERM_MODEL_THRESHOLD_RATIO); builder.setShortTermModelUpperLuxMultiplier(SHORT_TERM_MODEL_THRESHOLD_RATIO); return new PhysicalMappingStrategy(builder.build(), nitsRange, brightnessRange, return new PhysicalMappingStrategy(builder.build(), nitsRange, brightnessRange, autoBrightnessAdjustmentMaxGamma, mode, displayWhiteBalanceController); autoBrightnessAdjustmentMaxGamma, mode, preset, displayWhiteBalanceController); } else if (isValidMapping(luxLevels, brightnessLevels)) { } else if (isValidMapping(luxLevels, brightnessLevels)) { return new SimpleMappingStrategy(luxLevels, brightnessLevels, return new SimpleMappingStrategy(luxLevels, brightnessLevels, autoBrightnessAdjustmentMaxGamma, shortTermModelTimeout, mode); autoBrightnessAdjustmentMaxGamma, shortTermModelTimeout, mode, preset); } else { } else { return null; return null; } } Loading Loading @@ -393,6 +393,12 @@ public abstract class BrightnessMappingStrategy { @AutomaticBrightnessController.AutomaticBrightnessMode @AutomaticBrightnessController.AutomaticBrightnessMode abstract int getMode(); abstract int getMode(); /** * @return The preset for this mapping strategy. Presets are used on devices that allow users * to choose from a set of predefined options in display auto-brightness settings. */ abstract int getPreset(); /** /** * Check if the short term model should be reset given the anchor lux the last * Check if the short term model should be reset given the anchor lux the last * brightness change was made at and the current ambient lux. * brightness change was made at and the current ambient lux. Loading Loading @@ -598,6 +604,8 @@ public abstract class BrightnessMappingStrategy { @AutomaticBrightnessController.AutomaticBrightnessMode @AutomaticBrightnessController.AutomaticBrightnessMode private final int mMode; private final int mMode; private final int mPreset; private Spline mSpline; private Spline mSpline; private float mMaxGamma; private float mMaxGamma; private float mAutoBrightnessAdjustment; private float mAutoBrightnessAdjustment; Loading @@ -606,7 +614,8 @@ public abstract class BrightnessMappingStrategy { private long mShortTermModelTimeout; private long mShortTermModelTimeout; private SimpleMappingStrategy(float[] lux, float[] brightness, float maxGamma, private SimpleMappingStrategy(float[] lux, float[] brightness, float maxGamma, long timeout, @AutomaticBrightnessController.AutomaticBrightnessMode int mode) { long timeout, @AutomaticBrightnessController.AutomaticBrightnessMode int mode, int preset) { Preconditions.checkArgument(lux.length != 0 && brightness.length != 0, Preconditions.checkArgument(lux.length != 0 && brightness.length != 0, "Lux and brightness arrays must not be empty!"); "Lux and brightness arrays must not be empty!"); Preconditions.checkArgument(lux.length == brightness.length, Preconditions.checkArgument(lux.length == brightness.length, Loading @@ -633,6 +642,7 @@ public abstract class BrightnessMappingStrategy { computeSpline(); computeSpline(); mShortTermModelTimeout = timeout; mShortTermModelTimeout = timeout; mMode = mode; mMode = mode; mPreset = preset; } } @Override @Override Loading Loading @@ -765,6 +775,11 @@ public abstract class BrightnessMappingStrategy { return mMode; return mMode; } } @Override int getPreset() { return mPreset; } @Override @Override float getUserLux() { float getUserLux() { return mUserLux; return mUserLux; Loading Loading @@ -837,6 +852,8 @@ public abstract class BrightnessMappingStrategy { @AutomaticBrightnessController.AutomaticBrightnessMode @AutomaticBrightnessController.AutomaticBrightnessMode private final int mMode; private final int mMode; private final int mPreset; // Previous short-term models and the times that they were computed stored for debugging // Previous short-term models and the times that they were computed stored for debugging // purposes // purposes private List<Spline> mPreviousBrightnessSplines = new ArrayList<>(); private List<Spline> mPreviousBrightnessSplines = new ArrayList<>(); Loading @@ -846,7 +863,7 @@ public abstract class BrightnessMappingStrategy { public PhysicalMappingStrategy(BrightnessConfiguration config, float[] nits, public PhysicalMappingStrategy(BrightnessConfiguration config, float[] nits, float[] brightness, float maxGamma, float[] brightness, float maxGamma, @AutomaticBrightnessController.AutomaticBrightnessMode int mode, @AutomaticBrightnessController.AutomaticBrightnessMode int mode, int preset, @Nullable DisplayWhiteBalanceController displayWhiteBalanceController) { @Nullable DisplayWhiteBalanceController displayWhiteBalanceController) { Preconditions.checkArgument(nits.length != 0 && brightness.length != 0, Preconditions.checkArgument(nits.length != 0 && brightness.length != 0, Loading @@ -860,6 +877,7 @@ public abstract class BrightnessMappingStrategy { PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX, "brightness"); PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX, "brightness"); mMode = mode; mMode = mode; mPreset = preset; mMaxGamma = maxGamma; mMaxGamma = maxGamma; mAutoBrightnessAdjustment = 0; mAutoBrightnessAdjustment = 0; mUserLux = INVALID_LUX; mUserLux = INVALID_LUX; Loading Loading @@ -1072,6 +1090,11 @@ public abstract class BrightnessMappingStrategy { return mMode; return mMode; } } @Override int getPreset() { return mPreset; } @Override @Override float getUserLux() { float getUserLux() { return mUserLux; return mUserLux; Loading
services/core/java/com/android/server/display/DisplayDeviceConfig.java +37 −16 Original line number Original line Diff line number Diff line Loading @@ -589,21 +589,42 @@ import javax.xml.datatype.DatatypeConfigurationException; * </usiVersion> * </usiVersion> * <evenDimmer enabled="true"> * <evenDimmer enabled="true"> * <transitionPoint>0.1</transitionPoint> * <transitionPoint>0.1</transitionPoint> * * <brightnessMapping> * <brightnessPoint> * <nits>0.2</nits> * <nits>0.2</nits> * <backlight>0</backlight> * <brightness>0</brightness> * </brightnessPoint> * <brightnessPoint> * <nits>2.0</nits> * <nits>2.0</nits> * <backlight>0.01</backlight> * <brightness>0.002</brightness> * </brightnessPoint> * <brightnessPoint> * <nits>500.0</nits> * <nits>500.0</nits> * <nits>1000.0</nits> * * <backlight>0</backlight> * <backlight>0.0001</backlight> * <backlight>0.5</backlight> * <backlight>0.5</backlight> * <backlight>1.0</backlight> * * <brightness>0</brightness> * <brightness>0.1</brightness> * <brightness>0.5</brightness> * <brightness>0.5</brightness> * </brightnessPoint> * <brightnessPoint> * <nits>1000</nits> * <backlight>1.0</backlight> * <brightness>1.0</brightness> * <brightness>1.0</brightness> * </brightnessPoint> * </brightnessMapping> * <luxToMinimumNitsMap> * <point> * <value>10</value> * <nits>0.3</nits> * </point> * <point> * <value>50</value> * <nits>0.7</nits> * </point> * <point> * <value>100</value> * <nits>1.0</nits> * </point> * </luxToMinimumNitsMap> * </evenDimmer> * </evenDimmer> * <screenBrightnessCapForWearBedtimeMode>0.1</screenBrightnessCapForWearBedtimeMode> * <screenBrightnessCapForWearBedtimeMode>0.1</screenBrightnessCapForWearBedtimeMode> * <idleScreenRefreshRateTimeout> * <idleScreenRefreshRateTimeout> Loading
services/core/java/com/android/server/display/DisplayManagerService.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -722,6 +722,7 @@ public final class DisplayManagerService extends SystemService { if (userSwitching) { if (userSwitching) { mCurrentUserId = newUserId; mCurrentUserId = newUserId; } } mDisplayModeDirector.onSwitchUser(); mLogicalDisplayMapper.forEachLocked(logicalDisplay -> { mLogicalDisplayMapper.forEachLocked(logicalDisplay -> { if (logicalDisplay.getDisplayInfoLocked().type != Display.TYPE_INTERNAL) { if (logicalDisplay.getDisplayInfoLocked().type != Display.TYPE_INTERNAL) { return; return; Loading
services/core/java/com/android/server/display/DisplayPowerController.java +13 −1 Original line number Original line Diff line number Diff line Loading @@ -702,6 +702,17 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private void handleOnSwitchUser(@UserIdInt int newUserId, int userSerial, float newBrightness) { private void handleOnSwitchUser(@UserIdInt int newUserId, int userSerial, float newBrightness) { Slog.i(mTag, "Switching user newUserId=" + newUserId + " userSerial=" + userSerial Slog.i(mTag, "Switching user newUserId=" + newUserId + " userSerial=" + userSerial + " newBrightness=" + newBrightness); + " newBrightness=" + newBrightness); if (mAutomaticBrightnessController != null) { int autoBrightnessPreset = Settings.System.getIntForUser(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_FOR_ALS, Settings.System.SCREEN_BRIGHTNESS_AUTOMATIC_NORMAL, UserHandle.USER_CURRENT); if (autoBrightnessPreset != mAutomaticBrightnessController.getPreset()) { setUpAutoBrightness(mContext, mHandler); } } handleBrightnessModeChange(); handleBrightnessModeChange(); if (mBrightnessTracker != null) { if (mBrightnessTracker != null) { mBrightnessTracker.onSwitchUser(newUserId); mBrightnessTracker.onSwitchUser(newUserId); Loading @@ -714,6 +725,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call if (mAutomaticBrightnessController != null) { if (mAutomaticBrightnessController != null) { mAutomaticBrightnessController.resetShortTermModel(); mAutomaticBrightnessController.resetShortTermModel(); } } mBrightnessClamperController.onUserSwitch(); sendUpdatePowerState(); sendUpdatePowerState(); } } Loading Loading @@ -1009,7 +1021,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call if (mFlags.areAutoBrightnessModesEnabled()) { if (mFlags.areAutoBrightnessModesEnabled()) { mContext.getContentResolver().registerContentObserver( mContext.getContentResolver().registerContentObserver( Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FOR_ALS), Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FOR_ALS), /* notifyForDescendants= */ false, mSettingsObserver, UserHandle.USER_CURRENT); /* notifyForDescendants= */ false, mSettingsObserver, UserHandle.USER_ALL); } } handleBrightnessModeChange(); handleBrightnessModeChange(); } } Loading