Doze auto-brightness mode
We switch to doze auto-brightness mode if we're in a doze screen state and we're not in idle mode.
Change the naming from setting to preset following the suggestion on the design doc - to not get confused with the other brightness setting (the brightness value).
Bug: 306407598
Test: adb shell dumpsys display
Test: atest com.android.server.display
Change-Id: I7b1e49ac5867512510bd75fc09dcde400b728108
diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
index 2314bb7..3024dd2 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 @@
@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 @@
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 @@
}
}
- 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 f2ffd4d..6a4b00f 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 @@
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 @@
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 @@
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 7d22a87..a6f42d7 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 @@
}
/**
- * @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 @@
}
/**
- * @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 6d09cc9..c088a6d 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 @@
}
}
+ 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 @@
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 2162850..8f12329 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 @@
*/
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 @@
/**
* 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 @@
* 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 @@
}
/**
- * @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 @@
}
/**
- * @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 @@
+ ", 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 adbd3c9..8078745 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 98c95ed..91172a3 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 @@
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 @@
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 c5a1ba1..f4eaa5b 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 @@
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 @@
}
DdcBuilder setAutoBrightnessLevelsLux(float[] luxLevels) {
- when(mDdc.getAutoBrightnessBrighteningLevelsLux()).thenReturn(luxLevels);
+ when(mDdc.getAutoBrightnessBrighteningLevelsLux(AUTO_BRIGHTNESS_MODE_DEFAULT))
+ .thenReturn(luxLevels);
return this;
}
@@ -721,7 +724,8 @@
}
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 a4c15b5..61c6076 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 @@
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 @@
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 @@
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 @@
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 02bd35a..ffdc8b4 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 @@
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 @@
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}.
*/