summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/display/DisplayDeviceConfig.java26
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java40
-rw-r--r--services/core/xsd/display-device-config/display-device-config.xsd3
-rw-r--r--services/core/xsd/display-device-config/schema/current.txt2
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);