Merge "DisplayConfig: Add flag-protected option to select Fusion Proximity sensor." into main
diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java
index 61ecb93..70668cb 100644
--- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java
+++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java
@@ -2139,7 +2139,7 @@
mAmbientLightSensor = SensorData.loadAmbientLightSensorConfig(config,
mContext.getResources());
mScreenOffBrightnessSensor = SensorData.loadScreenOffBrightnessSensorConfig(config);
- mProximitySensor = SensorData.loadProxSensorConfig(config);
+ mProximitySensor = SensorData.loadProxSensorConfig(mFlags, config);
mTempSensor = SensorData.loadTempSensorConfig(mFlags, config);
loadAmbientHorizonFromDdc(config);
loadBrightnessChangeThresholds(config);
diff --git a/services/core/java/com/android/server/display/config/SensorData.java b/services/core/java/com/android/server/display/config/SensorData.java
index 8e716f8..6ad13c3 100644
--- a/services/core/java/com/android/server/display/config/SensorData.java
+++ b/services/core/java/com/android/server/display/config/SensorData.java
@@ -129,21 +129,46 @@
* Loads proximity sensor data from DisplayConfiguration
*/
@Nullable
- public static SensorData loadProxSensorConfig(DisplayConfiguration config) {
- SensorDetails sensorDetails = config.getProxSensor();
- if (sensorDetails != null) {
- String name = sensorDetails.getName();
- String type = sensorDetails.getType();
- if ("".equals(name) && "".equals(type)) {
+ public static SensorData loadProxSensorConfig(
+ DisplayManagerFlags flags, DisplayConfiguration config) {
+ SensorData DEFAULT_SENSOR = new SensorData();
+ List<SensorDetails> sensorDetailsList = config.getProxSensor();
+ if (sensorDetailsList.isEmpty()) {
+ return DEFAULT_SENSOR;
+ }
+
+ SensorData selectedSensor = DEFAULT_SENSOR;
+ // Prioritize flagged sensors.
+ for (SensorDetails sensorDetails : sensorDetailsList) {
+ String flagStr = sensorDetails.getFeatureFlag();
+ if (flags.isUseFusionProxSensorEnabled() &&
+ flags.getUseFusionProxSensorFlagName().equals(flagStr)) {
+ selectedSensor = loadSensorData(sensorDetails);
+ break;
+ }
+ }
+
+ // Check for normal un-flagged sensor if a flagged one wasn't found.
+ if (DEFAULT_SENSOR == selectedSensor) {
+ for (SensorDetails sensorDetails : sensorDetailsList) {
+ if (sensorDetails.getFeatureFlag() != null) {
+ continue;
+ }
+ selectedSensor = loadSensorData(sensorDetails);
+ break;
+ }
+ }
+
+ // Check if we shouldn't use a sensor at all.
+ if (DEFAULT_SENSOR != selectedSensor) {
+ if ("".equals(selectedSensor.name) && "".equals(selectedSensor.type)) {
// <proxSensor> with empty values to the config means no sensor should be used.
// See also {@link com.android.server.display.utils.SensorUtils}
- return null;
- } else {
- return loadSensorData(sensorDetails);
+ selectedSensor = null;
}
- } else {
- return new SensorData();
}
+
+ return selectedSensor;
}
/**
diff --git a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java
index 81f824e..50b1464 100644
--- a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java
+++ b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java
@@ -144,12 +144,15 @@
Flags::idleScreenRefreshRateTimeout
);
-
private final FlagState mRefactorDisplayPowerController = new FlagState(
Flags.FLAG_REFACTOR_DISPLAY_POWER_CONTROLLER,
Flags::refactorDisplayPowerController
);
+ private final FlagState mUseFusionProxSensor = new FlagState(
+ Flags.FLAG_USE_FUSION_PROX_SENSOR,
+ Flags::useFusionProxSensor
+ );
/**
* @return {@code true} if 'port' is allowed in display layout configuration file.
@@ -301,6 +304,14 @@
return mRefactorDisplayPowerController.isEnabled();
}
+ public boolean isUseFusionProxSensorEnabled() {
+ return mUseFusionProxSensor.isEnabled();
+ }
+
+ public String getUseFusionProxSensorFlagName() {
+ return mUseFusionProxSensor.getName();
+ }
+
/**
* dumps all flagstates
* @param pw printWriter
@@ -331,6 +342,7 @@
pw.println(" " + mIdleScreenRefreshRateTimeout);
pw.println(" " + mRefactorDisplayPowerController);
pw.println(" " + mResolutionBackupRestore);
+ pw.println(" " + mUseFusionProxSensor);
}
private static class FlagState {
@@ -346,6 +358,10 @@
mFlagFunction = flagFunction;
}
+ private String getName() {
+ return mName;
+ }
+
private boolean isEnabled() {
if (mEnabledSet) {
if (DEBUG) {
diff --git a/services/core/java/com/android/server/display/feature/display_flags.aconfig b/services/core/java/com/android/server/display/feature/display_flags.aconfig
index 49a8553..d4319cc 100644
--- a/services/core/java/com/android/server/display/feature/display_flags.aconfig
+++ b/services/core/java/com/android/server/display/feature/display_flags.aconfig
@@ -235,3 +235,11 @@
bug: "310026579"
is_fixed_read_only: true
}
+
+flag {
+ name: "use_fusion_prox_sensor"
+ namespace: "display_manager"
+ description: "Feature flag to control usage of a Fusion Proximity sensor if configued."
+ bug: "306203895"
+ is_fixed_read_only: true
+}
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 755a7f8..8598023 100644
--- a/services/core/xsd/display-device-config/display-device-config.xsd
+++ b/services/core/xsd/display-device-config/display-device-config.xsd
@@ -114,7 +114,7 @@
<xs:element type="sensorDetails" name="screenOffBrightnessSensor">
<xs:annotation name="final"/>
</xs:element>
- <xs:element type="sensorDetails" name="proxSensor">
+ <xs:element type="sensorDetails" name="proxSensor" maxOccurs="2">
<xs:annotation name="final"/>
</xs:element>
<xs:element type="sensorDetails" name="tempSensor">
@@ -478,6 +478,7 @@
</xs:simpleType>
<xs:complexType name="sensorDetails">
+ <xs:attribute name="featureFlag" type="xs:string" use="optional"/>
<xs:sequence>
<xs:element type="xs:string" name="type" minOccurs="0" maxOccurs="1">
<xs:annotation name="nullable"/>
diff --git a/services/core/xsd/display-device-config/schema/current.txt b/services/core/xsd/display-device-config/schema/current.txt
index 4fa77d9..4ce4cc3 100644
--- a/services/core/xsd/display-device-config/schema/current.txt
+++ b/services/core/xsd/display-device-config/schema/current.txt
@@ -117,7 +117,7 @@
method public com.android.server.display.config.LuxThrottling getLuxThrottling();
method @Nullable public final String getName();
method public com.android.server.display.config.PowerThrottlingConfig getPowerThrottlingConfig();
- method public final com.android.server.display.config.SensorDetails getProxSensor();
+ method public final java.util.List<com.android.server.display.config.SensorDetails> getProxSensor();
method public com.android.server.display.config.DisplayQuirks getQuirks();
method public com.android.server.display.config.RefreshRateConfigs getRefreshRate();
method public final java.math.BigDecimal getScreenBrightnessCapForWearBedtimeMode();
@@ -154,7 +154,6 @@
method public void setLuxThrottling(com.android.server.display.config.LuxThrottling);
method public final void setName(@Nullable String);
method public void setPowerThrottlingConfig(com.android.server.display.config.PowerThrottlingConfig);
- method public final void setProxSensor(com.android.server.display.config.SensorDetails);
method public void setQuirks(com.android.server.display.config.DisplayQuirks);
method public void setRefreshRate(com.android.server.display.config.RefreshRateConfigs);
method public final void setScreenBrightnessCapForWearBedtimeMode(java.math.BigDecimal);
@@ -405,10 +404,12 @@
public class SensorDetails {
ctor public SensorDetails();
+ method public String getFeatureFlag();
method @Nullable public final String getName();
method @Nullable public final com.android.server.display.config.RefreshRateRange getRefreshRate();
method @Nullable public final com.android.server.display.config.NonNegativeFloatToFloatMap getSupportedModes();
method @Nullable public final String getType();
+ method public void setFeatureFlag(String);
method public final void setName(@Nullable String);
method public final void setRefreshRate(@Nullable com.android.server.display.config.RefreshRateRange);
method public final void setSupportedModes(@Nullable com.android.server.display.config.NonNegativeFloatToFloatMap);