From 4be1126d25910417be5a7884a8de441024b61fcb Mon Sep 17 00:00:00 2001 From: Fiona Campbell Date: Wed, 30 Nov 2022 13:01:58 +0000 Subject: [PATCH] Allow No Sensor to be Specified in DDC Adding the following: to the DDC, will stop any fallback from being used, and allow the usage of no sensor to be used for that display. This is useful for when a display has no sensor and the fallback should not be used. If this is not added to the ddc, the fallback will still only occur if the display is the default display. Bug: 202604469 Test: dumpsys display | grep mProximitySensor Test: com.android.server.display Change-Id: I018b334a443f6b9a36aaeca70c673bac86446402 Merged-In: I8508a191b7c7c5990929e4d020ffd144c7faeef7 --- .../server/display/DisplayDeviceConfig.java | 20 +++++++++++++++---- .../server/display/utils/SensorUtils.java | 3 +++ .../display/DisplayDeviceConfigTest.java | 6 ++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java index 687d03d4f7744..2be2d584f9a3a 100644 --- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java +++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java @@ -1412,7 +1412,7 @@ public class DisplayDeviceConfig { loadBrightnessRampsFromConfigXml(); loadAmbientLightSensorFromConfigXml(); loadBrightnessChangeThresholdsFromXml(); - setProxSensorUnspecified(); + useFallbackProxSensor(); loadAutoBrightnessConfigsFromConfigXml(); loadAutoBrightnessAvailableFromConfigXml(); mLoadedFrom = ""; @@ -1432,7 +1432,7 @@ public class DisplayDeviceConfig { mBrightnessRampIncreaseMaxMillis = 0; setSimpleMappingStrategyValues(); loadAmbientLightSensorFromConfigXml(); - setProxSensorUnspecified(); + useFallbackProxSensor(); loadAutoBrightnessAvailableFromConfigXml(); } @@ -1941,7 +1941,12 @@ public class DisplayDeviceConfig { } } - private void setProxSensorUnspecified() { + private void useFallbackProxSensor() { + mProximitySensor.name = null; + mProximitySensor.type = null; + } + + private void useNullProxSensor() { mProximitySensor.name = ""; mProximitySensor.type = ""; } @@ -1949,6 +1954,12 @@ public class DisplayDeviceConfig { private void loadProxSensorFromDdc(DisplayConfiguration config) { SensorDetails sensorDetails = config.getProxSensor(); if (sensorDetails != null) { + if (sensorDetails.getName() == null && sensorDetails.getType() == null) { + // If prox sensor is defined, but no details given, this is assumed that + // the display does not have or wish to use a prox sensor for it. + useNullProxSensor(); + return; + } mProximitySensor.name = sensorDetails.getName(); mProximitySensor.type = sensorDetails.getType(); final RefreshRateRange rr = sensorDetails.getRefreshRate(); @@ -1957,7 +1968,8 @@ public class DisplayDeviceConfig { mProximitySensor.maxRefreshRate = rr.getMaximum().floatValue(); } } else { - setProxSensorUnspecified(); + // If prox sensor is unspecified, then use a fallback. + useFallbackProxSensor(); } } diff --git a/services/core/java/com/android/server/display/utils/SensorUtils.java b/services/core/java/com/android/server/display/utils/SensorUtils.java index cb40b406899f6..4924ad525fccf 100644 --- a/services/core/java/com/android/server/display/utils/SensorUtils.java +++ b/services/core/java/com/android/server/display/utils/SensorUtils.java @@ -33,6 +33,9 @@ public class SensorUtils { */ public static Sensor findSensor(SensorManager sensorManager, String sensorType, String sensorName, int fallbackType) { + if ("".equals(sensorName) && "".equals(sensorType)) { + return null; + } final boolean isNameSpecified = !TextUtils.isEmpty(sensorName); final boolean isTypeSpecified = !TextUtils.isEmpty(sensorType); if (isNameSpecified || isTypeSpecified) { diff --git a/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java b/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java index 30024fb5c2214..7f341fff514db 100644 --- a/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java +++ b/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java @@ -148,6 +148,8 @@ public final class DisplayDeviceConfigTest { assertArrayEquals(new float[]{23, 24, 25}, mDisplayDeviceConfig.getAmbientDarkeningPercentagesIdle(), ZERO_DELTA); + assertEquals("ProximitySensor123", mDisplayDeviceConfig.getProximitySensor().name); + assertEquals("prox_type_1", mDisplayDeviceConfig.getProximitySensor().type); // Todo(brup): Add asserts for BrightnessThrottlingData, DensityMapping, // HighBrightnessModeData AmbientLightSensor, RefreshRateLimitations and ProximitySensor. @@ -420,6 +422,10 @@ public final class DisplayDeviceConfigTest { + "\n" + "\n" + "\n" + + "\n" + + "ProximitySensor123\n" + + "prox_type_1\n" + + "\n" + "\n"; }