diff options
10 files changed, 213 insertions, 68 deletions
diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java index 2314bb772494..3024dd27b5c4 100644 --- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java +++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java @@ -16,6 +16,8 @@ package com.android.server.display; +import static com.android.server.display.config.DisplayBrightnessMappingConfig.autoBrightnessModeToString; + import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; @@ -72,12 +74,14 @@ public class AutomaticBrightnessController { @IntDef(prefix = { "AUTO_BRIGHTNESS_MODE_" }, value = { AUTO_BRIGHTNESS_MODE_DEFAULT, AUTO_BRIGHTNESS_MODE_IDLE, + AUTO_BRIGHTNESS_MODE_DOZE }) @Retention(RetentionPolicy.SOURCE) public @interface AutomaticBrightnessMode{} public static final int AUTO_BRIGHTNESS_MODE_DEFAULT = 0; public static final int AUTO_BRIGHTNESS_MODE_IDLE = 1; + public static final int AUTO_BRIGHTNESS_MODE_DOZE = 2; // How long the current sensor reading is assumed to be valid beyond the current time. // This provides a bit of prediction, as well as ensures that the weight for the last sample is @@ -616,12 +620,13 @@ public class AutomaticBrightnessController { pw.println(" mPendingForegroundAppPackageName=" + mPendingForegroundAppPackageName); pw.println(" mForegroundAppCategory=" + mForegroundAppCategory); pw.println(" mPendingForegroundAppCategory=" + mPendingForegroundAppCategory); - pw.println(" Current mode=" + mCurrentBrightnessMapper.getMode()); + pw.println(" Current mode=" + + autoBrightnessModeToString(mCurrentBrightnessMapper.getMode())); pw.println(); for (int i = 0; i < mBrightnessMappingStrategyMap.size(); i++) { - pw.println(" Mapper for mode " + modeToString(mBrightnessMappingStrategyMap.keyAt(i)) - + "="); + pw.println(" Mapper for mode " + + autoBrightnessModeToString(mBrightnessMappingStrategyMap.keyAt(i)) + "="); mBrightnessMappingStrategyMap.valueAt(i).dump(pw, mBrightnessRangeController.getNormalBrightnessMax()); } @@ -1224,14 +1229,6 @@ public class AutomaticBrightnessController { } } - private String modeToString(@AutomaticBrightnessMode int mode) { - return switch (mode) { - case AUTO_BRIGHTNESS_MODE_DEFAULT -> "default"; - case AUTO_BRIGHTNESS_MODE_IDLE -> "idle"; - default -> Integer.toString(mode); - }; - } - private class ShortTermModel { // When the short term model is invalidated, we don't necessarily reset it (i.e. clear the // user's adjustment) immediately, but wait for a drastic enough change in the ambient diff --git a/services/core/java/com/android/server/display/BrightnessMappingStrategy.java b/services/core/java/com/android/server/display/BrightnessMappingStrategy.java index f2ffd4d3f1d9..6a4b00f7551f 100644 --- a/services/core/java/com/android/server/display/BrightnessMappingStrategy.java +++ b/services/core/java/com/android/server/display/BrightnessMappingStrategy.java @@ -19,6 +19,7 @@ package com.android.server.display; import static android.text.TextUtils.formatSimple; import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_DEFAULT; +import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_DOZE; import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_IDLE; import android.annotation.Nullable; @@ -98,8 +99,8 @@ public abstract class BrightnessMappingStrategy { switch (mode) { case AUTO_BRIGHTNESS_MODE_DEFAULT -> { brightnessLevelsNits = displayDeviceConfig.getAutoBrightnessBrighteningLevelsNits(); - luxLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevelsLux(); - brightnessLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevels(); + luxLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevelsLux(mode); + brightnessLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevels(mode); } case AUTO_BRIGHTNESS_MODE_IDLE -> { brightnessLevelsNits = getFloatArray(resources.obtainTypedArray( @@ -107,6 +108,10 @@ public abstract class BrightnessMappingStrategy { luxLevels = getLuxLevels(resources.getIntArray( com.android.internal.R.array.config_autoBrightnessLevelsIdle)); } + case AUTO_BRIGHTNESS_MODE_DOZE -> { + luxLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevelsLux(mode); + brightnessLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevels(mode); + } } // Display independent, mode independent values diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java index 7d22a87065b4..a6f42d7677b2 100644 --- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java +++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java @@ -1591,25 +1591,29 @@ public class DisplayDeviceConfig { } /** - * @return The default auto-brightness brightening ambient lux levels + * @param mode The auto-brightness mode + * @return The default auto-brightness brightening ambient lux levels for the specified mode + * and the normal brightness preset */ - public float[] getAutoBrightnessBrighteningLevelsLux() { + public float[] getAutoBrightnessBrighteningLevelsLux( + @AutomaticBrightnessController.AutomaticBrightnessMode int mode) { if (mDisplayBrightnessMapping == null) { return null; } - return mDisplayBrightnessMapping.getLuxArray(); + return mDisplayBrightnessMapping.getLuxArray(mode); } /** * @param mode The auto-brightness mode - * @param setting The brightness setting - * @return Auto brightness brightening ambient lux levels for the specified mode and setting + * @param preset The brightness preset. Presets are used on devices that allow users to choose + * from a set of predefined options in display auto-brightness settings. + * @return Auto brightness brightening ambient lux levels for the specified mode and preset */ - public float[] getAutoBrightnessBrighteningLevelsLux(String mode, String setting) { + public float[] getAutoBrightnessBrighteningLevelsLux(String mode, String preset) { if (mDisplayBrightnessMapping == null) { return null; } - return mDisplayBrightnessMapping.getLuxArray(mode, setting); + return mDisplayBrightnessMapping.getLuxArray(mode, preset); } /** @@ -1623,25 +1627,29 @@ public class DisplayDeviceConfig { } /** - * @return The default auto-brightness brightening levels + * @param mode The auto-brightness mode + * @return The default auto-brightness brightening levels for the specified mode and the normal + * brightness preset */ - public float[] getAutoBrightnessBrighteningLevels() { + public float[] getAutoBrightnessBrighteningLevels( + @AutomaticBrightnessController.AutomaticBrightnessMode int mode) { if (mDisplayBrightnessMapping == null) { return null; } - return mDisplayBrightnessMapping.getBrightnessArray(); + return mDisplayBrightnessMapping.getBrightnessArray(mode); } /** * @param mode The auto-brightness mode - * @param setting The brightness setting - * @return Auto brightness brightening backlight levels for the specified mode and setting + * @param preset The brightness preset. Presets are used on devices that allow users to choose + * from a set of predefined options in display auto-brightness settings. + * @return Auto brightness brightening backlight levels for the specified mode and preset */ - public float[] getAutoBrightnessBrighteningLevels(String mode, String setting) { + public float[] getAutoBrightnessBrighteningLevels(String mode, String preset) { if (mDisplayBrightnessMapping == null) { return null; } - return mDisplayBrightnessMapping.getBrightnessArray(mode, setting); + return mDisplayBrightnessMapping.getBrightnessArray(mode, preset); } /** diff --git a/services/core/java/com/android/server/display/DisplayPowerController2.java b/services/core/java/com/android/server/display/DisplayPowerController2.java index 6d09cc9d37ba..c088a6dfa95f 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController2.java +++ b/services/core/java/com/android/server/display/DisplayPowerController2.java @@ -17,6 +17,7 @@ package com.android.server.display; import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_DEFAULT; +import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_DOZE; import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_IDLE; import android.animation.Animator; @@ -1006,6 +1007,13 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal } } + BrightnessMappingStrategy dozeModeBrightnessMapper = + BrightnessMappingStrategy.create(resources, mDisplayDeviceConfig, + AUTO_BRIGHTNESS_MODE_DOZE, mDisplayWhiteBalanceController); + if (mFlags.areAutoBrightnessModesEnabled() && dozeModeBrightnessMapper != null) { + brightnessMappers.put(AUTO_BRIGHTNESS_MODE_DOZE, dozeModeBrightnessMapper); + } + float userLux = BrightnessMappingStrategy.INVALID_LUX; float userNits = BrightnessMappingStrategy.INVALID_NITS; if (mAutomaticBrightnessController != null) { @@ -1349,6 +1357,13 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal animateScreenStateChange(state, mDisplayStateController.shouldPerformScreenOffTransition()); state = mPowerState.getScreenState(); + // Switch to doze auto-brightness mode if needed + if (mFlags.areAutoBrightnessModesEnabled() && mAutomaticBrightnessController != null + && !mAutomaticBrightnessController.isInIdleMode()) { + setAutomaticScreenBrightnessMode(Display.isDozeState(state) + ? AUTO_BRIGHTNESS_MODE_DOZE : AUTO_BRIGHTNESS_MODE_DEFAULT); + } + final boolean userSetBrightnessChanged = mDisplayBrightnessController .updateUserSetScreenBrightness(); diff --git a/services/core/java/com/android/server/display/config/DisplayBrightnessMappingConfig.java b/services/core/java/com/android/server/display/config/DisplayBrightnessMappingConfig.java index 21628503adcf..8f123291d89c 100644 --- a/services/core/java/com/android/server/display/config/DisplayBrightnessMappingConfig.java +++ b/services/core/java/com/android/server/display/config/DisplayBrightnessMappingConfig.java @@ -16,11 +16,16 @@ package com.android.server.display.config; +import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_DEFAULT; +import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_DOZE; +import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_IDLE; + import android.content.Context; import android.os.PowerManager; import android.util.Spline; import com.android.internal.display.BrightnessSynchronizer; +import com.android.server.display.AutomaticBrightnessController; import com.android.server.display.DisplayDeviceConfig; import com.android.server.display.feature.DisplayManagerFlags; @@ -33,7 +38,9 @@ import java.util.Map; */ public class DisplayBrightnessMappingConfig { - private static final String DEFAULT_BRIGHTNESS_MAPPING_KEY = "default_normal"; + private static final String DEFAULT_BRIGHTNESS_PRESET_NAME = "normal"; + private static final String DEFAULT_BRIGHTNESS_MAPPING_KEY = + AutoBrightnessModeName._default.getRawName() + "_" + DEFAULT_BRIGHTNESS_PRESET_NAME; /** * Array of desired screen brightness in nits corresponding to the lux values @@ -45,19 +52,22 @@ public class DisplayBrightnessMappingConfig { /** * Map of arrays of desired screen brightness corresponding to the lux values - * in mBrightnessLevelsLuxMap, indexed by the auto-brightness mode and the brightness setting. + * in mBrightnessLevelsLuxMap, indexed by the auto-brightness mode and the brightness preset. * The brightness values must be non-negative and non-decreasing. They must be between * {@link PowerManager.BRIGHTNESS_MIN} and {@link PowerManager.BRIGHTNESS_MAX}. * - * The keys are a concatenation of the auto-brightness mode and the brightness setting - * separated by an underscore, e.g. default_normal, default_dim, default_bright, doze_normal, - * doze_dim, doze_bright. + * The keys are a concatenation of the auto-brightness mode and the brightness preset separated + * by an underscore, e.g. default_normal, default_dim, default_bright, doze_normal, doze_dim, + * doze_bright. + * + * The presets are used on devices that allow users to choose from a set of predefined options + * in display auto-brightness settings. */ private final Map<String, float[]> mBrightnessLevelsMap = new HashMap<>(); /** * Map of arrays of light sensor lux values to define our levels for auto-brightness support, - * indexed by the auto-brightness mode and the brightness setting. + * indexed by the auto-brightness mode and the brightness preset. * * The first lux value in every array is always 0. * @@ -69,9 +79,12 @@ public class DisplayBrightnessMappingConfig { * Spline interpolation is used to determine the auto-brightness values for lux levels between * these control points. * - * The keys are a concatenation of the auto-brightness mode and the brightness setting - * separated by an underscore, e.g. default_normal, default_dim, default_bright, doze_normal, - * doze_dim, doze_bright. + * The keys are a concatenation of the auto-brightness mode and the brightness preset separated + * by an underscore, e.g. default_normal, default_dim, default_bright, doze_normal, doze_dim, + * doze_bright. + * + * The presets are used on devices that allow users to choose from a set of predefined options + * in display auto-brightness settings. */ private final Map<String, float[]> mBrightnessLevelsLuxMap = new HashMap<>(); @@ -138,19 +151,23 @@ public class DisplayBrightnessMappingConfig { } /** - * @return The default auto-brightness brightening ambient lux levels + * @param mode The auto-brightness mode + * @return The default auto-brightness brightening ambient lux levels for the specified mode + * and the normal brightness preset */ - public float[] getLuxArray() { - return mBrightnessLevelsLuxMap.get(DEFAULT_BRIGHTNESS_MAPPING_KEY); + public float[] getLuxArray(@AutomaticBrightnessController.AutomaticBrightnessMode int mode) { + return mBrightnessLevelsLuxMap.get( + autoBrightnessModeToString(mode) + "_" + DEFAULT_BRIGHTNESS_PRESET_NAME); } /** * @param mode The auto-brightness mode - * @param setting The brightness setting - * @return Auto brightness brightening ambient lux levels for the specified mode and setting + * @param preset The brightness preset. Presets are used on devices that allow users to choose + * from a set of predefined options in display auto-brightness settings. + * @return Auto brightness brightening ambient lux levels for the specified mode and preset */ - public float[] getLuxArray(String mode, String setting) { - return mBrightnessLevelsLuxMap.get(mode + "_" + setting); + public float[] getLuxArray(String mode, String preset) { + return mBrightnessLevelsLuxMap.get(mode + "_" + preset); } /** @@ -161,19 +178,24 @@ public class DisplayBrightnessMappingConfig { } /** - * @return The default auto-brightness brightening levels + * @param mode The auto-brightness mode + * @return The default auto-brightness brightening levels for the specified mode and the normal + * brightness preset */ - public float[] getBrightnessArray() { - return mBrightnessLevelsMap.get(DEFAULT_BRIGHTNESS_MAPPING_KEY); + public float[] getBrightnessArray( + @AutomaticBrightnessController.AutomaticBrightnessMode int mode) { + return mBrightnessLevelsMap.get( + autoBrightnessModeToString(mode) + "_" + DEFAULT_BRIGHTNESS_PRESET_NAME); } /** * @param mode The auto-brightness mode - * @param setting The brightness setting - * @return Auto brightness brightening ambient lux levels for the specified mode and setting + * @param preset The brightness preset. Presets are used on devices that allow users to choose + * from a set of predefined options in display auto-brightness settings. + * @return Auto brightness brightening ambient lux levels for the specified mode and preset */ - public float[] getBrightnessArray(String mode, String setting) { - return mBrightnessLevelsMap.get(mode + "_" + setting); + public float[] getBrightnessArray(String mode, String preset) { + return mBrightnessLevelsMap.get(mode + "_" + preset); } @Override @@ -205,6 +227,26 @@ public class DisplayBrightnessMappingConfig { + ", mBrightnessLevelsMap= " + brightnessLevelsMapString; } + /** + * @param mode The auto-brightness mode + * @return The string representing the mode + */ + public static String autoBrightnessModeToString( + @AutomaticBrightnessController.AutomaticBrightnessMode int mode) { + switch (mode) { + case AUTO_BRIGHTNESS_MODE_DEFAULT -> { + return AutoBrightnessModeName._default.getRawName(); + } + case AUTO_BRIGHTNESS_MODE_IDLE -> { + return AutoBrightnessModeName.idle.getRawName(); + } + case AUTO_BRIGHTNESS_MODE_DOZE -> { + return AutoBrightnessModeName.doze.getRawName(); + } + default -> throw new IllegalArgumentException("Unknown auto-brightness mode: " + mode); + } + } + private float[] brightnessArrayIntToFloat(int[] brightnessInt, Spline backlightToBrightnessSpline) { float[] brightnessFloat = new float[brightnessInt.length]; 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 adbd3c9c5096..807874522b8c 100644 --- a/services/core/xsd/display-device-config/display-device-config.xsd +++ b/services/core/xsd/display-device-config/display-device-config.xsd @@ -631,7 +631,7 @@ <xs:annotation name="nonnull"/> <xs:annotation name="final"/> </xs:element> - <xs:element name="mode" type="xs:string" minOccurs="0"/> + <xs:element name="mode" type="AutoBrightnessModeName" minOccurs="0"/> <xs:element name="setting" type="xs:string" minOccurs="0"/> </xs:complexType> @@ -765,4 +765,14 @@ </xs:element> </xs:sequence> </xs:complexType> + + <!-- Predefined type names as defined by + AutomaticBrightnessController.AutomaticBrightnessMode --> + <xs:simpleType name="AutoBrightnessModeName"> + <xs:restriction base="xs:string"> + <xs:enumeration value="default"/> + <xs:enumeration value="idle"/> + <xs:enumeration value="doze"/> + </xs:restriction> + </xs:simpleType> </xs:schema> diff --git a/services/core/xsd/display-device-config/schema/current.txt b/services/core/xsd/display-device-config/schema/current.txt index 98c95edef237..91172a334bb1 100644 --- a/services/core/xsd/display-device-config/schema/current.txt +++ b/services/core/xsd/display-device-config/schema/current.txt @@ -16,6 +16,13 @@ package com.android.server.display.config { method public void setEnabled(boolean); } + public enum AutoBrightnessModeName { + method public String getRawName(); + enum_constant public static final com.android.server.display.config.AutoBrightnessModeName _default; + enum_constant public static final com.android.server.display.config.AutoBrightnessModeName doze; + enum_constant public static final com.android.server.display.config.AutoBrightnessModeName idle; + } + public class BlockingZoneConfig { ctor public BlockingZoneConfig(); method public final com.android.server.display.config.BlockingZoneThreshold getBlockingZoneThreshold(); @@ -219,10 +226,10 @@ package com.android.server.display.config { public class LuxToBrightnessMapping { ctor public LuxToBrightnessMapping(); method @NonNull public final com.android.server.display.config.NonNegativeFloatToFloatMap getMap(); - method public String getMode(); + method public com.android.server.display.config.AutoBrightnessModeName getMode(); method public String getSetting(); method public final void setMap(@NonNull com.android.server.display.config.NonNegativeFloatToFloatMap); - method public void setMode(String); + method public void setMode(com.android.server.display.config.AutoBrightnessModeName); method public void setSetting(String); } diff --git a/services/tests/displayservicetests/src/com/android/server/display/BrightnessMappingStrategyTest.java b/services/tests/displayservicetests/src/com/android/server/display/BrightnessMappingStrategyTest.java index c5a1ba1f6758..f4eaa5b7046c 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/BrightnessMappingStrategyTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/BrightnessMappingStrategyTest.java @@ -695,9 +695,11 @@ public class BrightnessMappingStrategyTest { mDdc = mock(DisplayDeviceConfig.class); when(mDdc.getNits()).thenReturn(DISPLAY_RANGE_NITS); when(mDdc.getBrightness()).thenReturn(DISPLAY_LEVELS_RANGE_BACKLIGHT_FLOAT); - when(mDdc.getAutoBrightnessBrighteningLevelsLux()).thenReturn(LUX_LEVELS); + when(mDdc.getAutoBrightnessBrighteningLevelsLux(AUTO_BRIGHTNESS_MODE_DEFAULT)) + .thenReturn(LUX_LEVELS); when(mDdc.getAutoBrightnessBrighteningLevelsNits()).thenReturn(EMPTY_FLOAT_ARRAY); - when(mDdc.getAutoBrightnessBrighteningLevels()).thenReturn(EMPTY_FLOAT_ARRAY); + when(mDdc.getAutoBrightnessBrighteningLevels(AUTO_BRIGHTNESS_MODE_DEFAULT)) + .thenReturn(EMPTY_FLOAT_ARRAY); } DdcBuilder setNitsRange(float[] nitsArray) { @@ -711,7 +713,8 @@ public class BrightnessMappingStrategyTest { } DdcBuilder setAutoBrightnessLevelsLux(float[] luxLevels) { - when(mDdc.getAutoBrightnessBrighteningLevelsLux()).thenReturn(luxLevels); + when(mDdc.getAutoBrightnessBrighteningLevelsLux(AUTO_BRIGHTNESS_MODE_DEFAULT)) + .thenReturn(luxLevels); return this; } @@ -721,7 +724,8 @@ public class BrightnessMappingStrategyTest { } DdcBuilder setAutoBrightnessLevels(float[] brightnessLevels) { - when(mDdc.getAutoBrightnessBrighteningLevels()).thenReturn(brightnessLevels); + when(mDdc.getAutoBrightnessBrighteningLevels(AUTO_BRIGHTNESS_MODE_DEFAULT)) + .thenReturn(brightnessLevels); return this; } 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 a4c15b5c5725..61c60765c966 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java @@ -18,6 +18,7 @@ package com.android.server.display; import static com.android.internal.display.BrightnessSynchronizer.brightnessIntToFloat; +import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_DEFAULT; import static com.android.server.display.config.SensorData.SupportedMode; import static com.android.server.display.utils.DeviceConfigParsingUtils.ambientBrightnessThresholdsIntToFloat; import static com.android.server.display.utils.DeviceConfigParsingUtils.displayBrightnessThresholdsIntToFloat; @@ -605,13 +606,13 @@ public final class DisplayDeviceConfigTest { private void verifyConfigValuesFromConfigResource() { assertNull(mDisplayDeviceConfig.getName()); - assertArrayEquals(mDisplayDeviceConfig.getAutoBrightnessBrighteningLevelsNits(), new - float[]{2.0f, 200.0f, 600.0f}, ZERO_DELTA); - assertArrayEquals(mDisplayDeviceConfig.getAutoBrightnessBrighteningLevelsLux(), new - float[]{0.0f, 110.0f, 500.0f}, ZERO_DELTA); - assertArrayEquals(mDisplayDeviceConfig.getAutoBrightnessBrighteningLevels(), new - float[]{brightnessIntToFloat(50), brightnessIntToFloat(100), - brightnessIntToFloat(150)}, SMALL_DELTA); + assertArrayEquals(mDisplayDeviceConfig.getAutoBrightnessBrighteningLevelsNits(), + new float[]{2.0f, 200.0f, 600.0f}, ZERO_DELTA); + assertArrayEquals(mDisplayDeviceConfig.getAutoBrightnessBrighteningLevelsLux( + AUTO_BRIGHTNESS_MODE_DEFAULT), new float[]{0.0f, 110.0f, 500.0f}, ZERO_DELTA); + assertArrayEquals(mDisplayDeviceConfig.getAutoBrightnessBrighteningLevels( + AUTO_BRIGHTNESS_MODE_DEFAULT), new float[]{brightnessIntToFloat(50), + brightnessIntToFloat(100), brightnessIntToFloat(150)}, SMALL_DELTA); // Test thresholds assertEquals(0, mDisplayDeviceConfig.getAmbientLuxBrighteningMinThreshold(), ZERO_DELTA); @@ -737,9 +738,11 @@ public final class DisplayDeviceConfigTest { getValidProxSensor(), /* includeIdleMode= */ false)); assertArrayEquals(new float[]{0.0f, 80}, - mDisplayDeviceConfig.getAutoBrightnessBrighteningLevelsLux(), ZERO_DELTA); + mDisplayDeviceConfig.getAutoBrightnessBrighteningLevelsLux( + AUTO_BRIGHTNESS_MODE_DEFAULT), ZERO_DELTA); assertArrayEquals(new float[]{0.2f, 0.3f}, - mDisplayDeviceConfig.getAutoBrightnessBrighteningLevels(), SMALL_DELTA); + mDisplayDeviceConfig.getAutoBrightnessBrighteningLevels( + AUTO_BRIGHTNESS_MODE_DEFAULT), SMALL_DELTA); assertArrayEquals(new float[]{0.0f, 90}, mDisplayDeviceConfig.getAutoBrightnessBrighteningLevelsLux("default", "dim"), @@ -772,9 +775,11 @@ public final class DisplayDeviceConfigTest { assertArrayEquals(new float[]{brightnessIntToFloat(50), brightnessIntToFloat(100), brightnessIntToFloat(150)}, - mDisplayDeviceConfig.getAutoBrightnessBrighteningLevels(), SMALL_DELTA); + mDisplayDeviceConfig.getAutoBrightnessBrighteningLevels( + AUTO_BRIGHTNESS_MODE_DEFAULT), SMALL_DELTA); assertArrayEquals(new float[]{0, 110, 500}, - mDisplayDeviceConfig.getAutoBrightnessBrighteningLevelsLux(), ZERO_DELTA); + mDisplayDeviceConfig.getAutoBrightnessBrighteningLevelsLux( + AUTO_BRIGHTNESS_MODE_DEFAULT), ZERO_DELTA); assertArrayEquals(new float[]{2, 200, 600}, mDisplayDeviceConfig.getAutoBrightnessBrighteningLevelsNits(), SMALL_DELTA); } diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java index 02bd35a5b17f..ffdc8b431c39 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java @@ -18,6 +18,8 @@ package com.android.server.display; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer; import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify; +import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_DEFAULT; +import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_DOZE; import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_IDLE; import static org.junit.Assert.assertNotNull; @@ -1568,6 +1570,56 @@ public final class DisplayPowerController2Test { eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); } + @Test + public void testSwitchToDozeAutoBrightnessMode() { + when(mDisplayManagerFlagsMock.areAutoBrightnessModesEnabled()).thenReturn(true); + when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_DOZE); + + DisplayPowerRequest dpr = new DisplayPowerRequest(); + dpr.policy = DisplayPowerRequest.POLICY_DOZE; + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + advanceTime(1); // Run updatePowerState + + // One triggered by handleBrightnessModeChange, another triggered by requestPowerState + verify(mHolder.automaticBrightnessController, times(2)) + .switchMode(AUTO_BRIGHTNESS_MODE_DOZE); + + // Back to default mode + when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON); + dpr.policy = DisplayPowerRequest.POLICY_BRIGHT; + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + advanceTime(1); // Run updatePowerState + + verify(mHolder.automaticBrightnessController).switchMode(AUTO_BRIGHTNESS_MODE_DEFAULT); + } + + @Test + public void testDoesNotSwitchFromIdleToDozeAutoBrightnessMode() { + when(mDisplayManagerFlagsMock.areAutoBrightnessModesEnabled()).thenReturn(true); + when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_DOZE); + when(mHolder.automaticBrightnessController.isInIdleMode()).thenReturn(true); + + DisplayPowerRequest dpr = new DisplayPowerRequest(); + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + advanceTime(1); // Run updatePowerState + + verify(mHolder.automaticBrightnessController, never()) + .switchMode(AUTO_BRIGHTNESS_MODE_DOZE); + } + + @Test + public void testDoesNotSwitchDozeAutoBrightnessModeIfFeatureFlagOff() { + when(mDisplayManagerFlagsMock.areAutoBrightnessModesEnabled()).thenReturn(false); + when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_DOZE); + + DisplayPowerRequest dpr = new DisplayPowerRequest(); + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + advanceTime(1); // Run updatePowerState + + verify(mHolder.automaticBrightnessController, never()) + .switchMode(AUTO_BRIGHTNESS_MODE_DOZE); + } + /** * Creates a mock and registers it to {@link LocalServices}. */ |