diff options
3 files changed, 69 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java index bd22e1d21dea..4c4cf6080965 100644 --- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java +++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java @@ -16,6 +16,7 @@ package com.android.server.display; +import static com.android.server.display.BrightnessMappingStrategy.INVALID_NITS; import static com.android.server.display.utils.DeviceConfigParsingUtils.ambientBrightnessThresholdsIntToFloat; import static com.android.server.display.utils.DeviceConfigParsingUtils.displayBrightnessThresholdsIntToFloat; @@ -567,7 +568,8 @@ public class DisplayDeviceConfig { public static final int DEFAULT_LOW_REFRESH_RATE = 60; - private static final float BRIGHTNESS_DEFAULT = 0.5f; + @VisibleForTesting + static final float BRIGHTNESS_DEFAULT = 0.5f; private static final String ETC_DIR = "etc"; private static final String DISPLAY_CONFIG_DIR = "displayconfig"; private static final String CONFIG_FILE_FORMAT = "display_%s.xml"; @@ -597,8 +599,6 @@ public class DisplayDeviceConfig { // so -2 is used instead private static final float INVALID_BRIGHTNESS_IN_CONFIG = -2f; - static final float NITS_INVALID = -1; - // Length of the ambient light horizon used to calculate the long term estimate of ambient // light. private static final int AMBIENT_LIGHT_LONG_HORIZON_MILLIS = 10000; @@ -1031,11 +1031,12 @@ public class DisplayDeviceConfig { /** * Calculates the nits value for the specified backlight value if a mapping exists. * - * @return The mapped nits or {@link #NITS_INVALID} if no mapping exits. + * @return The mapped nits or {@link BrightnessMappingStrategy.INVALID_NITS} if no mapping + * exits. */ public float getNitsFromBacklight(float backlight) { if (mBacklightToNitsSpline == null) { - return NITS_INVALID; + return INVALID_NITS; } backlight = Math.max(backlight, mBacklightMinimum); return mBacklightToNitsSpline.interpolate(backlight); @@ -1061,7 +1062,7 @@ public class DisplayDeviceConfig { float backlight = getBacklightFromBrightness(brightness); float nits = getNitsFromBacklight(backlight); - if (nits == NITS_INVALID) { + if (nits == INVALID_NITS) { return PowerManager.BRIGHTNESS_INVALID; } diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java index 25576ce9efd6..3a6333099b77 100644 --- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java +++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java @@ -19,6 +19,8 @@ package com.android.server.display; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.view.Display.Mode.INVALID_MODE_ID; +import static com.android.server.display.BrightnessMappingStrategy.INVALID_NITS; + import android.annotation.Nullable; import android.app.ActivityThread; import android.content.Context; @@ -956,8 +958,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { void handleHdrSdrNitsChanged(float displayNits, float sdrNits) { final float newHdrSdrRatio; - if (displayNits != DisplayDeviceConfig.NITS_INVALID - && sdrNits != DisplayDeviceConfig.NITS_INVALID) { + if (displayNits != INVALID_NITS && sdrNits != INVALID_NITS) { // Ensure the ratio stays >= 1.0f as values below that are nonsensical newHdrSdrRatio = Math.max(1.f, displayNits / sdrNits); } else { diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java index 7a84406f1b08..4e009a950337 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java @@ -41,6 +41,7 @@ import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; import android.hardware.display.DisplayManagerInternal; +import android.os.PowerManager; import android.os.Temperature; import android.provider.Settings; import android.util.SparseArray; @@ -109,6 +110,43 @@ public final class DisplayDeviceConfigTest { } @Test + public void testDefaultValues() { + when(mResources.getString(com.android.internal.R.string.config_displayLightSensorType)) + .thenReturn("test_light_sensor"); + when(mResources.getBoolean(R.bool.config_automatic_brightness_available)).thenReturn(true); + + mDisplayDeviceConfig = DisplayDeviceConfig.create(mContext, /* useConfigXml= */ false, + mFlags); + + assertEquals(DisplayDeviceConfig.BRIGHTNESS_DEFAULT, + mDisplayDeviceConfig.getBrightnessDefault(), ZERO_DELTA); + assertEquals(PowerManager.BRIGHTNESS_MAX, + mDisplayDeviceConfig.getBrightnessRampFastDecrease(), ZERO_DELTA); + assertEquals(PowerManager.BRIGHTNESS_MAX, + mDisplayDeviceConfig.getBrightnessRampFastIncrease(), ZERO_DELTA); + assertEquals(PowerManager.BRIGHTNESS_MAX, + mDisplayDeviceConfig.getBrightnessRampSlowDecrease(), ZERO_DELTA); + assertEquals(PowerManager.BRIGHTNESS_MAX, + mDisplayDeviceConfig.getBrightnessRampSlowIncrease(), ZERO_DELTA); + assertEquals(PowerManager.BRIGHTNESS_MAX, + mDisplayDeviceConfig.getBrightnessRampSlowDecreaseIdle(), ZERO_DELTA); + assertEquals(PowerManager.BRIGHTNESS_MAX, + mDisplayDeviceConfig.getBrightnessRampSlowIncreaseIdle(), ZERO_DELTA); + assertEquals(0, mDisplayDeviceConfig.getBrightnessRampDecreaseMaxMillis()); + assertEquals(0, mDisplayDeviceConfig.getBrightnessRampIncreaseMaxMillis()); + assertEquals(0, mDisplayDeviceConfig.getBrightnessRampDecreaseMaxIdleMillis()); + assertEquals(0, mDisplayDeviceConfig.getBrightnessRampIncreaseMaxIdleMillis()); + assertNull(mDisplayDeviceConfig.getNits()); + assertNull(mDisplayDeviceConfig.getBacklight()); + assertEquals(0.3f, mDisplayDeviceConfig.getBacklightFromBrightness(0.3f), ZERO_DELTA); + assertEquals("test_light_sensor", mDisplayDeviceConfig.getAmbientLightSensor().type); + assertEquals("", mDisplayDeviceConfig.getAmbientLightSensor().name); + assertNull(mDisplayDeviceConfig.getProximitySensor().type); + assertNull(mDisplayDeviceConfig.getProximitySensor().name); + assertTrue(mDisplayDeviceConfig.isAutoBrightnessAvailable()); + } + + @Test public void testConfigValuesFromDisplayConfig() throws IOException { setupDisplayDeviceConfigFromDisplayConfigFile(); @@ -681,6 +719,7 @@ public final class DisplayDeviceConfigTest { assertEquals("test_light_sensor", mDisplayDeviceConfig.getAmbientLightSensor().type); assertEquals("", mDisplayDeviceConfig.getAmbientLightSensor().name); + assertTrue(mDisplayDeviceConfig.isAutoBrightnessAvailable()); assertEquals(brightnessIntToFloat(35), mDisplayDeviceConfig.getBrightnessCapForWearBedtimeMode(), ZERO_DELTA); @@ -798,6 +837,24 @@ public final class DisplayDeviceConfigTest { mDisplayDeviceConfig.getAutoBrightnessBrighteningLevelsNits(), SMALL_DELTA); } + @Test + public void testIsAutoBrightnessAvailable_EnabledInConfigResource() throws IOException { + when(mResources.getBoolean(R.bool.config_automatic_brightness_available)).thenReturn(true); + + setupDisplayDeviceConfigFromDisplayConfigFile(); + + assertTrue(mDisplayDeviceConfig.isAutoBrightnessAvailable()); + } + + @Test + public void testIsAutoBrightnessAvailable_DisabledInConfigResource() throws IOException { + when(mResources.getBoolean(R.bool.config_automatic_brightness_available)).thenReturn(false); + + setupDisplayDeviceConfigFromDisplayConfigFile(); + + assertFalse(mDisplayDeviceConfig.isAutoBrightnessAvailable()); + } + private String getValidLuxThrottling() { return "<luxThrottling>\n" + " <brightnessLimitMap>\n" @@ -1167,7 +1224,7 @@ public final class DisplayDeviceConfigTest { + "<nits>" + NITS[2] + "</nits>\n" + "</point>\n" + "</screenBrightnessMap>\n" - + "<autoBrightness>\n" + + "<autoBrightness enabled=\"true\">\n" + "<brighteningLightDebounceMillis>2000</brighteningLightDebounceMillis>\n" + "<darkeningLightDebounceMillis>1000</darkeningLightDebounceMillis>\n" + (includeIdleMode ? getRampSpeedsIdle() : "") @@ -1570,6 +1627,7 @@ public final class DisplayDeviceConfigTest { when(mResources.getString(com.android.internal.R.string.config_displayLightSensorType)) .thenReturn("test_light_sensor"); + when(mResources.getBoolean(R.bool.config_automatic_brightness_available)).thenReturn(true); when(mResources.getInteger( R.integer.config_autoBrightnessBrighteningLightDebounce)) |