diff options
| author | 2019-03-08 21:24:36 +0000 | |
|---|---|---|
| committer | 2019-03-08 21:24:36 +0000 | |
| commit | e02db663df01bc6b6508b80dd39e22cdc1424648 (patch) | |
| tree | 72c784e9594c2212386b0eb4db9af7a90ade58c3 | |
| parent | 2fbf90c6ae01c7dab2caab33cfc1005ab0874c30 (diff) | |
Allow the light sensor type to be defined per-device.
This lets us use specialized light sensors where available.
Bug: 126548097
Test: manual
Change-Id: I760156ad9f97349a1dd109993b803fa5d2d33bf8
4 files changed, 30 insertions, 3 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index b7f594e6924d..442ad7e93220 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -3943,4 +3943,8 @@ <!-- The default peak refresh rate for a given device. Change this value if you want to allow for higher refresh rates to be automatically used out of the box --> <integer name="config_defaultPeakRefreshRate">60</integer> + + <!-- The type of the light sensor to be used by the display framework for things like + auto-brightness. If unset, then it just gets the default sensor of type TYPE_LIGHT. --> + <string name="config_displayLightSensorType" translatable="false" /> </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 13551e71b371..309359940ad9 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3693,5 +3693,9 @@ <java-symbol type="string" name="mime_type_presentation" /> <java-symbol type="string" name="mime_type_presentation_ext" /> + <!-- For high refresh rate displays --> <java-symbol type="integer" name="config_defaultPeakRefreshRate" /> + + <!-- For Auto-Brightness --> + <java-symbol type="string" name="config_displayLightSensorType" /> </resources> diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java index 1f28a6cf0951..6d7dff5736fa 100644 --- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java +++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java @@ -216,7 +216,7 @@ class AutomaticBrightnessController { private PackageManager mPackageManager; public AutomaticBrightnessController(Callbacks callbacks, Looper looper, - SensorManager sensorManager, BrightnessMappingStrategy mapper, + SensorManager sensorManager, Sensor lightSensor, BrightnessMappingStrategy mapper, int lightSensorWarmUpTime, int brightnessMin, int brightnessMax, float dozeScaleFactor, int lightSensorRate, int initialLightSensorRate, long brighteningLightDebounceConfig, long darkeningLightDebounceConfig, boolean resetAmbientLuxAfterWarmUpConfig, @@ -249,7 +249,7 @@ class AutomaticBrightnessController { new AmbientLightRingBuffer(mNormalLightSensorRate, mAmbientLightHorizon); if (!DEBUG_PRETEND_LIGHT_SENSOR_ABSENT) { - mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); + mLightSensor = lightSensor; } mActivityTaskManager = ActivityTaskManager.getService(); diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index 74cda9df4323..b79ead05c074 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -44,6 +44,7 @@ import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; import android.provider.Settings; +import android.text.TextUtils; import android.util.MathUtils; import android.util.Slog; import android.util.TimeUtils; @@ -58,6 +59,7 @@ import com.android.server.display.whitebalance.DisplayWhiteBalanceSettings; import com.android.server.policy.WindowManagerPolicy; import java.io.PrintWriter; +import java.util.List; /** * Controls the power state of the display. @@ -474,10 +476,14 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call int shortTermModelTimeout = resources.getInteger( com.android.internal.R.integer.config_autoBrightnessShortTermModelTimeout); + String lightSensorType = resources.getString( + com.android.internal.R.string.config_displayLightSensorType); + Sensor lightSensor = findDisplayLightSensor(lightSensorType); + mBrightnessMapper = BrightnessMappingStrategy.create(resources); if (mBrightnessMapper != null) { mAutomaticBrightnessController = new AutomaticBrightnessController(this, - handler.getLooper(), sensorManager, mBrightnessMapper, + handler.getLooper(), sensorManager, lightSensor, mBrightnessMapper, lightSensorWarmUpTimeConfig, mScreenBrightnessRangeMinimum, mScreenBrightnessRangeMaximum, dozeScaleFactor, lightSensorRate, initialLightSensorRate, brighteningLightDebounce, darkeningLightDebounce, @@ -530,6 +536,19 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mDisplayWhiteBalanceController = displayWhiteBalanceController; } + private Sensor findDisplayLightSensor(String sensorType) { + if (!TextUtils.isEmpty(sensorType)) { + List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL); + for (int i = 0; i < sensors.size(); i++) { + Sensor sensor = sensors.get(i); + if (sensorType.equals(sensor.getStringType())) { + return sensor; + } + } + } + return mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); + } + /** * Returns true if the proximity sensor screen-off function is available. */ |