Merge "Allow proximity sensor to be specified per display" into sc-dev

This commit is contained in:
Fiona Campbell
2021-05-05 15:57:30 +00:00
committed by Android (Google) Code Review
4 changed files with 59 additions and 12 deletions

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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>

View File

@@ -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);