Loading services/core/java/com/android/server/display/DisplayDeviceConfig.java +1 −1 Original line number Diff line number Diff line Loading @@ -1268,7 +1268,7 @@ public class DisplayDeviceConfig { return mAmbientLightSensor; } SensorData getScreenOffBrightnessSensor() { public SensorData getScreenOffBrightnessSensor() { return mScreenOffBrightnessSensor; } Loading services/core/java/com/android/server/display/DisplayPowerController.java +58 −58 Original line number Diff line number Diff line Loading @@ -851,6 +851,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mHandler.postAtTime(() -> { boolean changed = false; if (mIsEnabled != isEnabled || mIsInTransition != isInTransition) { changed = true; mIsEnabled = isEnabled; mIsInTransition = isInTransition; } if (mDisplayDevice != device) { changed = true; mDisplayDevice = device; Loading @@ -875,11 +882,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mThermalBrightnessThrottlingDataId, mUniqueDisplayId); } if (mIsEnabled != isEnabled || mIsInTransition != isInTransition) { changed = true; mIsEnabled = isEnabled; mIsInTransition = isInTransition; } mIsDisplayInternal = isDisplayInternal; // using local variables here, when mBrightnessThrottler is removed, Loading Loading @@ -1113,20 +1115,19 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mBrightnessThrottler, mDisplayDeviceConfig.getAmbientHorizonShort(), mDisplayDeviceConfig.getAmbientHorizonLong(), userLux, userNits, mBrightnessClamperController); mDisplayBrightnessController.setAutomaticBrightnessController( mAutomaticBrightnessController); mAutomaticBrightnessStrategy .setAutomaticBrightnessController(mAutomaticBrightnessController); mDisplayBrightnessController.setUpAutoBrightness( mAutomaticBrightnessController, mSensorManager, mDisplayDeviceConfig, mHandler, defaultModeBrightnessMapper, mIsEnabled, mLeadDisplayId); mBrightnessEventRingBuffer = new RingBuffer<>(BrightnessEvent.class, RINGBUFFER_MAX); if (!mFlags.isRefactorDisplayPowerControllerEnabled()) { if (mScreenOffBrightnessSensorController != null) { mScreenOffBrightnessSensorController.stop(); mScreenOffBrightnessSensorController = null; } loadScreenOffBrightnessSensor(); int[] sensorValueToLux = mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux(); int[] sensorValueToLux = mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux(); if (mScreenOffBrightnessSensor != null && sensorValueToLux != null) { mScreenOffBrightnessSensorController = mInjector.getScreenOffBrightnessSensorController( Loading @@ -1137,6 +1138,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call sensorValueToLux, defaultModeBrightnessMapper); } } } else { mUseSoftwareAutoBrightnessConfig = false; } Loading Loading @@ -1255,7 +1257,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mPowerState = null; } if (mScreenOffBrightnessSensorController != null) { if (!mFlags.isRefactorDisplayPowerControllerEnabled() && mScreenOffBrightnessSensorController != null) { mScreenOffBrightnessSensorController.stop(); } Loading Loading @@ -1351,6 +1354,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call if (displayBrightnessState.getBrightnessEvent() != null) { mTempBrightnessEvent.copyFrom(displayBrightnessState.getBrightnessEvent()); } if (!mFlags.isRefactorDisplayPowerControllerEnabled()) { // Set up the ScreenOff controller used when coming out of SCREEN_OFF and the ALS sensor // doesn't yet have a valid lux value to use with auto-brightness. if (mScreenOffBrightnessSensorController != null) { Loading @@ -1361,6 +1365,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call && !mDisplayBrightnessController.isAllowAutoBrightnessWhileDozingConfig())) && mLeadDisplayId == Layout.NO_LEAD_DISPLAY); } } // Take note if the short term model was already active before applying the current // request changes. Loading Loading @@ -1392,15 +1397,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call boolean updateScreenBrightnessSetting = displayBrightnessState.shouldUpdateScreenBrightnessSetting(); float currentBrightnessSetting = mDisplayBrightnessController.getCurrentBrightness(); // Apply auto-brightness. // All the conditions inside this if block will be moved to AutomaticBrightnessStrategy if (mFlags.isRefactorDisplayPowerControllerEnabled() && displayBrightnessState.getBrightnessReason().getReason() == BrightnessReason.REASON_AUTOMATIC) { if (mScreenOffBrightnessSensorController != null) { mScreenOffBrightnessSensorController.setLightSensorEnabled(false); } } if (!mFlags.isRefactorDisplayPowerControllerEnabled()) { // AutomaticBrightnessStrategy has higher priority than OffloadBrightnessStrategy Loading Loading @@ -1473,21 +1469,25 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mBrightnessReasonTemp.setReason(BrightnessReason.REASON_DOZE_DEFAULT); } if (!mFlags.isRefactorDisplayPowerControllerEnabled()) { // The ALS is not available yet - use the screen off sensor to determine the initial // brightness if (Float.isNaN(brightnessState) && mAutomaticBrightnessStrategy.isAutoBrightnessEnabled() if (Float.isNaN(brightnessState) && mAutomaticBrightnessStrategy.isAutoBrightnessEnabled() && mScreenOffBrightnessSensorController != null) { rawBrightnessState = mScreenOffBrightnessSensorController.getAutomaticScreenBrightness(); brightnessState = rawBrightnessState; if (BrightnessUtils.isValidBrightnessValue(brightnessState)) { brightnessState = clampScreenBrightness(brightnessState); updateScreenBrightnessSetting = mDisplayBrightnessController.getCurrentBrightness() updateScreenBrightnessSetting = mDisplayBrightnessController.getCurrentBrightness() != brightnessState; mBrightnessReasonTemp.setReason( BrightnessReason.REASON_SCREEN_OFF_BRIGHTNESS_SENSOR); } } } // Apply manual brightness. if (Float.isNaN(brightnessState)) { Loading services/core/java/com/android/server/display/ScreenOffBrightnessSensorController.java +13 −7 Original line number Diff line number Diff line Loading @@ -25,8 +25,6 @@ import android.os.Handler; import android.os.PowerManager; import android.util.IndentingPrintWriter; import com.android.internal.annotations.VisibleForTesting; import java.io.PrintWriter; /** Loading Loading @@ -79,7 +77,10 @@ public class ScreenOffBrightnessSensorController implements SensorEventListener public void onAccuracyChanged(Sensor sensor, int accuracy) { } void setLightSensorEnabled(boolean enabled) { /** * Changes the state of the associated light sensor */ public void setLightSensorEnabled(boolean enabled) { if (enabled && !mRegistered) { // Wait until we get an event from the sensor indicating ready. mRegistered = mSensorManager.registerListener(this, mLightSensor, Loading @@ -92,11 +93,17 @@ public class ScreenOffBrightnessSensorController implements SensorEventListener } } void stop() { /** * Stops the associated sensor, and cleans up the state */ public void stop() { setLightSensorEnabled(false); } float getAutomaticScreenBrightness() { /** * Gets the automatic screen brightness based on the ambient lux */ public float getAutomaticScreenBrightness() { if (mLastSensorValue < 0 || mLastSensorValue >= mSensorValueToLux.length || (!mRegistered && mClock.uptimeMillis() - mSensorDisableTime > SENSOR_VALUE_VALID_TIME_MILLIS)) { Loading @@ -121,8 +128,7 @@ public class ScreenOffBrightnessSensorController implements SensorEventListener } /** Functional interface for providing time. */ @VisibleForTesting interface Clock { public interface Clock { /** * Returns current time in milliseconds since boot, not counting time spent in deep sleep. */ Loading services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java +53 −8 Original line number Diff line number Diff line Loading @@ -18,7 +18,9 @@ package com.android.server.display.brightness; import android.annotation.Nullable; import android.content.Context; import android.hardware.SensorManager; import android.hardware.display.DisplayManagerInternal; import android.os.Handler; import android.os.HandlerExecutor; import android.os.PowerManager; import android.util.IndentingPrintWriter; Loading @@ -31,6 +33,8 @@ import com.android.server.display.AutomaticBrightnessController; import com.android.server.display.BrightnessMappingStrategy; import com.android.server.display.BrightnessSetting; import com.android.server.display.DisplayBrightnessState; import com.android.server.display.DisplayDeviceConfig; import com.android.server.display.brightness.strategy.AutoBrightnessFallbackStrategy; import com.android.server.display.brightness.strategy.AutomaticBrightnessStrategy2; import com.android.server.display.brightness.strategy.DisplayBrightnessStrategy; import com.android.server.display.feature.DisplayManagerFlags; Loading Loading @@ -103,7 +107,8 @@ public final class DisplayBrightnessController { // The controller for the automatic brightness level. // TODO(b/265415257): Move to the automatic brightness strategy @Nullable private AutomaticBrightnessController mAutomaticBrightnessController; @VisibleForTesting AutomaticBrightnessController mAutomaticBrightnessController; /** * The constructor of DisplayBrightnessController. Loading Loading @@ -332,14 +337,16 @@ public final class DisplayBrightnessController { } /** * Set the {@link AutomaticBrightnessController} which is needed to perform nit-to-float-scale * conversion. * @param automaticBrightnessController The ABC * Sets up the auto brightness and the relevant state for the associated display */ public void setAutomaticBrightnessController( AutomaticBrightnessController automaticBrightnessController) { mAutomaticBrightnessController = automaticBrightnessController; loadNitBasedBrightnessSetting(); public void setUpAutoBrightness(AutomaticBrightnessController automaticBrightnessController, SensorManager sensorManager, DisplayDeviceConfig displayDeviceConfig, Handler handler, BrightnessMappingStrategy brightnessMappingStrategy, boolean isEnabled, int leadDisplayId) { setAutomaticBrightnessController(automaticBrightnessController); setUpAutoBrightnessFallbackStrategy(sensorManager, displayDeviceConfig, handler, brightnessMappingStrategy, isEnabled, leadDisplayId); } /** Loading Loading @@ -404,6 +411,17 @@ public final class DisplayBrightnessController { if (mBrightnessSetting != null) { mBrightnessSetting.unregisterListener(mBrightnessSettingListener); } AutoBrightnessFallbackStrategy autoBrightnessFallbackStrategy = getAutoBrightnessFallbackStrategy(); if (autoBrightnessFallbackStrategy != null) { autoBrightnessFallbackStrategy.stop(); } } private AutoBrightnessFallbackStrategy getAutoBrightnessFallbackStrategy() { synchronized (mLock) { return mDisplayBrightnessStrategySelector.getAutoBrightnessFallbackStrategy(); } } /** Loading Loading @@ -483,6 +501,33 @@ public final class DisplayBrightnessController { } } /** * Set the {@link AutomaticBrightnessController} which is needed to perform nit-to-float-scale * conversion. * @param automaticBrightnessController The ABC */ @VisibleForTesting void setAutomaticBrightnessController( AutomaticBrightnessController automaticBrightnessController) { mAutomaticBrightnessController = automaticBrightnessController; getAutomaticBrightnessStrategy() .setAutomaticBrightnessController(automaticBrightnessController); loadNitBasedBrightnessSetting(); } private void setUpAutoBrightnessFallbackStrategy(SensorManager sensorManager, DisplayDeviceConfig displayDeviceConfig, Handler handler, BrightnessMappingStrategy brightnessMappingStrategy, boolean isEnabled, int leadDisplayId) { AutoBrightnessFallbackStrategy autoBrightnessFallbackStrategy = getAutoBrightnessFallbackStrategy(); if (autoBrightnessFallbackStrategy != null) { autoBrightnessFallbackStrategy.setupAutoBrightnessFallbackSensor( sensorManager, displayDeviceConfig, handler, brightnessMappingStrategy, isEnabled, leadDisplayId); } } /** * TODO(b/253226419): Remove once auto-brightness is a fully-functioning strategy. */ Loading services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java +32 −4 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.view.Display; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.server.display.brightness.strategy.AutoBrightnessFallbackStrategy; import com.android.server.display.brightness.strategy.AutomaticBrightnessStrategy; import com.android.server.display.brightness.strategy.AutomaticBrightnessStrategy2; import com.android.server.display.brightness.strategy.BoostBrightnessStrategy; Loading Loading @@ -81,10 +82,14 @@ public class DisplayBrightnessStrategySelector { @Nullable private final OffloadBrightnessStrategy mOffloadBrightnessStrategy; @Nullable private final AutoBrightnessFallbackStrategy mAutoBrightnessFallbackStrategy; // A collective representation of all the strategies that the selector is aware of. This is // non null, but the strategies this is tracking can be null @NonNull private final DisplayBrightnessStrategy[] mDisplayBrightnessStrategies; @VisibleForTesting final DisplayBrightnessStrategy[] mDisplayBrightnessStrategies; @NonNull private final DisplayManagerFlags mDisplayManagerFlags; Loading Loading @@ -120,6 +125,9 @@ public class DisplayBrightnessStrategySelector { mAutomaticBrightnessStrategy = (mDisplayManagerFlags.isRefactorDisplayPowerControllerEnabled()) ? mAutomaticBrightnessStrategy1 : mAutomaticBrightnessStrategy2; mAutoBrightnessFallbackStrategy = (mDisplayManagerFlags .isRefactorDisplayPowerControllerEnabled()) ? injector.getAutoBrightnessFallbackStrategy() : null; if (flags.isDisplayOffloadEnabled()) { mOffloadBrightnessStrategy = injector .getOffloadBrightnessStrategy(mDisplayManagerFlags); Loading @@ -129,7 +137,8 @@ public class DisplayBrightnessStrategySelector { mDisplayBrightnessStrategies = new DisplayBrightnessStrategy[]{mInvalidBrightnessStrategy, mScreenOffBrightnessStrategy, mDozeBrightnessStrategy, mFollowerBrightnessStrategy, mBoostBrightnessStrategy, mOverrideBrightnessStrategy, mTemporaryBrightnessStrategy, mAutomaticBrightnessStrategy1, mOffloadBrightnessStrategy}; mAutomaticBrightnessStrategy1, mOffloadBrightnessStrategy, mAutoBrightnessFallbackStrategy}; mAllowAutoBrightnessWhileDozingConfig = context.getResources().getBoolean( R.bool.config_allowAutoBrightnessWhileDozing); mOldBrightnessStrategyName = mInvalidBrightnessStrategy.getName(); Loading Loading @@ -168,6 +177,8 @@ public class DisplayBrightnessStrategySelector { && mOffloadBrightnessStrategy != null && BrightnessUtils.isValidBrightnessValue( mOffloadBrightnessStrategy.getOffloadScreenBrightness())) { displayBrightnessStrategy = mOffloadBrightnessStrategy; } else if (isAutoBrightnessFallbackStrategyValid()) { displayBrightnessStrategy = mAutoBrightnessFallbackStrategy; } if (mDisplayManagerFlags.isRefactorDisplayPowerControllerEnabled()) { Loading Loading @@ -210,6 +221,11 @@ public class DisplayBrightnessStrategySelector { return mAllowAutoBrightnessWhileDozingConfig; } @Nullable public AutoBrightnessFallbackStrategy getAutoBrightnessFallbackStrategy() { return mAutoBrightnessFallbackStrategy; } /** * Dumps the state of this class. */ Loading @@ -229,6 +245,13 @@ public class DisplayBrightnessStrategySelector { } } private boolean isAutoBrightnessFallbackStrategyValid() { return mDisplayManagerFlags.isRefactorDisplayPowerControllerEnabled() && mAutoBrightnessFallbackStrategy != null && getAutomaticBrightnessStrategy().shouldUseAutoBrightness() && mAutoBrightnessFallbackStrategy.isValid(); } private boolean isAutomaticBrightnessStrategyValid( StrategySelectionRequest strategySelectionRequest) { mAutomaticBrightnessStrategy1.setAutoBrightnessState( Loading @@ -250,7 +273,8 @@ public class DisplayBrightnessStrategySelector { selectedDisplayBrightnessStrategy, strategySelectionRequest.getLastUserSetScreenBrightness(), strategySelectionRequest.isUserSetBrightnessChanged(), isAllowAutoBrightnessWhileDozingConfig()); isAllowAutoBrightnessWhileDozingConfig(), getAutomaticBrightnessStrategy().shouldUseAutoBrightness()); } private void postProcess(StrategySelectionNotifyRequest strategySelectionNotifyRequest) { Loading Loading @@ -319,5 +343,9 @@ public class DisplayBrightnessStrategySelector { DisplayManagerFlags displayManagerFlags) { return new OffloadBrightnessStrategy(displayManagerFlags); } AutoBrightnessFallbackStrategy getAutoBrightnessFallbackStrategy() { return new AutoBrightnessFallbackStrategy(/* injector= */ null); } } } Loading
services/core/java/com/android/server/display/DisplayDeviceConfig.java +1 −1 Original line number Diff line number Diff line Loading @@ -1268,7 +1268,7 @@ public class DisplayDeviceConfig { return mAmbientLightSensor; } SensorData getScreenOffBrightnessSensor() { public SensorData getScreenOffBrightnessSensor() { return mScreenOffBrightnessSensor; } Loading
services/core/java/com/android/server/display/DisplayPowerController.java +58 −58 Original line number Diff line number Diff line Loading @@ -851,6 +851,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mHandler.postAtTime(() -> { boolean changed = false; if (mIsEnabled != isEnabled || mIsInTransition != isInTransition) { changed = true; mIsEnabled = isEnabled; mIsInTransition = isInTransition; } if (mDisplayDevice != device) { changed = true; mDisplayDevice = device; Loading @@ -875,11 +882,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mThermalBrightnessThrottlingDataId, mUniqueDisplayId); } if (mIsEnabled != isEnabled || mIsInTransition != isInTransition) { changed = true; mIsEnabled = isEnabled; mIsInTransition = isInTransition; } mIsDisplayInternal = isDisplayInternal; // using local variables here, when mBrightnessThrottler is removed, Loading Loading @@ -1113,20 +1115,19 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mBrightnessThrottler, mDisplayDeviceConfig.getAmbientHorizonShort(), mDisplayDeviceConfig.getAmbientHorizonLong(), userLux, userNits, mBrightnessClamperController); mDisplayBrightnessController.setAutomaticBrightnessController( mAutomaticBrightnessController); mAutomaticBrightnessStrategy .setAutomaticBrightnessController(mAutomaticBrightnessController); mDisplayBrightnessController.setUpAutoBrightness( mAutomaticBrightnessController, mSensorManager, mDisplayDeviceConfig, mHandler, defaultModeBrightnessMapper, mIsEnabled, mLeadDisplayId); mBrightnessEventRingBuffer = new RingBuffer<>(BrightnessEvent.class, RINGBUFFER_MAX); if (!mFlags.isRefactorDisplayPowerControllerEnabled()) { if (mScreenOffBrightnessSensorController != null) { mScreenOffBrightnessSensorController.stop(); mScreenOffBrightnessSensorController = null; } loadScreenOffBrightnessSensor(); int[] sensorValueToLux = mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux(); int[] sensorValueToLux = mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux(); if (mScreenOffBrightnessSensor != null && sensorValueToLux != null) { mScreenOffBrightnessSensorController = mInjector.getScreenOffBrightnessSensorController( Loading @@ -1137,6 +1138,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call sensorValueToLux, defaultModeBrightnessMapper); } } } else { mUseSoftwareAutoBrightnessConfig = false; } Loading Loading @@ -1255,7 +1257,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mPowerState = null; } if (mScreenOffBrightnessSensorController != null) { if (!mFlags.isRefactorDisplayPowerControllerEnabled() && mScreenOffBrightnessSensorController != null) { mScreenOffBrightnessSensorController.stop(); } Loading Loading @@ -1351,6 +1354,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call if (displayBrightnessState.getBrightnessEvent() != null) { mTempBrightnessEvent.copyFrom(displayBrightnessState.getBrightnessEvent()); } if (!mFlags.isRefactorDisplayPowerControllerEnabled()) { // Set up the ScreenOff controller used when coming out of SCREEN_OFF and the ALS sensor // doesn't yet have a valid lux value to use with auto-brightness. if (mScreenOffBrightnessSensorController != null) { Loading @@ -1361,6 +1365,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call && !mDisplayBrightnessController.isAllowAutoBrightnessWhileDozingConfig())) && mLeadDisplayId == Layout.NO_LEAD_DISPLAY); } } // Take note if the short term model was already active before applying the current // request changes. Loading Loading @@ -1392,15 +1397,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call boolean updateScreenBrightnessSetting = displayBrightnessState.shouldUpdateScreenBrightnessSetting(); float currentBrightnessSetting = mDisplayBrightnessController.getCurrentBrightness(); // Apply auto-brightness. // All the conditions inside this if block will be moved to AutomaticBrightnessStrategy if (mFlags.isRefactorDisplayPowerControllerEnabled() && displayBrightnessState.getBrightnessReason().getReason() == BrightnessReason.REASON_AUTOMATIC) { if (mScreenOffBrightnessSensorController != null) { mScreenOffBrightnessSensorController.setLightSensorEnabled(false); } } if (!mFlags.isRefactorDisplayPowerControllerEnabled()) { // AutomaticBrightnessStrategy has higher priority than OffloadBrightnessStrategy Loading Loading @@ -1473,21 +1469,25 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mBrightnessReasonTemp.setReason(BrightnessReason.REASON_DOZE_DEFAULT); } if (!mFlags.isRefactorDisplayPowerControllerEnabled()) { // The ALS is not available yet - use the screen off sensor to determine the initial // brightness if (Float.isNaN(brightnessState) && mAutomaticBrightnessStrategy.isAutoBrightnessEnabled() if (Float.isNaN(brightnessState) && mAutomaticBrightnessStrategy.isAutoBrightnessEnabled() && mScreenOffBrightnessSensorController != null) { rawBrightnessState = mScreenOffBrightnessSensorController.getAutomaticScreenBrightness(); brightnessState = rawBrightnessState; if (BrightnessUtils.isValidBrightnessValue(brightnessState)) { brightnessState = clampScreenBrightness(brightnessState); updateScreenBrightnessSetting = mDisplayBrightnessController.getCurrentBrightness() updateScreenBrightnessSetting = mDisplayBrightnessController.getCurrentBrightness() != brightnessState; mBrightnessReasonTemp.setReason( BrightnessReason.REASON_SCREEN_OFF_BRIGHTNESS_SENSOR); } } } // Apply manual brightness. if (Float.isNaN(brightnessState)) { Loading
services/core/java/com/android/server/display/ScreenOffBrightnessSensorController.java +13 −7 Original line number Diff line number Diff line Loading @@ -25,8 +25,6 @@ import android.os.Handler; import android.os.PowerManager; import android.util.IndentingPrintWriter; import com.android.internal.annotations.VisibleForTesting; import java.io.PrintWriter; /** Loading Loading @@ -79,7 +77,10 @@ public class ScreenOffBrightnessSensorController implements SensorEventListener public void onAccuracyChanged(Sensor sensor, int accuracy) { } void setLightSensorEnabled(boolean enabled) { /** * Changes the state of the associated light sensor */ public void setLightSensorEnabled(boolean enabled) { if (enabled && !mRegistered) { // Wait until we get an event from the sensor indicating ready. mRegistered = mSensorManager.registerListener(this, mLightSensor, Loading @@ -92,11 +93,17 @@ public class ScreenOffBrightnessSensorController implements SensorEventListener } } void stop() { /** * Stops the associated sensor, and cleans up the state */ public void stop() { setLightSensorEnabled(false); } float getAutomaticScreenBrightness() { /** * Gets the automatic screen brightness based on the ambient lux */ public float getAutomaticScreenBrightness() { if (mLastSensorValue < 0 || mLastSensorValue >= mSensorValueToLux.length || (!mRegistered && mClock.uptimeMillis() - mSensorDisableTime > SENSOR_VALUE_VALID_TIME_MILLIS)) { Loading @@ -121,8 +128,7 @@ public class ScreenOffBrightnessSensorController implements SensorEventListener } /** Functional interface for providing time. */ @VisibleForTesting interface Clock { public interface Clock { /** * Returns current time in milliseconds since boot, not counting time spent in deep sleep. */ Loading
services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java +53 −8 Original line number Diff line number Diff line Loading @@ -18,7 +18,9 @@ package com.android.server.display.brightness; import android.annotation.Nullable; import android.content.Context; import android.hardware.SensorManager; import android.hardware.display.DisplayManagerInternal; import android.os.Handler; import android.os.HandlerExecutor; import android.os.PowerManager; import android.util.IndentingPrintWriter; Loading @@ -31,6 +33,8 @@ import com.android.server.display.AutomaticBrightnessController; import com.android.server.display.BrightnessMappingStrategy; import com.android.server.display.BrightnessSetting; import com.android.server.display.DisplayBrightnessState; import com.android.server.display.DisplayDeviceConfig; import com.android.server.display.brightness.strategy.AutoBrightnessFallbackStrategy; import com.android.server.display.brightness.strategy.AutomaticBrightnessStrategy2; import com.android.server.display.brightness.strategy.DisplayBrightnessStrategy; import com.android.server.display.feature.DisplayManagerFlags; Loading Loading @@ -103,7 +107,8 @@ public final class DisplayBrightnessController { // The controller for the automatic brightness level. // TODO(b/265415257): Move to the automatic brightness strategy @Nullable private AutomaticBrightnessController mAutomaticBrightnessController; @VisibleForTesting AutomaticBrightnessController mAutomaticBrightnessController; /** * The constructor of DisplayBrightnessController. Loading Loading @@ -332,14 +337,16 @@ public final class DisplayBrightnessController { } /** * Set the {@link AutomaticBrightnessController} which is needed to perform nit-to-float-scale * conversion. * @param automaticBrightnessController The ABC * Sets up the auto brightness and the relevant state for the associated display */ public void setAutomaticBrightnessController( AutomaticBrightnessController automaticBrightnessController) { mAutomaticBrightnessController = automaticBrightnessController; loadNitBasedBrightnessSetting(); public void setUpAutoBrightness(AutomaticBrightnessController automaticBrightnessController, SensorManager sensorManager, DisplayDeviceConfig displayDeviceConfig, Handler handler, BrightnessMappingStrategy brightnessMappingStrategy, boolean isEnabled, int leadDisplayId) { setAutomaticBrightnessController(automaticBrightnessController); setUpAutoBrightnessFallbackStrategy(sensorManager, displayDeviceConfig, handler, brightnessMappingStrategy, isEnabled, leadDisplayId); } /** Loading Loading @@ -404,6 +411,17 @@ public final class DisplayBrightnessController { if (mBrightnessSetting != null) { mBrightnessSetting.unregisterListener(mBrightnessSettingListener); } AutoBrightnessFallbackStrategy autoBrightnessFallbackStrategy = getAutoBrightnessFallbackStrategy(); if (autoBrightnessFallbackStrategy != null) { autoBrightnessFallbackStrategy.stop(); } } private AutoBrightnessFallbackStrategy getAutoBrightnessFallbackStrategy() { synchronized (mLock) { return mDisplayBrightnessStrategySelector.getAutoBrightnessFallbackStrategy(); } } /** Loading Loading @@ -483,6 +501,33 @@ public final class DisplayBrightnessController { } } /** * Set the {@link AutomaticBrightnessController} which is needed to perform nit-to-float-scale * conversion. * @param automaticBrightnessController The ABC */ @VisibleForTesting void setAutomaticBrightnessController( AutomaticBrightnessController automaticBrightnessController) { mAutomaticBrightnessController = automaticBrightnessController; getAutomaticBrightnessStrategy() .setAutomaticBrightnessController(automaticBrightnessController); loadNitBasedBrightnessSetting(); } private void setUpAutoBrightnessFallbackStrategy(SensorManager sensorManager, DisplayDeviceConfig displayDeviceConfig, Handler handler, BrightnessMappingStrategy brightnessMappingStrategy, boolean isEnabled, int leadDisplayId) { AutoBrightnessFallbackStrategy autoBrightnessFallbackStrategy = getAutoBrightnessFallbackStrategy(); if (autoBrightnessFallbackStrategy != null) { autoBrightnessFallbackStrategy.setupAutoBrightnessFallbackSensor( sensorManager, displayDeviceConfig, handler, brightnessMappingStrategy, isEnabled, leadDisplayId); } } /** * TODO(b/253226419): Remove once auto-brightness is a fully-functioning strategy. */ Loading
services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java +32 −4 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.view.Display; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.server.display.brightness.strategy.AutoBrightnessFallbackStrategy; import com.android.server.display.brightness.strategy.AutomaticBrightnessStrategy; import com.android.server.display.brightness.strategy.AutomaticBrightnessStrategy2; import com.android.server.display.brightness.strategy.BoostBrightnessStrategy; Loading Loading @@ -81,10 +82,14 @@ public class DisplayBrightnessStrategySelector { @Nullable private final OffloadBrightnessStrategy mOffloadBrightnessStrategy; @Nullable private final AutoBrightnessFallbackStrategy mAutoBrightnessFallbackStrategy; // A collective representation of all the strategies that the selector is aware of. This is // non null, but the strategies this is tracking can be null @NonNull private final DisplayBrightnessStrategy[] mDisplayBrightnessStrategies; @VisibleForTesting final DisplayBrightnessStrategy[] mDisplayBrightnessStrategies; @NonNull private final DisplayManagerFlags mDisplayManagerFlags; Loading Loading @@ -120,6 +125,9 @@ public class DisplayBrightnessStrategySelector { mAutomaticBrightnessStrategy = (mDisplayManagerFlags.isRefactorDisplayPowerControllerEnabled()) ? mAutomaticBrightnessStrategy1 : mAutomaticBrightnessStrategy2; mAutoBrightnessFallbackStrategy = (mDisplayManagerFlags .isRefactorDisplayPowerControllerEnabled()) ? injector.getAutoBrightnessFallbackStrategy() : null; if (flags.isDisplayOffloadEnabled()) { mOffloadBrightnessStrategy = injector .getOffloadBrightnessStrategy(mDisplayManagerFlags); Loading @@ -129,7 +137,8 @@ public class DisplayBrightnessStrategySelector { mDisplayBrightnessStrategies = new DisplayBrightnessStrategy[]{mInvalidBrightnessStrategy, mScreenOffBrightnessStrategy, mDozeBrightnessStrategy, mFollowerBrightnessStrategy, mBoostBrightnessStrategy, mOverrideBrightnessStrategy, mTemporaryBrightnessStrategy, mAutomaticBrightnessStrategy1, mOffloadBrightnessStrategy}; mAutomaticBrightnessStrategy1, mOffloadBrightnessStrategy, mAutoBrightnessFallbackStrategy}; mAllowAutoBrightnessWhileDozingConfig = context.getResources().getBoolean( R.bool.config_allowAutoBrightnessWhileDozing); mOldBrightnessStrategyName = mInvalidBrightnessStrategy.getName(); Loading Loading @@ -168,6 +177,8 @@ public class DisplayBrightnessStrategySelector { && mOffloadBrightnessStrategy != null && BrightnessUtils.isValidBrightnessValue( mOffloadBrightnessStrategy.getOffloadScreenBrightness())) { displayBrightnessStrategy = mOffloadBrightnessStrategy; } else if (isAutoBrightnessFallbackStrategyValid()) { displayBrightnessStrategy = mAutoBrightnessFallbackStrategy; } if (mDisplayManagerFlags.isRefactorDisplayPowerControllerEnabled()) { Loading Loading @@ -210,6 +221,11 @@ public class DisplayBrightnessStrategySelector { return mAllowAutoBrightnessWhileDozingConfig; } @Nullable public AutoBrightnessFallbackStrategy getAutoBrightnessFallbackStrategy() { return mAutoBrightnessFallbackStrategy; } /** * Dumps the state of this class. */ Loading @@ -229,6 +245,13 @@ public class DisplayBrightnessStrategySelector { } } private boolean isAutoBrightnessFallbackStrategyValid() { return mDisplayManagerFlags.isRefactorDisplayPowerControllerEnabled() && mAutoBrightnessFallbackStrategy != null && getAutomaticBrightnessStrategy().shouldUseAutoBrightness() && mAutoBrightnessFallbackStrategy.isValid(); } private boolean isAutomaticBrightnessStrategyValid( StrategySelectionRequest strategySelectionRequest) { mAutomaticBrightnessStrategy1.setAutoBrightnessState( Loading @@ -250,7 +273,8 @@ public class DisplayBrightnessStrategySelector { selectedDisplayBrightnessStrategy, strategySelectionRequest.getLastUserSetScreenBrightness(), strategySelectionRequest.isUserSetBrightnessChanged(), isAllowAutoBrightnessWhileDozingConfig()); isAllowAutoBrightnessWhileDozingConfig(), getAutomaticBrightnessStrategy().shouldUseAutoBrightness()); } private void postProcess(StrategySelectionNotifyRequest strategySelectionNotifyRequest) { Loading Loading @@ -319,5 +343,9 @@ public class DisplayBrightnessStrategySelector { DisplayManagerFlags displayManagerFlags) { return new OffloadBrightnessStrategy(displayManagerFlags); } AutoBrightnessFallbackStrategy getAutoBrightnessFallbackStrategy() { return new AutoBrightnessFallbackStrategy(/* injector= */ null); } } }