diff options
4 files changed, 59 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java index c46cfe3d1d2f..d865dfbf4775 100644 --- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java +++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java @@ -79,6 +79,9 @@ public class DisplayDeviceConfig { // The details of the ambient light sensor associated with this display. private final SensorIdentifier mAmbientLightSensor = new SensorIdentifier(); + // The details of the proximity sensor associated with this display. + private final SensorIdentifier mProximitySensor = new SensorIdentifier(); + // Nits and backlight values that are loaded from either the display device config file, or // config.xml. These are the raw values and just used for the dumpsys private float[] mRawNits; @@ -272,6 +275,10 @@ public class DisplayDeviceConfig { return mAmbientLightSensor; } + SensorIdentifier getProximitySensor() { + return mProximitySensor; + } + /** * @return true if a nits to backlight mapping is defined in this config, false otherwise. */ @@ -322,6 +329,7 @@ public class DisplayDeviceConfig { + ", mBrightnessRampSlowDecrease=" + mBrightnessRampSlowDecrease + ", mBrightnessRampSlowIncrease=" + mBrightnessRampSlowIncrease + ", mAmbientLightSensor=" + mAmbientLightSensor + + ", mProximitySensor=" + mProximitySensor + "}"; return str; } @@ -374,6 +382,7 @@ public class DisplayDeviceConfig { loadQuirks(config); loadBrightnessRamps(config); loadAmbientLightSensorFromDdc(config); + loadProxSensorFromDdc(config); } else { Slog.w(TAG, "DisplayDeviceConfig file is null"); } @@ -390,6 +399,7 @@ public class DisplayDeviceConfig { loadBrightnessMapFromConfigXml(); loadBrightnessRampsFromConfigXml(); loadAmbientLightSensorFromConfigXml(); + setProxSensorUnspecified(); } private void initFromDefaultValues() { @@ -403,6 +413,7 @@ public class DisplayDeviceConfig { mBrightnessRampSlowIncrease = PowerManager.BRIGHTNESS_MAX; setSimpleMappingStrategyValues(); loadAmbientLightSensorFromConfigXml(); + setProxSensorUnspecified(); } private void loadBrightnessDefaultFromDdcXml(DisplayConfiguration config) { @@ -686,6 +697,21 @@ public class DisplayDeviceConfig { } } + private void setProxSensorUnspecified() { + mProximitySensor.name = ""; + mProximitySensor.type = ""; + } + + private void loadProxSensorFromDdc(DisplayConfiguration config) { + SensorDetails sensorDetails = config.getProxSensor(); + if (sensorDetails != null) { + mProximitySensor.name = sensorDetails.getName(); + mProximitySensor.type = sensorDetails.getType(); + } else { + setProxSensorUnspecified(); + } + } + static class SensorIdentifier { public String type; public String name; diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index 7a50a34ae4ad..4ad8797a14bf 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -584,15 +584,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mBrightnessBucketsInDozeConfig = resources.getBoolean( com.android.internal.R.bool.config_displayBrightnessBucketsInDoze); - if (mDisplayId == Display.DEFAULT_DISPLAY && !DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) { - // TODO: b/178385123 Once there are sensor associations, we can enable proximity for - // non-default displays. - mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); - if (mProximitySensor != null) { - mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(), - TYPICAL_PROXIMITY_THRESHOLD); - } - } + loadProximitySensor(); + mCurrentScreenBrightnessSetting = getScreenBrightnessSetting(); mScreenBrightnessForVr = getScreenBrightnessForVrSetting(); mAutoBrightnessAdjustment = getAutoBrightnessAdjustmentSetting(); @@ -658,7 +651,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mBrightnessMapper.recalculateSplines(mCdsi.isReduceBrightColorsActivated(), adjustedNits); } - private Sensor findSensor(String sensorType, String sensorName, int fallbackType) { + private Sensor findSensor(String sensorType, String sensorName, int fallbackType, + boolean useFallback) { final boolean isNameSpecified = !TextUtils.isEmpty(sensorName); final boolean isTypeSpecified = !TextUtils.isEmpty(sensorType); List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL); @@ -670,7 +664,11 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } } } - return mSensorManager.getDefaultSensor(fallbackType); + if (useFallback) { + return mSensorManager.getDefaultSensor(fallbackType); + } else { + return null; + } } /** @@ -806,6 +804,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mDisplayDeviceConfig = config; loadAmbientLightSensor(); + loadProximitySensor(); mHbmController.resetHbmData(token, config.getHighBrightnessModeData()); }); } @@ -1614,7 +1613,24 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mDisplayDeviceConfig.getAmbientLightSensor(); String lightSensorName = lightSensor.name; String lightSensorType = lightSensor.type; - mLightSensor = findSensor(lightSensorType, lightSensorName, Sensor.TYPE_LIGHT); + mLightSensor = findSensor(lightSensorType, lightSensorName, Sensor.TYPE_LIGHT, + mDisplayId == Display.DEFAULT_DISPLAY); + } + + private void loadProximitySensor() { + if (DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) { + return; + } + final DisplayDeviceConfig.SensorIdentifier proxSensor = + mDisplayDeviceConfig.getProximitySensor(); + final String proxSensorName = proxSensor.name; + final String proxSensorType = proxSensor.type; + mProximitySensor = findSensor(proxSensorType, proxSensorName, Sensor.TYPE_PROXIMITY, + mDisplayId == Display.DEFAULT_DISPLAY); + if (mProximitySensor != null) { + mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(), + TYPICAL_PROXIMITY_THRESHOLD); + } } private float clampScreenBrightnessForVr(float value) { diff --git a/services/core/xsd/display-device-config/display-device-config.xsd b/services/core/xsd/display-device-config/display-device-config.xsd index 01834ddfbeac..c6dfe9dbbfc2 100644 --- a/services/core/xsd/display-device-config/display-device-config.xsd +++ b/services/core/xsd/display-device-config/display-device-config.xsd @@ -51,6 +51,9 @@ <xs:element type="sensorDetails" name="lightSensor"> <xs:annotation name="final"/> </xs:element> + <xs:element type="sensorDetails" name="proxSensor"> + <xs:annotation name="final"/> + </xs:element> </xs:sequence> </xs:complexType> </xs:element> diff --git a/services/core/xsd/display-device-config/schema/current.txt b/services/core/xsd/display-device-config/schema/current.txt index a848f82a0cb6..7c2436db8694 100644 --- a/services/core/xsd/display-device-config/schema/current.txt +++ b/services/core/xsd/display-device-config/schema/current.txt @@ -5,6 +5,7 @@ package com.android.server.display.config { ctor public DisplayConfiguration(); method public com.android.server.display.config.HighBrightnessMode getHighBrightnessMode(); method public final com.android.server.display.config.SensorDetails getLightSensor(); + method public final com.android.server.display.config.SensorDetails getProxSensor(); method public com.android.server.display.config.DisplayQuirks getQuirks(); method @NonNull public final java.math.BigDecimal getScreenBrightnessDefault(); method @NonNull public final com.android.server.display.config.NitsMap getScreenBrightnessMap(); @@ -14,6 +15,7 @@ package com.android.server.display.config { method public final java.math.BigDecimal getScreenBrightnessRampSlowIncrease(); method public void setHighBrightnessMode(com.android.server.display.config.HighBrightnessMode); method public final void setLightSensor(com.android.server.display.config.SensorDetails); + method public final void setProxSensor(com.android.server.display.config.SensorDetails); method public void setQuirks(com.android.server.display.config.DisplayQuirks); method public final void setScreenBrightnessDefault(@NonNull java.math.BigDecimal); method public final void setScreenBrightnessMap(@NonNull com.android.server.display.config.NitsMap); |