summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Piotr Wilczyński <wilczynskip@google.com> 2023-10-18 10:16:31 +0000
committer Piotr Wilczyński <wilczynskip@google.com> 2023-12-14 14:16:39 +0000
commitd1afa65ddbbca6439f735289637edd3468877e68 (patch)
tree40592899056d7d109524316ff37a9735d28fa8f8
parent03b9c9c67811fdf2ba18d3916322fa3f0e41a866 (diff)
Make auto-brightness modes generic
Bug: 288481949 Bug: 293613040 Test: adb shell dumpsys display Test: atest AutomaticBrightnessControllerTest Test: atest BrightnessMappingStrategyTest Test: atest DisplayManagerServiceTest Test: atest DisplayPowerControllerTest Test: atest DisplayPowerController2Test Change-Id: Ie54af4fc38d179b290ce2f5021435a912db6c32a
-rw-r--r--services/core/java/com/android/server/display/AutomaticBrightnessController.java228
-rw-r--r--services/core/java/com/android/server/display/BrightnessMappingStrategy.java175
-rw-r--r--services/core/java/com/android/server/display/DisplayManagerService.java4
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java137
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController2.java122
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerControllerInterface.java5
-rw-r--r--services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java17
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/AutomaticBrightnessControllerTest.java106
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/BrightnessMappingStrategyTest.java94
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java61
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java61
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java12
12 files changed, 507 insertions, 515 deletions
diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
index 80c3a270efdf..33c7e3ffe8c5 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 android.annotation.IntDef;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityTaskManager;
import android.app.ActivityTaskManager.RootTaskInfo;
@@ -40,6 +42,7 @@ import android.os.Trace;
import android.util.EventLog;
import android.util.MathUtils;
import android.util.Slog;
+import android.util.SparseArray;
import android.util.TimeUtils;
import com.android.internal.annotations.VisibleForTesting;
@@ -49,6 +52,8 @@ import com.android.server.EventLogTags;
import com.android.server.display.brightness.BrightnessEvent;
import java.io.PrintWriter;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
/**
* Manages the associated display brightness when in auto-brightness mode. This is also
@@ -64,6 +69,16 @@ public class AutomaticBrightnessController {
public static final int AUTO_BRIGHTNESS_DISABLED = 2;
public static final int AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE = 3;
+ @IntDef(prefix = { "AUTO_BRIGHTNESS_MODE_" }, value = {
+ AUTO_BRIGHTNESS_MODE_DEFAULT,
+ AUTO_BRIGHTNESS_MODE_IDLE,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface AutomaticBrightnessMode{}
+
+ public static final int AUTO_BRIGHTNESS_MODE_DEFAULT = 0;
+ public static final int AUTO_BRIGHTNESS_MODE_IDLE = 1;
+
// 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
// non-zero, which in turn ensures that the total weight is non-zero.
@@ -91,10 +106,11 @@ public class AutomaticBrightnessController {
private final Sensor mLightSensor;
// The mapper to translate ambient lux to screen brightness in the range [0, 1.0].
- @Nullable
+ @NonNull
private BrightnessMappingStrategy mCurrentBrightnessMapper;
- private final BrightnessMappingStrategy mInteractiveModeBrightnessMapper;
- private final BrightnessMappingStrategy mIdleModeBrightnessMapper;
+
+ // A map of Brightness Mapping Strategies indexed by AutomaticBrightnessMode
+ private final SparseArray<BrightnessMappingStrategy> mBrightnessMappingStrategyMap;
// The minimum and maximum screen brightnesses.
private final float mScreenBrightnessRangeMinimum;
@@ -251,7 +267,7 @@ public class AutomaticBrightnessController {
AutomaticBrightnessController(Callbacks callbacks, Looper looper,
SensorManager sensorManager, Sensor lightSensor,
- BrightnessMappingStrategy interactiveModeBrightnessMapper,
+ SparseArray<BrightnessMappingStrategy> brightnessMappingStrategyMap,
int lightSensorWarmUpTime, float brightnessMin, float brightnessMax,
float dozeScaleFactor, int lightSensorRate, int initialLightSensorRate,
long brighteningLightDebounceConfig, long darkeningLightDebounceConfig,
@@ -261,26 +277,25 @@ public class AutomaticBrightnessController {
HysteresisLevels ambientBrightnessThresholdsIdle,
HysteresisLevels screenBrightnessThresholdsIdle, Context context,
BrightnessRangeController brightnessModeController,
- BrightnessThrottler brightnessThrottler,
- BrightnessMappingStrategy idleModeBrightnessMapper, int ambientLightHorizonShort,
- int ambientLightHorizonLong, float userLux, float userBrightness) {
+ BrightnessThrottler brightnessThrottler, int ambientLightHorizonShort,
+ int ambientLightHorizonLong, float userLux, float userNits) {
this(new Injector(), callbacks, looper, sensorManager, lightSensor,
- interactiveModeBrightnessMapper,
- lightSensorWarmUpTime, brightnessMin, brightnessMax, dozeScaleFactor,
- lightSensorRate, initialLightSensorRate, brighteningLightDebounceConfig,
- darkeningLightDebounceConfig, brighteningLightDebounceConfigIdle,
- darkeningLightDebounceConfigIdle, resetAmbientLuxAfterWarmUpConfig,
- ambientBrightnessThresholds, screenBrightnessThresholds,
- ambientBrightnessThresholdsIdle, screenBrightnessThresholdsIdle, context,
- brightnessModeController, brightnessThrottler, idleModeBrightnessMapper,
- ambientLightHorizonShort, ambientLightHorizonLong, userLux, userBrightness
+ brightnessMappingStrategyMap, lightSensorWarmUpTime, brightnessMin, brightnessMax,
+ dozeScaleFactor, lightSensorRate, initialLightSensorRate,
+ brighteningLightDebounceConfig, darkeningLightDebounceConfig,
+ brighteningLightDebounceConfigIdle, darkeningLightDebounceConfigIdle,
+ resetAmbientLuxAfterWarmUpConfig, ambientBrightnessThresholds,
+ screenBrightnessThresholds, ambientBrightnessThresholdsIdle,
+ screenBrightnessThresholdsIdle, context, brightnessModeController,
+ brightnessThrottler, ambientLightHorizonShort, ambientLightHorizonLong, userLux,
+ userNits
);
}
@VisibleForTesting
AutomaticBrightnessController(Injector injector, Callbacks callbacks, Looper looper,
SensorManager sensorManager, Sensor lightSensor,
- BrightnessMappingStrategy interactiveModeBrightnessMapper,
+ SparseArray<BrightnessMappingStrategy> brightnessMappingStrategyMap,
int lightSensorWarmUpTime, float brightnessMin, float brightnessMax,
float dozeScaleFactor, int lightSensorRate, int initialLightSensorRate,
long brighteningLightDebounceConfig, long darkeningLightDebounceConfig,
@@ -290,15 +305,14 @@ public class AutomaticBrightnessController {
HysteresisLevels ambientBrightnessThresholdsIdle,
HysteresisLevels screenBrightnessThresholdsIdle, Context context,
BrightnessRangeController brightnessModeController,
- BrightnessThrottler brightnessThrottler,
- BrightnessMappingStrategy idleModeBrightnessMapper, int ambientLightHorizonShort,
- int ambientLightHorizonLong, float userLux, float userBrightness) {
+ BrightnessThrottler brightnessThrottler, int ambientLightHorizonShort,
+ int ambientLightHorizonLong, float userLux, float userNits) {
mInjector = injector;
mClock = injector.createClock();
mContext = context;
mCallbacks = callbacks;
mSensorManager = sensorManager;
- mCurrentBrightnessMapper = interactiveModeBrightnessMapper;
+ mCurrentBrightnessMapper = brightnessMappingStrategyMap.get(AUTO_BRIGHTNESS_MODE_DEFAULT);
mScreenBrightnessRangeMinimum = brightnessMin;
mScreenBrightnessRangeMaximum = brightnessMax;
mLightSensorWarmUpTimeConfig = lightSensorWarmUpTime;
@@ -337,13 +351,12 @@ public class AutomaticBrightnessController {
mPendingForegroundAppCategory = ApplicationInfo.CATEGORY_UNDEFINED;
mBrightnessRangeController = brightnessModeController;
mBrightnessThrottler = brightnessThrottler;
- mInteractiveModeBrightnessMapper = interactiveModeBrightnessMapper;
- mIdleModeBrightnessMapper = idleModeBrightnessMapper;
- // Initialize to active (normal) screen brightness mode
- switchToInteractiveScreenBrightnessMode();
+ mBrightnessMappingStrategyMap = brightnessMappingStrategyMap;
// Use the given short-term model
- setScreenBrightnessByUser(userLux, userBrightness);
+ if (userNits != BrightnessMappingStrategy.INVALID_NITS) {
+ setScreenBrightnessByUser(userLux, getBrightnessFromNits(userNits));
+ }
}
/**
@@ -358,11 +371,8 @@ public class AutomaticBrightnessController {
if (mLoggingEnabled == loggingEnabled) {
return false;
}
- if (mInteractiveModeBrightnessMapper != null) {
- mInteractiveModeBrightnessMapper.setLoggingEnabled(loggingEnabled);
- }
- if (mIdleModeBrightnessMapper != null) {
- mIdleModeBrightnessMapper.setLoggingEnabled(loggingEnabled);
+ for (int i = 0; i < mBrightnessMappingStrategyMap.size(); i++) {
+ mBrightnessMappingStrategyMap.valueAt(i).setLoggingEnabled(loggingEnabled);
}
mLoggingEnabled = loggingEnabled;
return true;
@@ -389,8 +399,7 @@ public class AutomaticBrightnessController {
| (!mAmbientLuxValid ? BrightnessEvent.FLAG_INVALID_LUX : 0)
| (mDisplayPolicy == DisplayPowerRequest.POLICY_DOZE
? BrightnessEvent.FLAG_DOZE_SCALE : 0)
- | (mCurrentBrightnessMapper.isForIdleMode()
- ? BrightnessEvent.FLAG_IDLE_CURVE : 0));
+ | (isInIdleMode() ? BrightnessEvent.FLAG_IDLE_CURVE : 0));
}
if (!mAmbientLuxValid) {
@@ -464,15 +473,13 @@ public class AutomaticBrightnessController {
// Used internally to establish whether we have deviated from the default config.
public boolean isDefaultConfig() {
- if (isInIdleMode()) {
- return false;
- }
- return mInteractiveModeBrightnessMapper.isDefaultConfig();
+ return mCurrentBrightnessMapper.getMode() == AUTO_BRIGHTNESS_MODE_DEFAULT
+ && mCurrentBrightnessMapper.isDefaultConfig();
}
// Called from APIs to get the configuration.
public BrightnessConfiguration getDefaultConfig() {
- return mInteractiveModeBrightnessMapper.getDefaultConfig();
+ return mBrightnessMappingStrategyMap.get(AUTO_BRIGHTNESS_MODE_DEFAULT).getDefaultConfig();
}
/**
@@ -527,8 +534,7 @@ public class AutomaticBrightnessController {
}
private boolean setScreenBrightnessByUser(float lux, float brightness) {
- if (lux == BrightnessMappingStrategy.NO_USER_LUX
- || brightness == BrightnessMappingStrategy.NO_USER_BRIGHTNESS) {
+ if (lux == BrightnessMappingStrategy.INVALID_LUX || Float.isNaN(brightness)) {
return false;
}
mCurrentBrightnessMapper.addUserDataPoint(lux, brightness);
@@ -543,7 +549,8 @@ public class AutomaticBrightnessController {
public boolean setBrightnessConfiguration(BrightnessConfiguration configuration,
boolean shouldResetShortTermModel) {
- if (mInteractiveModeBrightnessMapper.setBrightnessConfiguration(configuration)) {
+ if (mBrightnessMappingStrategyMap.get(AUTO_BRIGHTNESS_MODE_DEFAULT)
+ .setBrightnessConfiguration(configuration)) {
if (!isInIdleMode() && shouldResetShortTermModel) {
resetShortTermModel();
}
@@ -553,7 +560,7 @@ public class AutomaticBrightnessController {
}
public boolean isInIdleMode() {
- return mCurrentBrightnessMapper.isForIdleMode();
+ return mCurrentBrightnessMapper.getMode() == AUTO_BRIGHTNESS_MODE_IDLE;
}
public void dump(PrintWriter pw) {
@@ -595,12 +602,6 @@ public class AutomaticBrightnessController {
pw.println(" mAmbientLightRingBuffer=" + mAmbientLightRingBuffer);
pw.println(" mScreenAutoBrightness=" + mScreenAutoBrightness);
pw.println(" mDisplayPolicy=" + DisplayPowerRequest.policyToString(mDisplayPolicy));
- pw.println(" mShortTermModelTimeout(active)="
- + mInteractiveModeBrightnessMapper.getShortTermModelTimeout());
- if (mIdleModeBrightnessMapper != null) {
- pw.println(" mShortTermModelTimeout(idle)="
- + mIdleModeBrightnessMapper.getShortTermModelTimeout());
- }
pw.println(" mShortTermModel=");
mShortTermModel.dump(pw);
pw.println(" mPausedShortTermModel=");
@@ -615,15 +616,14 @@ public class AutomaticBrightnessController {
pw.println(" mPendingForegroundAppPackageName=" + mPendingForegroundAppPackageName);
pw.println(" mForegroundAppCategory=" + mForegroundAppCategory);
pw.println(" mPendingForegroundAppCategory=" + mPendingForegroundAppCategory);
- pw.println(" Idle mode active=" + mCurrentBrightnessMapper.isForIdleMode());
+ pw.println(" Current mode=" + mCurrentBrightnessMapper.getMode());
pw.println();
- pw.println(" mInteractiveMapper=");
- mInteractiveModeBrightnessMapper.dump(pw,
- mBrightnessRangeController.getNormalBrightnessMax());
- if (mIdleModeBrightnessMapper != null) {
- pw.println(" mIdleMapper=");
- mIdleModeBrightnessMapper.dump(pw, mBrightnessRangeController.getNormalBrightnessMax());
+ for (int i = 0; i < mBrightnessMappingStrategyMap.size(); i++) {
+ pw.println(" Mapper for mode " + modeToString(mBrightnessMappingStrategyMap.keyAt(i))
+ + "=");
+ mBrightnessMappingStrategyMap.valueAt(i).dump(pw,
+ mBrightnessRangeController.getNormalBrightnessMax());
}
pw.println();
@@ -1117,68 +1117,58 @@ public class AutomaticBrightnessController {
updateAutoBrightness(true /* sendUpdate */, false /* isManuallySet */);
}
- void switchToIdleMode() {
- if (mIdleModeBrightnessMapper == null) {
- return;
- }
- if (mCurrentBrightnessMapper.isForIdleMode()) {
- return;
- }
- Slog.i(TAG, "Switching to Idle Screen Brightness Mode");
+ private void switchModeAndShortTermModels(@AutomaticBrightnessMode int mode) {
// Stash short term model
ShortTermModel tempShortTermModel = new ShortTermModel();
tempShortTermModel.set(mCurrentBrightnessMapper.getUserLux(),
mCurrentBrightnessMapper.getUserBrightness(), /* valid= */ true);
-
+ mHandler.removeMessages(MSG_INVALIDATE_PAUSED_SHORT_TERM_MODEL);
// Send delayed timeout
mHandler.sendEmptyMessageAtTime(MSG_INVALIDATE_PAUSED_SHORT_TERM_MODEL,
mClock.uptimeMillis()
+ mCurrentBrightnessMapper.getShortTermModelTimeout());
- Slog.i(TAG, "mPreviousShortTermModel" + mPausedShortTermModel);
+ Slog.i(TAG, "mPreviousShortTermModel: " + mPausedShortTermModel);
// new brightness mapper
- mCurrentBrightnessMapper = mIdleModeBrightnessMapper;
+ mCurrentBrightnessMapper = mBrightnessMappingStrategyMap.get(mode);
// if previous stm has been invalidated, and lux has drastically changed, just use
// the new, reset stm.
// if previous stm is still valid then revalidate it
- if (mPausedShortTermModel != null && !mPausedShortTermModel.maybeReset(mAmbientLux)) {
- setScreenBrightnessByUser(mPausedShortTermModel.mAnchor,
- mPausedShortTermModel.mBrightness);
+ if (mPausedShortTermModel != null) {
+ if (!mPausedShortTermModel.maybeReset(mAmbientLux)) {
+ setScreenBrightnessByUser(mPausedShortTermModel.mAnchor,
+ mPausedShortTermModel.mBrightness);
+ }
+ mPausedShortTermModel.copyFrom(tempShortTermModel);
}
- mPausedShortTermModel.copyFrom(tempShortTermModel);
update();
}
- void switchToInteractiveScreenBrightnessMode() {
- if (!mCurrentBrightnessMapper.isForIdleMode()) {
+ void switchMode(@AutomaticBrightnessMode int mode) {
+ if (!mBrightnessMappingStrategyMap.contains(mode)) {
return;
}
- Slog.i(TAG, "Switching to Interactive Screen Brightness Mode");
- ShortTermModel tempShortTermModel = new ShortTermModel();
- tempShortTermModel.set(mCurrentBrightnessMapper.getUserLux(),
- mCurrentBrightnessMapper.getUserBrightness(), /* valid= */ true);
- mHandler.removeMessages(MSG_INVALIDATE_PAUSED_SHORT_TERM_MODEL);
- // Send delayed timeout
- mHandler.sendEmptyMessageAtTime(MSG_INVALIDATE_PAUSED_SHORT_TERM_MODEL,
- mClock.uptimeMillis()
- + mCurrentBrightnessMapper.getShortTermModelTimeout());
- Slog.i(TAG, "mPreviousShortTermModel" + mPausedShortTermModel.toString());
-
- // restore interactive mapper.
- mCurrentBrightnessMapper = mInteractiveModeBrightnessMapper;
-
- // if previous stm has been invalidated, and lux has drastically changed, just use
- // the new, reset stm.
- // if previous stm is still valid then revalidate it
- if (!mPausedShortTermModel.maybeReset(mAmbientLux)) {
- setScreenBrightnessByUser(mPausedShortTermModel.mAnchor,
- mPausedShortTermModel.mBrightness);
+ if (mCurrentBrightnessMapper.getMode() == mode) {
+ return;
+ }
+ Slog.i(TAG, "Switching to mode " + mode);
+ if (mode == AUTO_BRIGHTNESS_MODE_IDLE
+ || mCurrentBrightnessMapper.getMode() == AUTO_BRIGHTNESS_MODE_IDLE) {
+ switchModeAndShortTermModels(mode);
+ } else {
+ resetShortTermModel();
+ mCurrentBrightnessMapper = mBrightnessMappingStrategyMap.get(mode);
}
- mPausedShortTermModel.copyFrom(tempShortTermModel);
+ }
- update();
+ float getUserLux() {
+ return mCurrentBrightnessMapper.getUserLux();
+ }
+
+ float getUserNits() {
+ return convertToNits(mCurrentBrightnessMapper.getUserBrightness());
}
/**
@@ -1187,14 +1177,11 @@ public class AutomaticBrightnessController {
* passing the brightness value to follower displays.
*
* @param brightness The float scale value
- * @return The nit value or -1f if no conversion is possible.
+ * @return The nit value or {@link BrightnessMappingStrategy.INVALID_NITS} if no conversion is
+ * possible.
*/
public float convertToNits(float brightness) {
- if (mCurrentBrightnessMapper != null) {
- return mCurrentBrightnessMapper.convertToNits(brightness);
- } else {
- return -1.0f;
- }
+ return mCurrentBrightnessMapper.convertToNits(brightness);
}
/**
@@ -1203,14 +1190,11 @@ public class AutomaticBrightnessController {
* {@link com.android.server.display.BrightnessTracker}.
*
* @param brightness The float scale value
- * @return The nit value or -1f if no conversion is possible.
+ * @return The nit value or {@link BrightnessMappingStrategy.INVALID_NITS} if no conversion is
+ * possible.
*/
public float convertToAdjustedNits(float brightness) {
- if (mCurrentBrightnessMapper != null) {
- return mCurrentBrightnessMapper.convertToAdjustedNits(brightness);
- } else {
- return -1.0f;
- }
+ return mCurrentBrightnessMapper.convertToAdjustedNits(brightness);
}
/**
@@ -1221,12 +1205,8 @@ public class AutomaticBrightnessController {
* @return The float scale value or {@link PowerManager.BRIGHTNESS_INVALID_FLOAT} if no
* conversion is possible.
*/
- public float convertToFloatScale(float nits) {
- if (mCurrentBrightnessMapper != null) {
- return mCurrentBrightnessMapper.convertToFloatScale(nits);
- } else {
- return PowerManager.BRIGHTNESS_INVALID_FLOAT;
- }
+ public float getBrightnessFromNits(float nits) {
+ return mCurrentBrightnessMapper.getBrightnessFromNits(nits);
}
public void recalculateSplines(boolean applyAdjustment, float[] adjustment) {
@@ -1244,19 +1224,27 @@ 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
// light.
// The anchor determines what were the light levels when the user has set their preference,
// and we use a relative threshold to determine when to revert to the OEM curve.
- private float mAnchor = BrightnessMappingStrategy.NO_USER_LUX;
- private float mBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS;
+ private float mAnchor = BrightnessMappingStrategy.INVALID_LUX;
+ private float mBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
private boolean mIsValid = false;
private void reset() {
- mAnchor = BrightnessMappingStrategy.NO_USER_LUX;
- mBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS;
+ mAnchor = BrightnessMappingStrategy.INVALID_LUX;
+ mBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
mIsValid = false;
}
@@ -1279,10 +1267,8 @@ public class AutomaticBrightnessController {
private boolean maybeReset(float currentLux) {
// If the short term model was invalidated and the change is drastic enough, reset it.
// Otherwise, we revalidate it.
- if (!mIsValid && mAnchor != -1) {
- if (mCurrentBrightnessMapper != null
- && mCurrentBrightnessMapper.shouldResetShortTermModel(
- currentLux, mAnchor)) {
+ if (!mIsValid && mAnchor != BrightnessMappingStrategy.INVALID_LUX) {
+ if (mCurrentBrightnessMapper.shouldResetShortTermModel(currentLux, mAnchor)) {
resetShortTermModel();
} else {
mIsValid = true;
@@ -1304,7 +1290,7 @@ public class AutomaticBrightnessController {
}
public String toString() {
- return " mAnchor: " + mAnchor
+ return "mAnchor: " + mAnchor
+ "\n mBrightness: " + mBrightness
+ "\n mIsValid: " + mIsValid;
}
diff --git a/services/core/java/com/android/server/display/BrightnessMappingStrategy.java b/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
index d848f4b6cce5..acd253b38b3d 100644
--- a/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
+++ b/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
@@ -18,6 +18,9 @@ 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_IDLE;
+
import android.annotation.Nullable;
import android.content.pm.ApplicationInfo;
import android.content.res.Resources;
@@ -57,8 +60,8 @@ import java.util.Objects;
public abstract class BrightnessMappingStrategy {
private static final String TAG = "BrightnessMappingStrategy";
- public static final float NO_USER_LUX = -1;
- public static final float NO_USER_BRIGHTNESS = -1;
+ public static final float INVALID_LUX = -1;
+ public static final float INVALID_NITS = -1;
private static final float LUX_GRAD_SMOOTHING = 0.25f;
private static final float MAX_GRAD = 1.0f;
@@ -74,75 +77,48 @@ public abstract class BrightnessMappingStrategy {
private static final Plog PLOG = Plog.createSystemPlog(TAG);
/**
- * Creates a BrightnessMappingStrategy for active (normal) mode.
- * @param resources
- * @param displayDeviceConfig
- * @param displayWhiteBalanceController
- * @return the BrightnessMappingStrategy
- */
- @Nullable
- public static BrightnessMappingStrategy create(Resources resources,
- DisplayDeviceConfig displayDeviceConfig,
- DisplayWhiteBalanceController displayWhiteBalanceController) {
- return create(resources, displayDeviceConfig, /* isForIdleMode= */ false,
- displayWhiteBalanceController);
- }
-
- /**
- * Creates a BrightnessMappingStrategy for idle screen brightness mode.
- * @param resources
- * @param displayDeviceConfig
- * @param displayWhiteBalanceController
- * @return the BrightnessMappingStrategy
- */
- @Nullable
- public static BrightnessMappingStrategy createForIdleMode(Resources resources,
- DisplayDeviceConfig displayDeviceConfig, DisplayWhiteBalanceController
- displayWhiteBalanceController) {
- return create(resources, displayDeviceConfig, /* isForIdleMode= */ true,
- displayWhiteBalanceController);
- }
-
- /**
- * Creates a BrightnessMapping strategy for either active or idle screen brightness mode.
- * We do not create a simple mapping strategy for idle mode.
+ * Creates a BrightnessMapping strategy. We do not create a simple mapping strategy for idle
+ * mode.
*
* @param resources
* @param displayDeviceConfig
- * @param isForIdleMode determines whether the configurations loaded are for idle screen
- * brightness mode or active screen brightness mode.
+ * @param mode The auto-brightness mode. Different modes use different brightness curves
* @param displayWhiteBalanceController
* @return the BrightnessMappingStrategy
*/
@Nullable
- private static BrightnessMappingStrategy create(Resources resources,
- DisplayDeviceConfig displayDeviceConfig, boolean isForIdleMode,
+ static BrightnessMappingStrategy create(Resources resources,
+ DisplayDeviceConfig displayDeviceConfig,
+ @AutomaticBrightnessController.AutomaticBrightnessMode int mode,
DisplayWhiteBalanceController displayWhiteBalanceController) {
// Display independent, mode dependent values
- float[] brightnessLevelsNits;
+ float[] brightnessLevelsNits = null;
float[] brightnessLevels = null;
- float[] luxLevels;
- if (isForIdleMode) {
- brightnessLevelsNits = getFloatArray(resources.obtainTypedArray(
- com.android.internal.R.array.config_autoBrightnessDisplayValuesNitsIdle));
- luxLevels = getLuxLevels(resources.getIntArray(
- com.android.internal.R.array.config_autoBrightnessLevelsIdle));
- } else {
- brightnessLevelsNits = displayDeviceConfig.getAutoBrightnessBrighteningLevelsNits();
- luxLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevelsLux();
-
- brightnessLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevels();
- if (brightnessLevels == null || brightnessLevels.length == 0) {
- // Load the old configuration in the range [0, 255]. The values need to be
- // normalized to the range [0, 1].
- int[] brightnessLevelsInt = resources.getIntArray(
- com.android.internal.R.array.config_autoBrightnessLcdBacklightValues);
- brightnessLevels = new float[brightnessLevelsInt.length];
- for (int i = 0; i < brightnessLevels.length; i++) {
- brightnessLevels[i] = normalizeAbsoluteBrightness(brightnessLevelsInt[i]);
+ float[] luxLevels = null;
+ switch (mode) {
+ case AUTO_BRIGHTNESS_MODE_DEFAULT:
+ brightnessLevelsNits = displayDeviceConfig.getAutoBrightnessBrighteningLevelsNits();
+ luxLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevelsLux();
+
+ brightnessLevels = displayDeviceConfig.getAutoBrightnessBrighteningLevels();
+ if (brightnessLevels == null || brightnessLevels.length == 0) {
+ // Load the old configuration in the range [0, 255]. The values need to be
+ // normalized to the range [0, 1].
+ int[] brightnessLevelsInt = resources.getIntArray(
+ com.android.internal.R.array.config_autoBrightnessLcdBacklightValues);
+ brightnessLevels = new float[brightnessLevelsInt.length];
+ for (int i = 0; i < brightnessLevels.length; i++) {
+ brightnessLevels[i] = normalizeAbsoluteBrightness(brightnessLevelsInt[i]);
+ }
}
- }
+ break;
+ case AUTO_BRIGHTNESS_MODE_IDLE:
+ brightnessLevelsNits = getFloatArray(resources.obtainTypedArray(
+ com.android.internal.R.array.config_autoBrightnessDisplayValuesNitsIdle));
+ luxLevels = getLuxLevels(resources.getIntArray(
+ com.android.internal.R.array.config_autoBrightnessLevelsIdle));
+ break;
}
// Display independent, mode independent values
@@ -158,17 +134,16 @@ public abstract class BrightnessMappingStrategy {
if (isValidMapping(nitsRange, brightnessRange)
&& isValidMapping(luxLevels, brightnessLevelsNits)) {
-
BrightnessConfiguration.Builder builder = new BrightnessConfiguration.Builder(
luxLevels, brightnessLevelsNits);
builder.setShortTermModelTimeoutMillis(shortTermModelTimeout);
builder.setShortTermModelLowerLuxMultiplier(SHORT_TERM_MODEL_THRESHOLD_RATIO);
builder.setShortTermModelUpperLuxMultiplier(SHORT_TERM_MODEL_THRESHOLD_RATIO);
return new PhysicalMappingStrategy(builder.build(), nitsRange, brightnessRange,
- autoBrightnessAdjustmentMaxGamma, isForIdleMode, displayWhiteBalanceController);
+ autoBrightnessAdjustmentMaxGamma, mode, displayWhiteBalanceController);
} else if (isValidMapping(luxLevels, brightnessLevels)) {
return new SimpleMappingStrategy(luxLevels, brightnessLevels,
- autoBrightnessAdjustmentMaxGamma, shortTermModelTimeout);
+ autoBrightnessAdjustmentMaxGamma, shortTermModelTimeout, mode);
} else {
return null;
}
@@ -334,7 +309,7 @@ public abstract class BrightnessMappingStrategy {
/**
* Converts the provided brightness value to nits if possible.
*
- * Returns -1.0f if there's no available mapping for the brightness to nits.
+ * Returns {@link INVALID_NITS} if there's no available mapping for the brightness to nits.
*/
public abstract float convertToNits(float brightness);
@@ -342,7 +317,7 @@ public abstract class BrightnessMappingStrategy {
* Converts the provided brightness value to nits if possible. Adjustments, such as RBC are
* applied.
*
- * Returns -1.0f if there's no available mapping for the brightness to nits.
+ * Returns {@link INVALID_NITS} if there's no available mapping for the brightness to nits.
*/
public abstract float convertToAdjustedNits(float brightness);
@@ -352,7 +327,7 @@ public abstract class BrightnessMappingStrategy {
* Returns {@link PowerManager.BRIGHTNESS_INVALID_FLOAT} if there's no available mapping for
* the nits to float scale.
*/
- public abstract float convertToFloatScale(float nits);
+ public abstract float getBrightnessFromNits(float nits);
/**
* Adds a user interaction data point to the brightness mapping.
@@ -407,17 +382,18 @@ public abstract class BrightnessMappingStrategy {
*/
public abstract void dump(PrintWriter pw, float hbmTransition);
- /**
- * We can designate a mapping strategy to be used for idle screen brightness mode.
- * @return whether this mapping strategy is to be used for idle screen brightness mode.
- */
- public abstract boolean isForIdleMode();
-
abstract float getUserLux();
abstract float getUserBrightness();
/**
+ * @return The auto-brightness mode of this mapping strategy. Different modes use different
+ * brightness curves.
+ */
+ @AutomaticBrightnessController.AutomaticBrightnessMode
+ abstract int getMode();
+
+ /**
* Check if the short term model should be reset given the anchor lux the last
* brightness change was made at and the current ambient lux.
*/
@@ -596,7 +572,7 @@ public abstract class BrightnessMappingStrategy {
if (mLoggingEnabled) {
PLOG.logCurve("gamma adjusted curve", newLux, newBrightness);
}
- if (userLux != -1) {
+ if (userLux != INVALID_LUX) {
Pair<float[], float[]> curve = insertControlPoint(newLux, newBrightness, userLux,
userBrightness);
newLux = curve.first;
@@ -624,6 +600,9 @@ public abstract class BrightnessMappingStrategy {
// Brightness control points normalized to [0, 1]
private final float[] mBrightness;
+ @AutomaticBrightnessController.AutomaticBrightnessMode
+ private final int mMode;
+
private Spline mSpline;
private float mMaxGamma;
private float mAutoBrightnessAdjustment;
@@ -632,7 +611,7 @@ public abstract class BrightnessMappingStrategy {
private long mShortTermModelTimeout;
private SimpleMappingStrategy(float[] lux, float[] brightness, float maxGamma,
- long timeout) {
+ long timeout, @AutomaticBrightnessController.AutomaticBrightnessMode int mode) {
Preconditions.checkArgument(lux.length != 0 && brightness.length != 0,
"Lux and brightness arrays must not be empty!");
Preconditions.checkArgument(lux.length == brightness.length,
@@ -651,13 +630,14 @@ public abstract class BrightnessMappingStrategy {
mMaxGamma = maxGamma;
mAutoBrightnessAdjustment = 0;
- mUserLux = NO_USER_LUX;
- mUserBrightness = NO_USER_BRIGHTNESS;
+ mUserLux = INVALID_LUX;
+ mUserBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
if (mLoggingEnabled) {
PLOG.start("simple mapping strategy");
}
computeSpline();
mShortTermModelTimeout = timeout;
+ mMode = mode;
}
@Override
@@ -704,16 +684,16 @@ public abstract class BrightnessMappingStrategy {
@Override
public float convertToNits(float brightness) {
- return -1.0f;
+ return INVALID_NITS;
}
@Override
public float convertToAdjustedNits(float brightness) {
- return -1.0f;
+ return INVALID_NITS;
}
@Override
- public float convertToFloatScale(float nits) {
+ public float getBrightnessFromNits(float nits) {
return PowerManager.BRIGHTNESS_INVALID_FLOAT;
}
@@ -741,22 +721,22 @@ public abstract class BrightnessMappingStrategy {
@Override
public void clearUserDataPoints() {
- if (mUserLux != -1) {
+ if (mUserLux != INVALID_LUX) {
if (mLoggingEnabled) {
Slog.d(TAG, "clearUserDataPoints: " + mAutoBrightnessAdjustment + " => 0");
PLOG.start("clear user data points")
.logPoint("user data point", mUserLux, mUserBrightness);
}
mAutoBrightnessAdjustment = 0;
- mUserLux = -1;
- mUserBrightness = -1;
+ mUserLux = INVALID_LUX;
+ mUserBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
computeSpline();
}
}
@Override
public boolean hasUserDataPoints() {
- return mUserLux != -1;
+ return mUserLux != INVALID_LUX;
}
@Override
@@ -782,11 +762,12 @@ public abstract class BrightnessMappingStrategy {
pw.println(" mAutoBrightnessAdjustment=" + mAutoBrightnessAdjustment);
pw.println(" mUserLux=" + mUserLux);
pw.println(" mUserBrightness=" + mUserBrightness);
+ pw.println(" mShortTermModelTimeout=" + mShortTermModelTimeout);
}
@Override
- public boolean isForIdleMode() {
- return false;
+ int getMode() {
+ return mMode;
}
@Override
@@ -854,9 +835,11 @@ public abstract class BrightnessMappingStrategy {
private float mAutoBrightnessAdjustment;
private float mUserLux;
private float mUserBrightness;
- private final boolean mIsForIdleMode;
private final DisplayWhiteBalanceController mDisplayWhiteBalanceController;
+ @AutomaticBrightnessController.AutomaticBrightnessMode
+ private final int mMode;
+
// Previous short-term models and the times that they were computed stored for debugging
// purposes
private List<Spline> mPreviousBrightnessSplines = new ArrayList<>();
@@ -865,7 +848,8 @@ public abstract class BrightnessMappingStrategy {
private static final SimpleDateFormat FORMAT = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
public PhysicalMappingStrategy(BrightnessConfiguration config, float[] nits,
- float[] brightness, float maxGamma, boolean isForIdleMode,
+ float[] brightness, float maxGamma,
+ @AutomaticBrightnessController.AutomaticBrightnessMode int mode,
DisplayWhiteBalanceController displayWhiteBalanceController) {
Preconditions.checkArgument(nits.length != 0 && brightness.length != 0,
@@ -878,11 +862,11 @@ public abstract class BrightnessMappingStrategy {
Preconditions.checkArrayElementsInRange(brightness,
PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX, "brightness");
- mIsForIdleMode = isForIdleMode;
+ mMode = mode;
mMaxGamma = maxGamma;
mAutoBrightnessAdjustment = 0;
- mUserLux = NO_USER_LUX;
- mUserBrightness = NO_USER_BRIGHTNESS;
+ mUserLux = INVALID_LUX;
+ mUserBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
mDisplayWhiteBalanceController = displayWhiteBalanceController;
mNits = nits;
@@ -982,7 +966,7 @@ public abstract class BrightnessMappingStrategy {
}
@Override
- public float convertToFloatScale(float nits) {
+ public float getBrightnessFromNits(float nits) {
return mNitsToBrightnessSpline.interpolate(nits);
}
@@ -1024,15 +1008,15 @@ public abstract class BrightnessMappingStrategy {
.logPoint("user data point", mUserLux, mUserBrightness);
}
mAutoBrightnessAdjustment = 0;
- mUserLux = -1;
- mUserBrightness = -1;
+ mUserLux = INVALID_LUX;
+ mUserBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
computeSpline();
}
}
@Override
public boolean hasUserDataPoints() {
- return mUserLux != -1;
+ return mUserLux != INVALID_LUX;
}
@Override
@@ -1072,6 +1056,7 @@ public abstract class BrightnessMappingStrategy {
pw.println(" mUserBrightness=" + mUserBrightness);
pw.println(" mDefaultConfig=" + mDefaultConfig);
pw.println(" mBrightnessRangeAdjustmentApplied=" + mBrightnessRangeAdjustmentApplied);
+ pw.println(" shortTermModelTimeout=" + getShortTermModelTimeout());
pw.println(" Previous short-term models (oldest to newest): ");
for (int i = 0; i < mPreviousBrightnessSplines.size(); i++) {
@@ -1086,8 +1071,8 @@ public abstract class BrightnessMappingStrategy {
}
@Override
- public boolean isForIdleMode() {
- return mIsForIdleMode;
+ int getMode() {
+ return mMode;
}
@Override
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 2ab15e639d68..e38d08ff2a1a 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -2880,7 +2880,9 @@ public final class DisplayManagerService extends SystemService {
final DisplayPowerControllerInterface displayPowerController =
mDisplayPowerControllers.get(displayId);
if (displayPowerController != null) {
- displayPowerController.setAutomaticScreenBrightnessMode(enabled);
+ displayPowerController.setAutomaticScreenBrightnessMode(enabled
+ ? AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_IDLE
+ : AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_DEFAULT);
}
}
}
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index f09fcea69a88..b6c10788c306 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -16,6 +16,9 @@
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_IDLE;
+
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.annotation.NonNull;
@@ -53,7 +56,6 @@ import android.os.Trace;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.FloatProperty;
-import android.util.Log;
import android.util.MathUtils;
import android.util.MutableFloat;
import android.util.MutableInt;
@@ -498,15 +500,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
private Sensor mLightSensor;
private Sensor mScreenOffBrightnessSensor;
- // The mappers between ambient lux, display backlight values, and display brightness.
- // We will switch between the idle mapper and active mapper in AutomaticBrightnessController.
- // Mapper used for active (normal) screen brightness mode
- @Nullable
- private BrightnessMappingStrategy mInteractiveModeBrightnessMapper;
- // Mapper used for idle screen brightness mode
- @Nullable
- private BrightnessMappingStrategy mIdleModeBrightnessMapper;
-
// The current brightness configuration.
@Nullable
private BrightnessConfiguration mBrightnessConfiguration;
@@ -609,7 +602,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
BrightnessTracker brightnessTracker, BrightnessSetting brightnessSetting,
Runnable onBrightnessChangeRunnable, HighBrightnessModeMetadata hbmMetadata,
boolean bootCompleted, DisplayManagerFlags flags) {
-
+ mFlags = flags;
mInjector = injector != null ? injector : new Injector();
mClock = mInjector.getClock();
mLogicalDisplay = logicalDisplay;
@@ -767,8 +760,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mPendingAutoBrightnessAdjustment = PowerManager.BRIGHTNESS_INVALID_FLOAT;
mBootCompleted = bootCompleted;
-
- mFlags = flags;
}
private void applyReduceBrightColorsSplineAdjustment() {
@@ -780,13 +771,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
if (mAutomaticBrightnessController == null) {
return;
}
- if ((!mAutomaticBrightnessController.isInIdleMode()
- && mInteractiveModeBrightnessMapper == null)
- || (mAutomaticBrightnessController.isInIdleMode()
- && mIdleModeBrightnessMapper == null)) {
- Log.w(mTag, "No brightness mapping available to recalculate splines for this mode");
- return;
- }
float[] adjustedNits = new float[mNitsRange.length];
for (int i = 0; i < mNitsRange.length; i++) {
@@ -848,10 +832,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
public void setBrightnessToFollow(float leadDisplayBrightness, float nits, float ambientLux,
boolean slowChange) {
mBrightnessRangeController.onAmbientLuxChange(ambientLux);
- if (nits < 0) {
+ if (nits == BrightnessMappingStrategy.INVALID_NITS) {
mBrightnessToFollow = leadDisplayBrightness;
} else {
- float brightness = convertToFloatScale(nits);
+ float brightness = getBrightnessFromNits(nits);
if (isValidBrightnessValue(brightness)) {
mBrightnessToFollow = brightness;
} else {
@@ -876,7 +860,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
synchronized (mLock) {
mDisplayBrightnessFollowers.remove(follower.getDisplayId());
mHandler.postAtTime(() -> follower.setBrightnessToFollow(
- PowerManager.BRIGHTNESS_INVALID_FLOAT, /* nits= */ -1,
+ PowerManager.BRIGHTNESS_INVALID_FLOAT, BrightnessMappingStrategy.INVALID_NITS,
/* ambientLux= */ 0, /* slowChange= */ false), mClock.uptimeMillis());
}
}
@@ -886,7 +870,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
for (int i = 0; i < mDisplayBrightnessFollowers.size(); i++) {
DisplayPowerControllerInterface follower = mDisplayBrightnessFollowers.valueAt(i);
mHandler.postAtTime(() -> follower.setBrightnessToFollow(
- PowerManager.BRIGHTNESS_INVALID_FLOAT, /* nits= */ -1,
+ PowerManager.BRIGHTNESS_INVALID_FLOAT, BrightnessMappingStrategy.INVALID_NITS,
/* ambientLux= */ 0, /* slowChange= */ false), mClock.uptimeMillis());
}
mDisplayBrightnessFollowers.clear();
@@ -1168,24 +1152,35 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
return;
}
- float userLux = BrightnessMappingStrategy.NO_USER_LUX;
- float userNits = -1;
- if (mInteractiveModeBrightnessMapper != null) {
- userLux = mInteractiveModeBrightnessMapper.getUserLux();
- float userBrightness = mInteractiveModeBrightnessMapper.getUserBrightness();
- userNits = mInteractiveModeBrightnessMapper.convertToNits(userBrightness);
- }
+ SparseArray<BrightnessMappingStrategy> brightnessMappers = new SparseArray<>();
+
+ BrightnessMappingStrategy defaultModeBrightnessMapper =
+ mInjector.getDefaultModeBrightnessMapper(resources, mDisplayDeviceConfig,
+ mDisplayWhiteBalanceController);
+ brightnessMappers.append(AUTO_BRIGHTNESS_MODE_DEFAULT,
+ defaultModeBrightnessMapper);
final boolean isIdleScreenBrightnessEnabled = resources.getBoolean(
R.bool.config_enableIdleScreenBrightnessMode);
- mInteractiveModeBrightnessMapper = mInjector.getInteractiveModeBrightnessMapper(resources,
- mDisplayDeviceConfig, mDisplayWhiteBalanceController);
if (isIdleScreenBrightnessEnabled) {
- mIdleModeBrightnessMapper = BrightnessMappingStrategy.createForIdleMode(resources,
- mDisplayDeviceConfig, mDisplayWhiteBalanceController);
+ BrightnessMappingStrategy idleModeBrightnessMapper =
+ BrightnessMappingStrategy.create(resources, mDisplayDeviceConfig,
+ AUTO_BRIGHTNESS_MODE_IDLE,
+ mDisplayWhiteBalanceController);
+ if (idleModeBrightnessMapper != null) {
+ brightnessMappers.append(AUTO_BRIGHTNESS_MODE_IDLE,
+ idleModeBrightnessMapper);
+ }
+ }
+
+ float userLux = BrightnessMappingStrategy.INVALID_LUX;
+ float userNits = BrightnessMappingStrategy.INVALID_NITS;
+ if (mAutomaticBrightnessController != null) {
+ userLux = mAutomaticBrightnessController.getUserLux();
+ userNits = mAutomaticBrightnessController.getUserNits();
}
- if (mInteractiveModeBrightnessMapper != null) {
+ if (defaultModeBrightnessMapper != null) {
final float dozeScaleFactor = resources.getFraction(
com.android.internal.R.fraction.config_screenAutoBrightnessDozeScaleFactor,
1, 1);
@@ -1297,25 +1292,17 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
if (mAutomaticBrightnessController != null) {
mAutomaticBrightnessController.stop();
}
- float userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS;
- if (userNits >= 0) {
- userBrightness = mInteractiveModeBrightnessMapper.convertToFloatScale(userNits);
- if (Float.isNaN(userBrightness)) {
- userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS;
- }
- }
mAutomaticBrightnessController = mInjector.getAutomaticBrightnessController(
this, handler.getLooper(), mSensorManager, mLightSensor,
- mInteractiveModeBrightnessMapper, lightSensorWarmUpTimeConfig,
- PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX, dozeScaleFactor,
- lightSensorRate, initialLightSensorRate, brighteningLightDebounce,
- darkeningLightDebounce, brighteningLightDebounceIdle,
- darkeningLightDebounceIdle, autoBrightnessResetAmbientLuxAfterWarmUp,
- ambientBrightnessThresholds, screenBrightnessThresholds,
- ambientBrightnessThresholdsIdle, screenBrightnessThresholdsIdle, mContext,
- mBrightnessRangeController, mBrightnessThrottler, mIdleModeBrightnessMapper,
- mDisplayDeviceConfig.getAmbientHorizonShort(),
- mDisplayDeviceConfig.getAmbientHorizonLong(), userLux, userBrightness);
+ brightnessMappers, lightSensorWarmUpTimeConfig, PowerManager.BRIGHTNESS_MIN,
+ PowerManager.BRIGHTNESS_MAX, dozeScaleFactor, lightSensorRate,
+ initialLightSensorRate, brighteningLightDebounce, darkeningLightDebounce,
+ brighteningLightDebounceIdle, darkeningLightDebounceIdle,
+ autoBrightnessResetAmbientLuxAfterWarmUp, ambientBrightnessThresholds,
+ screenBrightnessThresholds, ambientBrightnessThresholdsIdle,
+ screenBrightnessThresholdsIdle, mContext, mBrightnessRangeController,
+ mBrightnessThrottler, mDisplayDeviceConfig.getAmbientHorizonShort(),
+ mDisplayDeviceConfig.getAmbientHorizonLong(), userLux, userNits);
mBrightnessEventRingBuffer =
new RingBuffer<>(BrightnessEvent.class, RINGBUFFER_MAX);
@@ -1334,7 +1321,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mHandler,
SystemClock::uptimeMillis,
sensorValueToLux,
- mInteractiveModeBrightnessMapper);
+ defaultModeBrightnessMapper);
}
} else {
mUseSoftwareAutoBrightnessConfig = false;
@@ -1377,13 +1364,11 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
}
@Override
- public void setAutomaticScreenBrightnessMode(boolean isIdle) {
+ public void setAutomaticScreenBrightnessMode(
+ @AutomaticBrightnessController.AutomaticBrightnessMode int mode) {
+ boolean isIdle = mode == AUTO_BRIGHTNESS_MODE_IDLE;
if (mAutomaticBrightnessController != null) {
- if (isIdle) {
- mAutomaticBrightnessController.switchToIdleMode();
- } else {
- mAutomaticBrightnessController.switchToInteractiveScreenBrightnessMode();
- }
+ mAutomaticBrightnessController.switchMode(mode);
setAnimatorRampSpeeds(isIdle);
}
@@ -2809,7 +2794,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
float brightnessNitsForDefaultDisplay =
mBrightnessSetting.getBrightnessNitsForDefaultDisplay();
if (brightnessNitsForDefaultDisplay >= 0) {
- float brightnessForDefaultDisplay = convertToFloatScale(
+ float brightnessForDefaultDisplay = getBrightnessFromNits(
brightnessNitsForDefaultDisplay);
if (isValidBrightnessValue(brightnessForDefaultDisplay)) {
mBrightnessSetting.setBrightness(brightnessForDefaultDisplay);
@@ -2943,23 +2928,23 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
private float convertToNits(float brightness) {
if (mAutomaticBrightnessController == null) {
- return -1f;
+ return BrightnessMappingStrategy.INVALID_NITS;
}
return mAutomaticBrightnessController.convertToNits(brightness);
}
private float convertToAdjustedNits(float brightness) {
if (mAutomaticBrightnessController == null) {
- return -1f;
+ return BrightnessMappingStrategy.INVALID_NITS;
}
return mAutomaticBrightnessController.convertToAdjustedNits(brightness);
}
- private float convertToFloatScale(float nits) {
+ private float getBrightnessFromNits(float nits) {
if (mAutomaticBrightnessController == null) {
return PowerManager.BRIGHTNESS_INVALID_FLOAT;
}
- return mAutomaticBrightnessController.convertToFloatScale(nits);
+ return mAutomaticBrightnessController.getBrightnessFromNits(nits);
}
@GuardedBy("mLock")
@@ -3634,7 +3619,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
AutomaticBrightnessController getAutomaticBrightnessController(
AutomaticBrightnessController.Callbacks callbacks, Looper looper,
SensorManager sensorManager, Sensor lightSensor,
- BrightnessMappingStrategy interactiveModeBrightnessMapper,
+ SparseArray<BrightnessMappingStrategy> brightnessMappingStrategyMap,
int lightSensorWarmUpTime, float brightnessMin, float brightnessMax,
float dozeScaleFactor, int lightSensorRate, int initialLightSensorRate,
long brighteningLightDebounceConfig, long darkeningLightDebounceConfig,
@@ -3644,27 +3629,27 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
HysteresisLevels screenBrightnessThresholds,
HysteresisLevels ambientBrightnessThresholdsIdle,
HysteresisLevels screenBrightnessThresholdsIdle, Context context,
- BrightnessRangeController brightnessRangeController,
- BrightnessThrottler brightnessThrottler,
- BrightnessMappingStrategy idleModeBrightnessMapper, int ambientLightHorizonShort,
- int ambientLightHorizonLong, float userLux, float userBrightness) {
+ BrightnessRangeController brightnessModeController,
+ BrightnessThrottler brightnessThrottler, int ambientLightHorizonShort,
+ int ambientLightHorizonLong, float userLux, float userNits) {
return new AutomaticBrightnessController(callbacks, looper, sensorManager, lightSensor,
- interactiveModeBrightnessMapper, lightSensorWarmUpTime, brightnessMin,
+ brightnessMappingStrategyMap, lightSensorWarmUpTime, brightnessMin,
brightnessMax, dozeScaleFactor, lightSensorRate, initialLightSensorRate,
brighteningLightDebounceConfig, darkeningLightDebounceConfig,
brighteningLightDebounceConfigIdle, darkeningLightDebounceConfigIdle,
resetAmbientLuxAfterWarmUpConfig, ambientBrightnessThresholds,
screenBrightnessThresholds, ambientBrightnessThresholdsIdle,
- screenBrightnessThresholdsIdle, context, brightnessRangeController,
- brightnessThrottler, idleModeBrightnessMapper, ambientLightHorizonShort,
- ambientLightHorizonLong, userLux, userBrightness);
+ screenBrightnessThresholdsIdle, context, brightnessModeController,
+ brightnessThrottler, ambientLightHorizonShort, ambientLightHorizonLong, userLux,
+ userNits);
}
- BrightnessMappingStrategy getInteractiveModeBrightnessMapper(Resources resources,
+ BrightnessMappingStrategy getDefaultModeBrightnessMapper(Resources resources,
DisplayDeviceConfig displayDeviceConfig,
DisplayWhiteBalanceController displayWhiteBalanceController) {
return BrightnessMappingStrategy.create(resources,
- displayDeviceConfig, displayWhiteBalanceController);
+ displayDeviceConfig, AUTO_BRIGHTNESS_MODE_DEFAULT,
+ displayWhiteBalanceController);
}
HysteresisLevels getHysteresisLevels(float[] brighteningThresholdsPercentages,
diff --git a/services/core/java/com/android/server/display/DisplayPowerController2.java b/services/core/java/com/android/server/display/DisplayPowerController2.java
index 5310e43eaf1b..810c183a16a0 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController2.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController2.java
@@ -16,6 +16,9 @@
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_IDLE;
+
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.annotation.Nullable;
@@ -52,7 +55,6 @@ import android.os.UserHandle;
import android.provider.Settings;
import android.util.FloatProperty;
import android.util.IndentingPrintWriter;
-import android.util.Log;
import android.util.MathUtils;
import android.util.MutableFloat;
import android.util.MutableInt;
@@ -442,15 +444,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
private Sensor mLightSensor;
private Sensor mScreenOffBrightnessSensor;
- // The mappers between ambient lux, display backlight values, and display brightness.
- // We will switch between the idle mapper and active mapper in AutomaticBrightnessController.
- // Mapper used for active (normal) screen brightness mode
- @Nullable
- private BrightnessMappingStrategy mInteractiveModeBrightnessMapper;
- // Mapper used for idle screen brightness mode
- @Nullable
- private BrightnessMappingStrategy mIdleModeBrightnessMapper;
-
private boolean mIsRbcActive;
// Animators.
@@ -490,7 +483,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
BrightnessTracker brightnessTracker, BrightnessSetting brightnessSetting,
Runnable onBrightnessChangeRunnable, HighBrightnessModeMetadata hbmMetadata,
boolean bootCompleted, DisplayManagerFlags flags) {
-
+ mFlags = flags;
mInjector = injector != null ? injector : new Injector();
mClock = mInjector.getClock();
mLogicalDisplay = logicalDisplay;
@@ -636,7 +629,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
R.bool.config_displayBrightnessBucketsInDoze);
mBootCompleted = bootCompleted;
- mFlags = flags;
}
private void applyReduceBrightColorsSplineAdjustment() {
@@ -648,13 +640,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
if (mAutomaticBrightnessController == null) {
return;
}
- if ((!mAutomaticBrightnessController.isInIdleMode()
- && mInteractiveModeBrightnessMapper == null)
- || (mAutomaticBrightnessController.isInIdleMode()
- && mIdleModeBrightnessMapper == null)) {
- Log.w(mTag, "No brightness mapping available to recalculate splines for this mode");
- return;
- }
float[] adjustedNits = new float[mNitsRange.length];
for (int i = 0; i < mNitsRange.length; i++) {
@@ -987,24 +972,35 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
return;
}
- float userLux = BrightnessMappingStrategy.NO_USER_LUX;
- float userNits = -1;
- if (mInteractiveModeBrightnessMapper != null) {
- userLux = mInteractiveModeBrightnessMapper.getUserLux();
- float userBrightness = mInteractiveModeBrightnessMapper.getUserBrightness();
- userNits = mInteractiveModeBrightnessMapper.convertToNits(userBrightness);
- }
+ SparseArray<BrightnessMappingStrategy> brightnessMappers = new SparseArray<>();
+
+ BrightnessMappingStrategy defaultModeBrightnessMapper =
+ mInjector.getDefaultModeBrightnessMapper(resources, mDisplayDeviceConfig,
+ mDisplayWhiteBalanceController);
+ brightnessMappers.append(AUTO_BRIGHTNESS_MODE_DEFAULT,
+ defaultModeBrightnessMapper);
final boolean isIdleScreenBrightnessEnabled = resources.getBoolean(
R.bool.config_enableIdleScreenBrightnessMode);
- mInteractiveModeBrightnessMapper = mInjector.getInteractiveModeBrightnessMapper(resources,
- mDisplayDeviceConfig, mDisplayWhiteBalanceController);
if (isIdleScreenBrightnessEnabled) {
- mIdleModeBrightnessMapper = BrightnessMappingStrategy.createForIdleMode(resources,
- mDisplayDeviceConfig, mDisplayWhiteBalanceController);
+ BrightnessMappingStrategy idleModeBrightnessMapper =
+ BrightnessMappingStrategy.create(resources, mDisplayDeviceConfig,
+ AUTO_BRIGHTNESS_MODE_IDLE,
+ mDisplayWhiteBalanceController);
+ if (idleModeBrightnessMapper != null) {
+ brightnessMappers.append(AUTO_BRIGHTNESS_MODE_IDLE,
+ idleModeBrightnessMapper);
+ }
+ }
+
+ float userLux = BrightnessMappingStrategy.INVALID_LUX;
+ float userNits = BrightnessMappingStrategy.INVALID_NITS;
+ if (mAutomaticBrightnessController != null) {
+ userLux = mAutomaticBrightnessController.getUserLux();
+ userNits = mAutomaticBrightnessController.getUserNits();
}
- if (mInteractiveModeBrightnessMapper != null) {
+ if (defaultModeBrightnessMapper != null) {
final float dozeScaleFactor = resources.getFraction(
R.fraction.config_screenAutoBrightnessDozeScaleFactor,
1, 1);
@@ -1116,25 +1112,17 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
if (mAutomaticBrightnessController != null) {
mAutomaticBrightnessController.stop();
}
- float userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS;
- if (userNits >= 0) {
- userBrightness = mInteractiveModeBrightnessMapper.convertToFloatScale(userNits);
- if (Float.isNaN(userBrightness)) {
- userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS;
- }
- }
mAutomaticBrightnessController = mInjector.getAutomaticBrightnessController(
this, handler.getLooper(), mSensorManager, mLightSensor,
- mInteractiveModeBrightnessMapper, lightSensorWarmUpTimeConfig,
- PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX, dozeScaleFactor,
- lightSensorRate, initialLightSensorRate, brighteningLightDebounce,
- darkeningLightDebounce, brighteningLightDebounceIdle,
- darkeningLightDebounceIdle, autoBrightnessResetAmbientLuxAfterWarmUp,
- ambientBrightnessThresholds, screenBrightnessThresholds,
- ambientBrightnessThresholdsIdle, screenBrightnessThresholdsIdle, mContext,
- mBrightnessRangeController, mBrightnessThrottler, mIdleModeBrightnessMapper,
- mDisplayDeviceConfig.getAmbientHorizonShort(),
- mDisplayDeviceConfig.getAmbientHorizonLong(), userLux, userBrightness);
+ brightnessMappers, lightSensorWarmUpTimeConfig, PowerManager.BRIGHTNESS_MIN,
+ PowerManager.BRIGHTNESS_MAX, dozeScaleFactor, lightSensorRate,
+ initialLightSensorRate, brighteningLightDebounce, darkeningLightDebounce,
+ brighteningLightDebounceIdle, darkeningLightDebounceIdle,
+ autoBrightnessResetAmbientLuxAfterWarmUp, ambientBrightnessThresholds,
+ screenBrightnessThresholds, ambientBrightnessThresholdsIdle,
+ screenBrightnessThresholdsIdle, mContext, mBrightnessRangeController,
+ mBrightnessThrottler, mDisplayDeviceConfig.getAmbientHorizonShort(),
+ mDisplayDeviceConfig.getAmbientHorizonLong(), userLux, userNits);
mDisplayBrightnessController.setAutomaticBrightnessController(
mAutomaticBrightnessController);
@@ -1157,7 +1145,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
mHandler,
SystemClock::uptimeMillis,
sensorValueToLux,
- mInteractiveModeBrightnessMapper);
+ defaultModeBrightnessMapper);
}
} else {
mUseSoftwareAutoBrightnessConfig = false;
@@ -1200,13 +1188,11 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
}
@Override
- public void setAutomaticScreenBrightnessMode(boolean isIdle) {
+ public void setAutomaticScreenBrightnessMode(
+ @AutomaticBrightnessController.AutomaticBrightnessMode int mode) {
+ boolean isIdle = mode == AUTO_BRIGHTNESS_MODE_IDLE;
if (mAutomaticBrightnessController != null) {
- if (isIdle) {
- mAutomaticBrightnessController.switchToIdleMode();
- } else {
- mAutomaticBrightnessController.switchToInteractiveScreenBrightnessMode();
- }
+ mAutomaticBrightnessController.switchMode(mode);
setAnimatorRampSpeeds(isIdle);
}
Message msg = mHandler.obtainMessage();
@@ -2350,10 +2336,10 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
public void setBrightnessToFollow(float leadDisplayBrightness, float nits, float ambientLux,
boolean slowChange) {
mBrightnessRangeController.onAmbientLuxChange(ambientLux);
- if (nits < 0) {
+ if (nits == BrightnessMappingStrategy.INVALID_NITS) {
mDisplayBrightnessController.setBrightnessToFollow(leadDisplayBrightness, slowChange);
} else {
- float brightness = mDisplayBrightnessController.convertToFloatScale(nits);
+ float brightness = mDisplayBrightnessController.getBrightnessFromNits(nits);
if (BrightnessUtils.isValidBrightnessValue(brightness)) {
mDisplayBrightnessController.setBrightnessToFollow(brightness, slowChange);
} else {
@@ -2420,7 +2406,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
synchronized (mLock) {
mDisplayBrightnessFollowers.remove(follower.getDisplayId());
mHandler.postAtTime(() -> follower.setBrightnessToFollow(
- PowerManager.BRIGHTNESS_INVALID_FLOAT, /* nits= */ -1,
+ PowerManager.BRIGHTNESS_INVALID_FLOAT, BrightnessMappingStrategy.INVALID_NITS,
/* ambientLux= */ 0, /* slowChange= */ false), mClock.uptimeMillis());
}
}
@@ -2430,7 +2416,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
for (int i = 0; i < mDisplayBrightnessFollowers.size(); i++) {
DisplayPowerControllerInterface follower = mDisplayBrightnessFollowers.valueAt(i);
mHandler.postAtTime(() -> follower.setBrightnessToFollow(
- PowerManager.BRIGHTNESS_INVALID_FLOAT, /* nits= */ -1,
+ PowerManager.BRIGHTNESS_INVALID_FLOAT, BrightnessMappingStrategy.INVALID_NITS,
/* ambientLux= */ 0, /* slowChange= */ false), mClock.uptimeMillis());
}
mDisplayBrightnessFollowers.clear();
@@ -3011,7 +2997,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
AutomaticBrightnessController getAutomaticBrightnessController(
AutomaticBrightnessController.Callbacks callbacks, Looper looper,
SensorManager sensorManager, Sensor lightSensor,
- BrightnessMappingStrategy interactiveModeBrightnessMapper,
+ SparseArray<BrightnessMappingStrategy> brightnessMappingStrategyMap,
int lightSensorWarmUpTime, float brightnessMin, float brightnessMax,
float dozeScaleFactor, int lightSensorRate, int initialLightSensorRate,
long brighteningLightDebounceConfig, long darkeningLightDebounceConfig,
@@ -3022,26 +3008,26 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
HysteresisLevels ambientBrightnessThresholdsIdle,
HysteresisLevels screenBrightnessThresholdsIdle, Context context,
BrightnessRangeController brightnessModeController,
- BrightnessThrottler brightnessThrottler,
- BrightnessMappingStrategy idleModeBrightnessMapper, int ambientLightHorizonShort,
- int ambientLightHorizonLong, float userLux, float userBrightness) {
+ BrightnessThrottler brightnessThrottler, int ambientLightHorizonShort,
+ int ambientLightHorizonLong, float userLux, float userNits) {
return new AutomaticBrightnessController(callbacks, looper, sensorManager, lightSensor,
- interactiveModeBrightnessMapper, lightSensorWarmUpTime, brightnessMin,
+ brightnessMappingStrategyMap, lightSensorWarmUpTime, brightnessMin,
brightnessMax, dozeScaleFactor, lightSensorRate, initialLightSensorRate,
brighteningLightDebounceConfig, darkeningLightDebounceConfig,
brighteningLightDebounceConfigIdle, darkeningLightDebounceConfigIdle,
resetAmbientLuxAfterWarmUpConfig, ambientBrightnessThresholds,
screenBrightnessThresholds, ambientBrightnessThresholdsIdle,
screenBrightnessThresholdsIdle, context, brightnessModeController,
- brightnessThrottler, idleModeBrightnessMapper, ambientLightHorizonShort,
- ambientLightHorizonLong, userLux, userBrightness);
+ brightnessThrottler, ambientLightHorizonShort, ambientLightHorizonLong, userLux,
+ userNits);
}
- BrightnessMappingStrategy getInteractiveModeBrightnessMapper(Resources resources,
+ BrightnessMappingStrategy getDefaultModeBrightnessMapper(Resources resources,
DisplayDeviceConfig displayDeviceConfig,
DisplayWhiteBalanceController displayWhiteBalanceController) {
return BrightnessMappingStrategy.create(resources,
- displayDeviceConfig, displayWhiteBalanceController);
+ displayDeviceConfig, AUTO_BRIGHTNESS_MODE_DEFAULT,
+ displayWhiteBalanceController);
}
HysteresisLevels getHysteresisLevels(float[] brighteningThresholdsPercentages,
diff --git a/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java b/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java
index 72079a4c82fe..c27918430254 100644
--- a/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java
+++ b/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java
@@ -69,9 +69,10 @@ public interface DisplayPowerControllerInterface {
/**
* Used to decide the associated AutomaticBrightnessController's BrightnessMode
- * @param isIdle Flag which represents if the Idle BrightnessMode is to be set
+ * @param mode The auto-brightness mode
*/
- void setAutomaticScreenBrightnessMode(boolean isIdle);
+ void setAutomaticScreenBrightnessMode(
+ @AutomaticBrightnessController.AutomaticBrightnessMode int mode);
/**
* Used to enable/disable the logging of the WhileBalance associated entities
diff --git a/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java b/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java
index 617befbbd17d..3bb798689ea6 100644
--- a/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java
+++ b/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java
@@ -27,6 +27,7 @@ import android.view.Display;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.display.AutomaticBrightnessController;
+import com.android.server.display.BrightnessMappingStrategy;
import com.android.server.display.BrightnessSetting;
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.strategy.AutomaticBrightnessStrategy;
@@ -359,11 +360,12 @@ public final class DisplayBrightnessController {
* passing the brightness value to follower displays.
*
* @param brightness The float scale value
- * @return The nit value or -1f if no conversion is possible.
+ * @return The nit value or {@link BrightnessMappingStrategy.INVALID_NITS} if no conversion is
+ * possible.
*/
public float convertToNits(float brightness) {
if (mAutomaticBrightnessController == null) {
- return -1f;
+ return BrightnessMappingStrategy.INVALID_NITS;
}
return mAutomaticBrightnessController.convertToNits(brightness);
}
@@ -374,11 +376,12 @@ public final class DisplayBrightnessController {
* {@link com.android.server.display.BrightnessTracker}.
*
* @param brightness The float scale value
- * @return The nit value or -1f if no conversion is possible.
+ * @return The nit value or {@link BrightnessMappingStrategy.INVALID_NITS} if no conversion is
+ * possible.
*/
public float convertToAdjustedNits(float brightness) {
if (mAutomaticBrightnessController == null) {
- return -1f;
+ return BrightnessMappingStrategy.INVALID_NITS;
}
return mAutomaticBrightnessController.convertToAdjustedNits(brightness);
}
@@ -391,11 +394,11 @@ public final class DisplayBrightnessController {
* @return The float scale value or {@link PowerManager.BRIGHTNESS_INVALID_FLOAT} if no
* conversion is possible.
*/
- public float convertToFloatScale(float nits) {
+ public float getBrightnessFromNits(float nits) {
if (mAutomaticBrightnessController == null) {
return PowerManager.BRIGHTNESS_INVALID_FLOAT;
}
- return mAutomaticBrightnessController.convertToFloatScale(nits);
+ return mAutomaticBrightnessController.getBrightnessFromNits(nits);
}
/**
@@ -497,7 +500,7 @@ public final class DisplayBrightnessController {
float brightnessNitsForDefaultDisplay =
mBrightnessSetting.getBrightnessNitsForDefaultDisplay();
if (brightnessNitsForDefaultDisplay >= 0) {
- float brightnessForDefaultDisplay = convertToFloatScale(
+ float brightnessForDefaultDisplay = getBrightnessFromNits(
brightnessNitsForDefaultDisplay);
if (BrightnessUtils.isValidBrightnessValue(brightnessForDefaultDisplay)) {
mBrightnessSetting.setBrightness(brightnessForDefaultDisplay);
diff --git a/services/tests/displayservicetests/src/com/android/server/display/AutomaticBrightnessControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/AutomaticBrightnessControllerTest.java
index 2bdebe26e551..418b78cd696b 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/AutomaticBrightnessControllerTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/AutomaticBrightnessControllerTest.java
@@ -17,6 +17,8 @@
package com.android.server.display;
import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED;
+import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_DEFAULT;
+import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIGHTNESS_MODE_IDLE;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
@@ -39,7 +41,9 @@ import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.hardware.display.DisplayManagerInternal.DisplayPowerRequest;
import android.os.Handler;
+import android.os.PowerManager;
import android.os.test.TestLooper;
+import android.util.SparseArray;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
@@ -98,8 +102,8 @@ public class AutomaticBrightnessControllerTest {
mLightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor");
mContext = InstrumentationRegistry.getContext();
- setupController(BrightnessMappingStrategy.NO_USER_LUX,
- BrightnessMappingStrategy.NO_USER_BRIGHTNESS, /* applyDebounce= */ false,
+ setupController(BrightnessMappingStrategy.INVALID_LUX,
+ BrightnessMappingStrategy.INVALID_NITS, /* applyDebounce= */ false,
/* useHorizon= */ true);
}
@@ -112,11 +116,19 @@ public class AutomaticBrightnessControllerTest {
}
}
- private void setupController(float userLux, float userBrightness, boolean applyDebounce,
+ private void setupController(float userLux, float userNits, boolean applyDebounce,
boolean useHorizon) {
mClock = new OffsettableClock.Stopped();
mTestLooper = new TestLooper(mClock::now);
+ when(mBrightnessMappingStrategy.getMode()).thenReturn(AUTO_BRIGHTNESS_MODE_DEFAULT);
+ when(mIdleBrightnessMappingStrategy.getMode()).thenReturn(AUTO_BRIGHTNESS_MODE_IDLE);
+
+ SparseArray<BrightnessMappingStrategy> brightnessMappingStrategyMap = new SparseArray<>();
+ brightnessMappingStrategyMap.append(AUTO_BRIGHTNESS_MODE_DEFAULT,
+ mBrightnessMappingStrategy);
+ brightnessMappingStrategyMap.append(AUTO_BRIGHTNESS_MODE_IDLE,
+ mIdleBrightnessMappingStrategy);
mController = new AutomaticBrightnessController(
new AutomaticBrightnessController.Injector() {
@Override
@@ -131,7 +143,7 @@ public class AutomaticBrightnessControllerTest {
}, // pass in test looper instead, pass in offsettable clock
() -> { }, mTestLooper.getLooper(), mSensorManager, mLightSensor,
- mBrightnessMappingStrategy, LIGHT_SENSOR_WARMUP_TIME, BRIGHTNESS_MIN_FLOAT,
+ brightnessMappingStrategyMap, LIGHT_SENSOR_WARMUP_TIME, BRIGHTNESS_MIN_FLOAT,
BRIGHTNESS_MAX_FLOAT, DOZE_SCALE_FACTOR, LIGHT_SENSOR_RATE,
INITIAL_LIGHT_SENSOR_RATE, applyDebounce ? BRIGHTENING_LIGHT_DEBOUNCE_CONFIG : 0,
applyDebounce ? DARKENING_LIGHT_DEBOUNCE_CONFIG : 0,
@@ -141,8 +153,8 @@ public class AutomaticBrightnessControllerTest {
mAmbientBrightnessThresholds, mScreenBrightnessThresholds,
mAmbientBrightnessThresholdsIdle, mScreenBrightnessThresholdsIdle,
mContext, mBrightnessRangeController, mBrightnessThrottler,
- mIdleBrightnessMappingStrategy, useHorizon ? AMBIENT_LIGHT_HORIZON_SHORT : 1,
- useHorizon ? AMBIENT_LIGHT_HORIZON_LONG : 10000, userLux, userBrightness
+ useHorizon ? AMBIENT_LIGHT_HORIZON_SHORT : 1,
+ useHorizon ? AMBIENT_LIGHT_HORIZON_LONG : 10000, userLux, userNits
);
when(mBrightnessRangeController.getCurrentBrightnessMax()).thenReturn(
@@ -326,8 +338,7 @@ public class AutomaticBrightnessControllerTest {
when(mBrightnessMappingStrategy.getShortTermModelTimeout()).thenReturn(2000L);
- mController.switchToIdleMode();
- when(mIdleBrightnessMappingStrategy.isForIdleMode()).thenReturn(true);
+ mController.switchMode(AUTO_BRIGHTNESS_MODE_IDLE);
when(mBrightnessMappingStrategy.shouldResetShortTermModel(
123f, 0.5f)).thenReturn(true);
@@ -337,7 +348,7 @@ public class AutomaticBrightnessControllerTest {
mBrightnessMappingStrategy.getShortTermModelTimeout() + 1000);
mTestLooper.dispatchAll();
- mController.switchToInteractiveScreenBrightnessMode();
+ mController.switchMode(AUTO_BRIGHTNESS_MODE_DEFAULT);
mTestLooper.moveTimeForward(4000);
mTestLooper.dispatchAll();
@@ -371,15 +382,14 @@ public class AutomaticBrightnessControllerTest {
when(mBrightnessMappingStrategy.getUserBrightness()).thenReturn(0.51f);
when(mBrightnessMappingStrategy.getUserLux()).thenReturn(123.0f);
- mController.switchToIdleMode();
- when(mIdleBrightnessMappingStrategy.isForIdleMode()).thenReturn(true);
+ mController.switchMode(AUTO_BRIGHTNESS_MODE_IDLE);
// Time does not move forward, since clock is doesn't increment naturally.
mTestLooper.dispatchAll();
// Sensor reads 100000 lux,
listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 678910));
- mController.switchToInteractiveScreenBrightnessMode();
+ mController.switchMode(AUTO_BRIGHTNESS_MODE_DEFAULT);
// Verify short term model is not reset.
verify(mBrightnessMappingStrategy, never()).clearUserDataPoints();
@@ -410,10 +420,11 @@ public class AutomaticBrightnessControllerTest {
when(mBrightnessMappingStrategy.getUserBrightness()).thenReturn(0.5f);
when(mBrightnessMappingStrategy.getUserLux()).thenReturn(123f);
- mController.switchToIdleMode();
- when(mIdleBrightnessMappingStrategy.isForIdleMode()).thenReturn(true);
- when(mIdleBrightnessMappingStrategy.getUserBrightness()).thenReturn(-1f);
- when(mIdleBrightnessMappingStrategy.getUserLux()).thenReturn(-1f);
+ mController.switchMode(AUTO_BRIGHTNESS_MODE_IDLE);
+ when(mIdleBrightnessMappingStrategy.getUserBrightness()).thenReturn(
+ PowerManager.BRIGHTNESS_INVALID_FLOAT);
+ when(mIdleBrightnessMappingStrategy.getUserLux()).thenReturn(
+ BrightnessMappingStrategy.INVALID_LUX);
when(mBrightnessMappingStrategy.shouldResetShortTermModel(
123f, 0.5f)).thenReturn(true);
@@ -423,7 +434,7 @@ public class AutomaticBrightnessControllerTest {
mBrightnessMappingStrategy.getShortTermModelTimeout() + 1000);
mTestLooper.dispatchAll();
- mController.switchToInteractiveScreenBrightnessMode();
+ mController.switchMode(AUTO_BRIGHTNESS_MODE_DEFAULT);
mTestLooper.moveTimeForward(4000);
mTestLooper.dispatchAll();
@@ -456,10 +467,11 @@ public class AutomaticBrightnessControllerTest {
when(mBrightnessMappingStrategy.getUserBrightness()).thenReturn(0.5f);
when(mBrightnessMappingStrategy.getUserLux()).thenReturn(123f);
- mController.switchToIdleMode();
- when(mIdleBrightnessMappingStrategy.isForIdleMode()).thenReturn(true);
- when(mIdleBrightnessMappingStrategy.getUserBrightness()).thenReturn(-1f);
- when(mIdleBrightnessMappingStrategy.getUserLux()).thenReturn(-1f);
+ mController.switchMode(AUTO_BRIGHTNESS_MODE_IDLE);
+ when(mIdleBrightnessMappingStrategy.getUserBrightness()).thenReturn(
+ PowerManager.BRIGHTNESS_INVALID_FLOAT);
+ when(mIdleBrightnessMappingStrategy.getUserLux()).thenReturn(
+ BrightnessMappingStrategy.INVALID_LUX);
when(mBrightnessMappingStrategy.shouldResetShortTermModel(
123f, 0.5f)).thenReturn(true);
@@ -469,7 +481,7 @@ public class AutomaticBrightnessControllerTest {
// Do not fast-forward time.
mTestLooper.dispatchAll();
- mController.switchToInteractiveScreenBrightnessMode();
+ mController.switchMode(AUTO_BRIGHTNESS_MODE_DEFAULT);
// Do not fast-forward time
mTestLooper.dispatchAll();
@@ -492,22 +504,25 @@ public class AutomaticBrightnessControllerTest {
// Sensor reads 123 lux,
listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 123));
when(mBrightnessMappingStrategy.getShortTermModelTimeout()).thenReturn(2000L);
- when(mBrightnessMappingStrategy.getUserBrightness()).thenReturn(-1.0f);
- when(mBrightnessMappingStrategy.getUserLux()).thenReturn(-1.0f);
+ when(mBrightnessMappingStrategy.getUserBrightness()).thenReturn(
+ PowerManager.BRIGHTNESS_INVALID_FLOAT);
+ when(mBrightnessMappingStrategy.getUserLux()).thenReturn(
+ BrightnessMappingStrategy.INVALID_LUX);
// No user brightness interaction.
- mController.switchToIdleMode();
- when(mIdleBrightnessMappingStrategy.isForIdleMode()).thenReturn(true);
- when(mIdleBrightnessMappingStrategy.getUserBrightness()).thenReturn(-1.0f);
- when(mIdleBrightnessMappingStrategy.getUserLux()).thenReturn(-1.0f);
+ mController.switchMode(AUTO_BRIGHTNESS_MODE_IDLE);
+ when(mIdleBrightnessMappingStrategy.getUserBrightness()).thenReturn(
+ PowerManager.BRIGHTNESS_INVALID_FLOAT);
+ when(mIdleBrightnessMappingStrategy.getUserLux()).thenReturn(
+ BrightnessMappingStrategy.INVALID_LUX);
// Sensor reads 1000 lux,
listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 1000));
// Do not fast-forward time.
mTestLooper.dispatchAll();
- mController.switchToInteractiveScreenBrightnessMode();
+ mController.switchMode(AUTO_BRIGHTNESS_MODE_DEFAULT);
// Do not fast-forward time
mTestLooper.dispatchAll();
@@ -541,12 +556,12 @@ public class AutomaticBrightnessControllerTest {
verify(mBrightnessMappingStrategy, times(3)).getBrightness(anyFloat(), any(), anyInt());
// Now let's do the same for idle mode
- mController.switchToIdleMode();
- // Called once for init, and once when switching,
+ mController.switchMode(AUTO_BRIGHTNESS_MODE_IDLE);
+ // Called once when switching,
// setAmbientLux() is called twice and once in updateAutoBrightness(),
// nextAmbientLightBrighteningTransition() and nextAmbientLightDarkeningTransition() are
// called twice each.
- verify(mBrightnessMappingStrategy, times(9)).isForIdleMode();
+ verify(mBrightnessMappingStrategy, times(8)).getMode();
// Called when switching.
verify(mBrightnessMappingStrategy, times(1)).getShortTermModelTimeout();
verify(mBrightnessMappingStrategy, times(1)).getUserBrightness();
@@ -826,7 +841,6 @@ public class AutomaticBrightnessControllerTest {
@Test
public void testResetShortTermModelWhenConfigChanges() {
- when(mBrightnessMappingStrategy.isForIdleMode()).thenReturn(false);
when(mBrightnessMappingStrategy.setBrightnessConfiguration(any())).thenReturn(true);
mController.configure(AUTO_BRIGHTNESS_ENABLED, null /* configuration= */,
@@ -847,8 +861,10 @@ public class AutomaticBrightnessControllerTest {
verify(mBrightnessMappingStrategy, never()).addUserDataPoint(anyFloat(), anyFloat());
float userLux = 1000;
+ float userNits = 500;
float userBrightness = 0.3f;
- setupController(userLux, userBrightness, /* applyDebounce= */ true,
+ when(mBrightnessMappingStrategy.getBrightnessFromNits(userNits)).thenReturn(userBrightness);
+ setupController(userLux, userNits, /* applyDebounce= */ true,
/* useHorizon= */ false);
verify(mBrightnessMappingStrategy).addUserDataPoint(userLux, userBrightness);
}
@@ -856,8 +872,8 @@ public class AutomaticBrightnessControllerTest {
@Test
public void testBrighteningLightDebounce() throws Exception {
clearInvocations(mSensorManager);
- setupController(BrightnessMappingStrategy.NO_USER_LUX,
- BrightnessMappingStrategy.NO_USER_BRIGHTNESS, /* applyDebounce= */ true,
+ setupController(BrightnessMappingStrategy.INVALID_LUX,
+ BrightnessMappingStrategy.INVALID_NITS, /* applyDebounce= */ true,
/* useHorizon= */ false);
ArgumentCaptor<SensorEventListener> listenerCaptor =
@@ -897,8 +913,8 @@ public class AutomaticBrightnessControllerTest {
.thenReturn(10000f);
when(mAmbientBrightnessThresholds.getDarkeningThreshold(anyFloat()))
.thenReturn(10000f);
- setupController(BrightnessMappingStrategy.NO_USER_LUX,
- BrightnessMappingStrategy.NO_USER_BRIGHTNESS, /* applyDebounce= */ true,
+ setupController(BrightnessMappingStrategy.INVALID_LUX,
+ BrightnessMappingStrategy.INVALID_NITS, /* applyDebounce= */ true,
/* useHorizon= */ false);
ArgumentCaptor<SensorEventListener> listenerCaptor =
@@ -934,12 +950,11 @@ public class AutomaticBrightnessControllerTest {
@Test
public void testBrighteningLightDebounceIdle() throws Exception {
clearInvocations(mSensorManager);
- setupController(BrightnessMappingStrategy.NO_USER_LUX,
- BrightnessMappingStrategy.NO_USER_BRIGHTNESS, /* applyDebounce= */ true,
+ setupController(BrightnessMappingStrategy.INVALID_LUX,
+ BrightnessMappingStrategy.INVALID_NITS, /* applyDebounce= */ true,
/* useHorizon= */ false);
- mController.switchToIdleMode();
- when(mIdleBrightnessMappingStrategy.isForIdleMode()).thenReturn(true);
+ mController.switchMode(AUTO_BRIGHTNESS_MODE_IDLE);
ArgumentCaptor<SensorEventListener> listenerCaptor =
ArgumentCaptor.forClass(SensorEventListener.class);
@@ -972,12 +987,11 @@ public class AutomaticBrightnessControllerTest {
.thenReturn(10000f);
when(mAmbientBrightnessThresholdsIdle.getDarkeningThreshold(anyFloat()))
.thenReturn(10000f);
- setupController(BrightnessMappingStrategy.NO_USER_LUX,
- BrightnessMappingStrategy.NO_USER_BRIGHTNESS, /* applyDebounce= */ true,
+ setupController(BrightnessMappingStrategy.INVALID_LUX,
+ BrightnessMappingStrategy.INVALID_NITS, /* applyDebounce= */ true,
/* useHorizon= */ false);
- mController.switchToIdleMode();
- when(mIdleBrightnessMappingStrategy.isForIdleMode()).thenReturn(true);
+ mController.switchMode(AUTO_BRIGHTNESS_MODE_IDLE);
ArgumentCaptor<SensorEventListener> listenerCaptor =
ArgumentCaptor.forClass(SensorEventListener.class);
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 a2e80f0d9b9b..189d9bbfe806 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/BrightnessMappingStrategyTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/BrightnessMappingStrategyTest.java
@@ -16,6 +16,9 @@
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_IDLE;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
@@ -172,7 +175,9 @@ public class BrightnessMappingStrategyTest {
public void testSimpleStrategyMappingAtControlPoints_IntConfig() {
Resources res = createResources(DISPLAY_LEVELS_INT);
DisplayDeviceConfig ddc = createDdc();
- BrightnessMappingStrategy simple = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ BrightnessMappingStrategy simple = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT,
+ mMockDwbc);
assertNotNull("BrightnessMappingStrategy should not be null", simple);
for (int i = 0; i < LUX_LEVELS.length; i++) {
final float expectedLevel = MathUtils.map(PowerManager.BRIGHTNESS_OFF + 1,
@@ -187,7 +192,9 @@ public class BrightnessMappingStrategyTest {
public void testSimpleStrategyMappingBetweenControlPoints_IntConfig() {
Resources res = createResources(DISPLAY_LEVELS_INT);
DisplayDeviceConfig ddc = createDdc();
- BrightnessMappingStrategy simple = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ BrightnessMappingStrategy simple = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT,
+ mMockDwbc);
assertNotNull("BrightnessMappingStrategy should not be null", simple);
for (int i = 1; i < LUX_LEVELS.length; i++) {
final float lux = (LUX_LEVELS[i - 1] + LUX_LEVELS[i]) / 2;
@@ -203,7 +210,9 @@ public class BrightnessMappingStrategyTest {
Resources res = createResources(EMPTY_INT_ARRAY);
DisplayDeviceConfig ddc = createDdc(EMPTY_FLOAT_ARRAY, EMPTY_FLOAT_ARRAY, LUX_LEVELS,
EMPTY_FLOAT_ARRAY, DISPLAY_LEVELS);
- BrightnessMappingStrategy simple = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ BrightnessMappingStrategy simple = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT,
+ mMockDwbc);
assertNotNull("BrightnessMappingStrategy should not be null", simple);
for (int i = 0; i < LUX_LEVELS.length; i++) {
assertEquals(DISPLAY_LEVELS[i], simple.getBrightness(LUX_LEVELS[i]),
@@ -216,7 +225,9 @@ public class BrightnessMappingStrategyTest {
Resources res = createResources(EMPTY_INT_ARRAY);
DisplayDeviceConfig ddc = createDdc(EMPTY_FLOAT_ARRAY, EMPTY_FLOAT_ARRAY, LUX_LEVELS,
EMPTY_FLOAT_ARRAY, DISPLAY_LEVELS);
- BrightnessMappingStrategy simple = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ BrightnessMappingStrategy simple = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT,
+ mMockDwbc);
assertNotNull("BrightnessMappingStrategy should not be null", simple);
for (int i = 1; i < LUX_LEVELS.length; i++) {
final float lux = (LUX_LEVELS[i - 1] + LUX_LEVELS[i]) / 2;
@@ -230,7 +241,8 @@ public class BrightnessMappingStrategyTest {
public void testSimpleStrategyIgnoresNewConfiguration() {
Resources res = createResources(DISPLAY_LEVELS_INT);
DisplayDeviceConfig ddc = createDdc();
- BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc);
final float[] lux = { 0f, 1f };
final float[] nits = { 0, PowerManager.BRIGHTNESS_ON };
@@ -245,7 +257,8 @@ public class BrightnessMappingStrategyTest {
public void testSimpleStrategyIgnoresNullConfiguration() {
Resources res = createResources(DISPLAY_LEVELS_INT);
DisplayDeviceConfig ddc = createDdc();
- BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc);
strategy.setBrightnessConfiguration(null);
final int n = DISPLAY_LEVELS_INT.length;
@@ -261,7 +274,8 @@ public class BrightnessMappingStrategyTest {
DisplayDeviceConfig ddc = createDdc(DISPLAY_RANGE_NITS,
DISPLAY_LEVELS_RANGE_BACKLIGHT_FLOAT,
LUX_LEVELS, DISPLAY_LEVELS_NITS);
- BrightnessMappingStrategy physical = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ BrightnessMappingStrategy physical = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc);
assertNotNull("BrightnessMappingStrategy should not be null", physical);
for (int i = 0; i < LUX_LEVELS.length; i++) {
final float expectedLevel = MathUtils.map(DISPLAY_RANGE_NITS[0], DISPLAY_RANGE_NITS[1],
@@ -279,7 +293,8 @@ public class BrightnessMappingStrategyTest {
Resources res = createResources(EMPTY_INT_ARRAY);
DisplayDeviceConfig ddc = createDdc(DISPLAY_RANGE_NITS, BACKLIGHT_RANGE_ZERO_TO_ONE,
LUX_LEVELS, DISPLAY_LEVELS_NITS);
- BrightnessMappingStrategy physical = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ BrightnessMappingStrategy physical = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc);
assertNotNull("BrightnessMappingStrategy should not be null", physical);
Spline brightnessToNits =
Spline.createSpline(BACKLIGHT_RANGE_ZERO_TO_ONE, DISPLAY_RANGE_NITS);
@@ -297,7 +312,8 @@ public class BrightnessMappingStrategyTest {
Resources res = createResources(EMPTY_INT_ARRAY);
DisplayDeviceConfig ddc = createDdc(DISPLAY_RANGE_NITS,
DISPLAY_LEVELS_RANGE_BACKLIGHT_FLOAT, LUX_LEVELS, DISPLAY_LEVELS_NITS);
- BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc);
final float[] lux = {0f, 1f};
final float[] nits = {
@@ -323,7 +339,8 @@ public class BrightnessMappingStrategyTest {
Resources res = createResources(EMPTY_INT_ARRAY);
DisplayDeviceConfig ddc = createDdc(DISPLAY_RANGE_NITS,
DISPLAY_LEVELS_RANGE_BACKLIGHT_FLOAT, LUX_LEVELS, DISPLAY_LEVELS_NITS);
- BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc);
float[] adjustedNits50p = new float[DISPLAY_RANGE_NITS.length];
for (int i = 0; i < DISPLAY_RANGE_NITS.length; i++) {
adjustedNits50p[i] = DISPLAY_RANGE_NITS[i] * 0.5f;
@@ -367,7 +384,8 @@ public class BrightnessMappingStrategyTest {
Resources res = createResources(DISPLAY_LEVELS_INT);
DisplayDeviceConfig ddc = createDdc(DISPLAY_RANGE_NITS,
DISPLAY_LEVELS_RANGE_BACKLIGHT_FLOAT, LUX_LEVELS, DISPLAY_LEVELS_NITS);
- BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc);
assertTrue(strategy instanceof BrightnessMappingStrategy.PhysicalMappingStrategy);
}
@@ -381,14 +399,16 @@ public class BrightnessMappingStrategyTest {
Resources res = createResources(EMPTY_INT_ARRAY);
DisplayDeviceConfig ddc = createDdc(DISPLAY_RANGE_NITS,
DISPLAY_LEVELS_RANGE_BACKLIGHT_FLOAT, lux, DISPLAY_LEVELS_NITS);
- BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc);
assertNull(strategy);
// And make sure we get the same result even if it's monotone but not increasing.
lux[idx] = lux[idx + 1];
ddc = createDdc(DISPLAY_RANGE_NITS, DISPLAY_LEVELS_RANGE_BACKLIGHT_FLOAT, lux,
DISPLAY_LEVELS_NITS);
- strategy = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ strategy = BrightnessMappingStrategy.create(res, ddc, AUTO_BRIGHTNESS_MODE_DEFAULT,
+ mMockDwbc);
assertNull(strategy);
}
@@ -402,11 +422,13 @@ public class BrightnessMappingStrategyTest {
Resources res = createResources(EMPTY_INT_ARRAY);
DisplayDeviceConfig ddc = createDdc(DISPLAY_RANGE_NITS,
DISPLAY_LEVELS_RANGE_BACKLIGHT_FLOAT, lux, DISPLAY_LEVELS_NITS);
- BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc);
assertNull(strategy);
res = createResources(DISPLAY_LEVELS_INT);
- strategy = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ strategy = BrightnessMappingStrategy.create(res, ddc, AUTO_BRIGHTNESS_MODE_DEFAULT,
+ mMockDwbc);
assertNull(strategy);
// Extra backlight level
@@ -416,7 +438,8 @@ public class BrightnessMappingStrategyTest {
res = createResources(backlight);
ddc = createDdc(DISPLAY_RANGE_NITS,
DISPLAY_LEVELS_RANGE_BACKLIGHT_FLOAT, LUX_LEVELS, EMPTY_FLOAT_ARRAY);
- strategy = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ strategy = BrightnessMappingStrategy.create(res, ddc, AUTO_BRIGHTNESS_MODE_DEFAULT,
+ mMockDwbc);
assertNull(strategy);
// Extra nits level
@@ -425,7 +448,8 @@ public class BrightnessMappingStrategyTest {
res = createResources(EMPTY_INT_ARRAY);
ddc = createDdc(DISPLAY_RANGE_NITS,
DISPLAY_LEVELS_RANGE_BACKLIGHT_FLOAT, LUX_LEVELS, nits);
- strategy = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ strategy = BrightnessMappingStrategy.create(res, ddc, AUTO_BRIGHTNESS_MODE_DEFAULT,
+ mMockDwbc);
assertNull(strategy);
}
@@ -433,15 +457,18 @@ public class BrightnessMappingStrategyTest {
public void testPhysicalStrategyRequiresNitsMapping() {
Resources res = createResources(EMPTY_INT_ARRAY /*brightnessLevelsBacklight*/);
DisplayDeviceConfig ddc = createDdc(EMPTY_FLOAT_ARRAY /*nitsRange*/);
- BrightnessMappingStrategy physical = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ BrightnessMappingStrategy physical = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc);
assertNull(physical);
res = createResources(EMPTY_INT_ARRAY /*brightnessLevelsBacklight*/);
- physical = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ physical = BrightnessMappingStrategy.create(res, ddc, AUTO_BRIGHTNESS_MODE_DEFAULT,
+ mMockDwbc);
assertNull(physical);
res = createResources(EMPTY_INT_ARRAY /*brightnessLevelsBacklight*/);
- physical = BrightnessMappingStrategy.create(res, ddc, mMockDwbc);
+ physical = BrightnessMappingStrategy.create(res, ddc, AUTO_BRIGHTNESS_MODE_DEFAULT,
+ mMockDwbc);
assertNull(physical);
}
@@ -450,10 +477,12 @@ public class BrightnessMappingStrategyTest {
Resources res = createResources(EMPTY_INT_ARRAY /*brightnessLevelsBacklight*/);
DisplayDeviceConfig ddc = createDdc(DISPLAY_RANGE_NITS, BACKLIGHT_RANGE_ZERO_TO_ONE,
LUX_LEVELS, DISPLAY_LEVELS_NITS);
- assertStrategyAdaptsToUserDataPoints(BrightnessMappingStrategy.create(res, ddc, mMockDwbc));
+ assertStrategyAdaptsToUserDataPoints(BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc));
ddc = createDdc(DISPLAY_RANGE_NITS, BACKLIGHT_RANGE_ZERO_TO_ONE);
res = createResources(DISPLAY_LEVELS_INT);
- assertStrategyAdaptsToUserDataPoints(BrightnessMappingStrategy.create(res, ddc, mMockDwbc));
+ assertStrategyAdaptsToUserDataPoints(BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc));
}
@Test
@@ -463,7 +492,8 @@ public class BrightnessMappingStrategyTest {
// Create an idle mode bms
// This will fail if it tries to fetch the wrong configuration.
- BrightnessMappingStrategy bms = BrightnessMappingStrategy.createForIdleMode(res, ddc,
+ BrightnessMappingStrategy bms = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_IDLE,
mMockDwbc);
assertNotNull("BrightnessMappingStrategy should not be null", bms);
@@ -652,7 +682,7 @@ public class BrightnessMappingStrategyTest {
DISPLAY_LEVELS_RANGE_BACKLIGHT_FLOAT, GAMMA_CORRECTION_LUX,
GAMMA_CORRECTION_NITS);
BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(resources, ddc,
- mMockDwbc);
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc);
// Let's start with a validity check:
assertEquals(y1, strategy.getBrightness(x1), 0.0001f /* tolerance */);
assertEquals(y2, strategy.getBrightness(x2), 0.0001f /* tolerance */);
@@ -683,7 +713,7 @@ public class BrightnessMappingStrategyTest {
DISPLAY_LEVELS_RANGE_BACKLIGHT_FLOAT, GAMMA_CORRECTION_LUX,
GAMMA_CORRECTION_NITS);
BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(resources, ddc,
- mMockDwbc);
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc);
// Validity check:
assertEquals(y1, strategy.getBrightness(x1), 0.0001f /* tolerance */);
assertEquals(y2, strategy.getBrightness(x2), 0.0001f /* tolerance */);
@@ -711,7 +741,7 @@ public class BrightnessMappingStrategyTest {
DISPLAY_LEVELS_RANGE_BACKLIGHT_FLOAT, GAMMA_CORRECTION_LUX,
GAMMA_CORRECTION_NITS);
BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(resources, ddc,
- mMockDwbc);
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc);
assertEquals(0.0f, strategy.getAutoBrightnessAdjustment(), /* delta= */ 0.0001f);
strategy.addUserDataPoint(/* lux= */ 2500, /* brightness= */ 1.0f);
assertEquals(+1.0f, strategy.getAutoBrightnessAdjustment(), /* delta= */ 0.0001f);
@@ -735,7 +765,7 @@ public class BrightnessMappingStrategyTest {
DISPLAY_LEVELS_RANGE_BACKLIGHT_FLOAT, GAMMA_CORRECTION_LUX,
GAMMA_CORRECTION_NITS);
BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(resources, ddc,
- mMockDwbc);
+ AUTO_BRIGHTNESS_MODE_DEFAULT, mMockDwbc);
// Validity, as per tradition:
assertEquals(y0, strategy.getBrightness(x0), 0.0001f /* tolerance */);
assertEquals(y2, strategy.getBrightness(x2), 0.0001f /* tolerance */);
@@ -757,4 +787,14 @@ public class BrightnessMappingStrategyTest {
assertEquals(1.0f, strategy.getBrightness(x4), 0.0001f /* tolerance */);
assertEquals(adjustment, strategy.getAutoBrightnessAdjustment(), 0.0001f /* tolerance */);
}
+
+ @Test
+ public void testGetMode() {
+ Resources res = createResourcesIdle(LUX_LEVELS_IDLE, DISPLAY_LEVELS_NITS_IDLE);
+ DisplayDeviceConfig ddc = createDdc(DISPLAY_RANGE_NITS, BACKLIGHT_RANGE_ZERO_TO_ONE);
+ BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res, ddc,
+ AUTO_BRIGHTNESS_MODE_IDLE,
+ mMockDwbc);
+ assertEquals(AUTO_BRIGHTNESS_MODE_IDLE, strategy.getMode());
+ }
}
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 693cafefa2c0..821507c50258 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,7 @@ 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_IDLE;
import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
@@ -28,7 +29,6 @@ import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isA;
-import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
@@ -62,6 +62,7 @@ import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.provider.Settings;
import android.testing.TestableContext;
import android.util.FloatProperty;
+import android.util.SparseArray;
import android.view.Display;
import android.view.DisplayInfo;
@@ -357,7 +358,7 @@ public final class DisplayPowerController2Test {
float followerBrightness = 0.4f;
float nits = 300;
when(mHolder.automaticBrightnessController.convertToNits(leadBrightness)).thenReturn(nits);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(followerBrightness);
when(mHolder.brightnessSetting.getBrightness()).thenReturn(leadBrightness);
listener.onBrightnessChanged(leadBrightness);
@@ -372,7 +373,7 @@ public final class DisplayPowerController2Test {
float brightness = 0.6f;
nits = 600;
when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(brightness);
when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
listener.onBrightnessChanged(brightness);
@@ -404,7 +405,7 @@ public final class DisplayPowerController2Test {
float brightness = 0.3f;
when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(300f);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(anyFloat()))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(anyFloat()))
.thenReturn(PowerManager.BRIGHTNESS_INVALID_FLOAT);
when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
listener.onBrightnessChanged(brightness);
@@ -466,7 +467,7 @@ public final class DisplayPowerController2Test {
float brightness = 0.3f;
when(mHolder.automaticBrightnessController.convertToNits(anyFloat())).thenReturn(-1f);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(anyFloat()))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(anyFloat()))
.thenReturn(PowerManager.BRIGHTNESS_INVALID_FLOAT);
when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
listener.onBrightnessChanged(brightness);
@@ -500,7 +501,7 @@ public final class DisplayPowerController2Test {
when(mHolder.automaticBrightnessController.convertToNits(rawLeadBrightness))
.thenReturn(nits);
when(mHolder.automaticBrightnessController.getAmbientLux()).thenReturn(ambientLux);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(followerBrightness);
mHolder.dpc.addDisplayBrightnessFollower(followerDpc.dpc);
@@ -534,7 +535,7 @@ public final class DisplayPowerController2Test {
when(mHolder.automaticBrightnessController.convertToNits(rawLeadBrightness))
.thenReturn(nits);
when(mHolder.automaticBrightnessController.getAmbientLux()).thenReturn(ambientLux);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(followerBrightness);
mHolder.dpc.updateBrightness();
@@ -592,9 +593,9 @@ public final class DisplayPowerController2Test {
float brightness = 0.6f;
float nits = 600;
when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(brightness);
- when(secondFollowerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(secondFollowerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(brightness);
when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
listener.onBrightnessChanged(brightness);
@@ -625,9 +626,9 @@ public final class DisplayPowerController2Test {
brightness = 0.7f;
nits = 700;
when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(brightness);
- when(secondFollowerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(secondFollowerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(brightness);
when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
listener.onBrightnessChanged(brightness);
@@ -697,9 +698,9 @@ public final class DisplayPowerController2Test {
float brightness = 0.6f;
float nits = 600;
when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
- when(followerHolder.automaticBrightnessController.convertToFloatScale(nits))
+ when(followerHolder.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(brightness);
- when(secondFollowerHolder.automaticBrightnessController.convertToFloatScale(nits))
+ when(secondFollowerHolder.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(brightness);
when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
listener.onBrightnessChanged(brightness);
@@ -1122,7 +1123,7 @@ public final class DisplayPowerController2Test {
float newBrightness = 0.4f;
when(mHolder.brightnessSetting.getBrightnessNitsForDefaultDisplay()).thenReturn(nits);
- when(mHolder.automaticBrightnessController.convertToFloatScale(nits))
+ when(mHolder.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(newBrightness);
// New display device
setUpDisplay(DISPLAY_ID, "new_unique_id", mHolder.display, mock(DisplayDevice.class),
@@ -1139,12 +1140,9 @@ public final class DisplayPowerController2Test {
@Test
public void testShortTermModelPersistsWhenDisplayDeviceChanges() {
float lux = 2000;
- float brightness = 0.4f;
float nits = 500;
- when(mHolder.brightnessMappingStrategy.getUserLux()).thenReturn(lux);
- when(mHolder.brightnessMappingStrategy.getUserBrightness()).thenReturn(brightness);
- when(mHolder.brightnessMappingStrategy.convertToNits(brightness)).thenReturn(nits);
- when(mHolder.brightnessMappingStrategy.convertToFloatScale(nits)).thenReturn(brightness);
+ when(mHolder.automaticBrightnessController.getUserLux()).thenReturn(lux);
+ when(mHolder.automaticBrightnessController.getUserNits()).thenReturn(nits);
DisplayPowerRequest dpr = new DisplayPowerRequest();
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
advanceTime(1);
@@ -1161,7 +1159,7 @@ public final class DisplayPowerController2Test {
any(Looper.class),
eq(mSensorManagerMock),
/* lightSensor= */ any(),
- eq(mHolder.brightnessMappingStrategy),
+ /* brightnessMappingStrategyMap= */ any(SparseArray.class),
/* lightSensorWarmUpTime= */ anyInt(),
/* brightnessMin= */ anyFloat(),
/* brightnessMax= */ anyFloat(),
@@ -1180,11 +1178,10 @@ public final class DisplayPowerController2Test {
eq(mContext),
any(BrightnessRangeController.class),
any(BrightnessThrottler.class),
- /* idleModeBrightnessMapper= */ isNull(),
/* ambientLightHorizonShort= */ anyInt(),
/* ambientLightHorizonLong= */ anyInt(),
eq(lux),
- eq(brightness)
+ eq(nits)
);
}
@@ -1217,7 +1214,7 @@ public final class DisplayPowerController2Test {
public void testDwbcCallsHappenOnHandler() {
mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
- mHolder.dpc.setAutomaticScreenBrightnessMode(true);
+ mHolder.dpc.setAutomaticScreenBrightnessMode(AUTO_BRIGHTNESS_MODE_IDLE);
verify(mDisplayWhiteBalanceControllerMock, never()).setStrongModeEnabled(true);
// dispatch handler looper
@@ -1380,7 +1377,7 @@ public final class DisplayPowerController2Test {
BRIGHTNESS_RAMP_DECREASE_MAX);
// switch to idle mode
- mHolder.dpc.setAutomaticScreenBrightnessMode(/* idle= */ true);
+ mHolder.dpc.setAutomaticScreenBrightnessMode(AUTO_BRIGHTNESS_MODE_IDLE);
advanceTime(1);
// A second time, when switching to idle mode.
@@ -1409,7 +1406,7 @@ public final class DisplayPowerController2Test {
BRIGHTNESS_RAMP_DECREASE_MAX);
// switch to idle mode
- mHolder.dpc.setAutomaticScreenBrightnessMode(/* idle= */ true);
+ mHolder.dpc.setAutomaticScreenBrightnessMode(AUTO_BRIGHTNESS_MODE_IDLE);
advanceTime(1);
// A second time, when switching to idle mode.
@@ -1435,7 +1432,7 @@ public final class DisplayPowerController2Test {
mHolder.config, /* isEnabled= */ true);
// switch to idle mode
- mHolder.dpc.setAutomaticScreenBrightnessMode(true);
+ mHolder.dpc.setAutomaticScreenBrightnessMode(AUTO_BRIGHTNESS_MODE_IDLE);
// A second time when switching to idle mode.
verify(mHolder.animator, times(2)).setAnimationTimeLimits(BRIGHTNESS_RAMP_INCREASE_MAX,
@@ -1461,7 +1458,7 @@ public final class DisplayPowerController2Test {
mHolder.config, /* isEnabled= */ true);
// switch to idle mode
- mHolder.dpc.setAutomaticScreenBrightnessMode(true);
+ mHolder.dpc.setAutomaticScreenBrightnessMode(AUTO_BRIGHTNESS_MODE_IDLE);
verify(mHolder.animator).setAnimationTimeLimits(BRIGHTNESS_RAMP_INCREASE_MAX_IDLE,
BRIGHTNESS_RAMP_DECREASE_MAX_IDLE);
@@ -1837,7 +1834,7 @@ public final class DisplayPowerController2Test {
AutomaticBrightnessController getAutomaticBrightnessController(
AutomaticBrightnessController.Callbacks callbacks, Looper looper,
SensorManager sensorManager, Sensor lightSensor,
- BrightnessMappingStrategy interactiveModeBrightnessMapper,
+ SparseArray<BrightnessMappingStrategy> brightnessMappingStrategyMap,
int lightSensorWarmUpTime, float brightnessMin, float brightnessMax,
float dozeScaleFactor, int lightSensorRate, int initialLightSensorRate,
long brighteningLightDebounceConfig, long darkeningLightDebounceConfig,
@@ -1848,15 +1845,13 @@ public final class DisplayPowerController2Test {
HysteresisLevels ambientBrightnessThresholdsIdle,
HysteresisLevels screenBrightnessThresholdsIdle, Context context,
BrightnessRangeController brightnessRangeController,
- BrightnessThrottler brightnessThrottler,
- BrightnessMappingStrategy idleModeBrightnessMapper,
- int ambientLightHorizonShort, int ambientLightHorizonLong, float userLux,
- float userBrightness) {
+ BrightnessThrottler brightnessThrottler, int ambientLightHorizonShort,
+ int ambientLightHorizonLong, float userLux, float userNits) {
return mAutomaticBrightnessController;
}
@Override
- BrightnessMappingStrategy getInteractiveModeBrightnessMapper(Resources resources,
+ BrightnessMappingStrategy getDefaultModeBrightnessMapper(Resources resources,
DisplayDeviceConfig displayDeviceConfig,
DisplayWhiteBalanceController displayWhiteBalanceController) {
return mBrightnessMappingStrategy;
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
index b22799377872..a5ee1cb23a09 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
@@ -18,6 +18,7 @@ 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_IDLE;
import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
@@ -28,7 +29,6 @@ import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isA;
-import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
@@ -62,6 +62,7 @@ import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.provider.Settings;
import android.testing.TestableContext;
import android.util.FloatProperty;
+import android.util.SparseArray;
import android.view.Display;
import android.view.DisplayInfo;
@@ -357,7 +358,7 @@ public final class DisplayPowerControllerTest {
float followerBrightness = 0.4f;
float nits = 300;
when(mHolder.automaticBrightnessController.convertToNits(leadBrightness)).thenReturn(nits);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(followerBrightness);
when(mHolder.brightnessSetting.getBrightness()).thenReturn(leadBrightness);
listener.onBrightnessChanged(leadBrightness);
@@ -375,7 +376,7 @@ public final class DisplayPowerControllerTest {
float brightness = 0.6f;
nits = 600;
when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(brightness);
when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
listener.onBrightnessChanged(brightness);
@@ -408,7 +409,7 @@ public final class DisplayPowerControllerTest {
float brightness = 0.3f;
when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(300f);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(anyFloat()))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(anyFloat()))
.thenReturn(PowerManager.BRIGHTNESS_INVALID_FLOAT);
when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
listener.onBrightnessChanged(brightness);
@@ -472,7 +473,7 @@ public final class DisplayPowerControllerTest {
float brightness = 0.3f;
when(mHolder.automaticBrightnessController.convertToNits(anyFloat())).thenReturn(-1f);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(anyFloat()))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(anyFloat()))
.thenReturn(PowerManager.BRIGHTNESS_INVALID_FLOAT);
when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
listener.onBrightnessChanged(brightness);
@@ -507,7 +508,7 @@ public final class DisplayPowerControllerTest {
when(mHolder.automaticBrightnessController.convertToNits(rawLeadBrightness))
.thenReturn(nits);
when(mHolder.automaticBrightnessController.getAmbientLux()).thenReturn(ambientLux);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(followerBrightness);
mHolder.dpc.addDisplayBrightnessFollower(followerDpc.dpc);
@@ -541,7 +542,7 @@ public final class DisplayPowerControllerTest {
when(mHolder.automaticBrightnessController.convertToNits(rawLeadBrightness))
.thenReturn(nits);
when(mHolder.automaticBrightnessController.getAmbientLux()).thenReturn(ambientLux);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(followerBrightness);
mHolder.dpc.updateBrightness();
@@ -600,9 +601,9 @@ public final class DisplayPowerControllerTest {
float brightness = 0.6f;
float nits = 600;
when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(brightness);
- when(secondFollowerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(secondFollowerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(brightness);
when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
listener.onBrightnessChanged(brightness);
@@ -633,9 +634,9 @@ public final class DisplayPowerControllerTest {
brightness = 0.7f;
nits = 700;
when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
- when(followerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(followerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(brightness);
- when(secondFollowerDpc.automaticBrightnessController.convertToFloatScale(nits))
+ when(secondFollowerDpc.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(brightness);
when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
listener.onBrightnessChanged(brightness);
@@ -706,9 +707,9 @@ public final class DisplayPowerControllerTest {
float brightness = 0.6f;
float nits = 600;
when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
- when(followerHolder.automaticBrightnessController.convertToFloatScale(nits))
+ when(followerHolder.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(brightness);
- when(secondFollowerHolder.automaticBrightnessController.convertToFloatScale(nits))
+ when(secondFollowerHolder.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(brightness);
when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
listener.onBrightnessChanged(brightness);
@@ -1056,7 +1057,7 @@ public final class DisplayPowerControllerTest {
float newBrightness = 0.4f;
when(mHolder.brightnessSetting.getBrightnessNitsForDefaultDisplay()).thenReturn(nits);
- when(mHolder.automaticBrightnessController.convertToFloatScale(nits))
+ when(mHolder.automaticBrightnessController.getBrightnessFromNits(nits))
.thenReturn(newBrightness);
// New display device
setUpDisplay(DISPLAY_ID, "new_unique_id", mHolder.display, mock(DisplayDevice.class),
@@ -1073,12 +1074,9 @@ public final class DisplayPowerControllerTest {
@Test
public void testShortTermModelPersistsWhenDisplayDeviceChanges() {
float lux = 2000;
- float brightness = 0.4f;
float nits = 500;
- when(mHolder.brightnessMappingStrategy.getUserLux()).thenReturn(lux);
- when(mHolder.brightnessMappingStrategy.getUserBrightness()).thenReturn(brightness);
- when(mHolder.brightnessMappingStrategy.convertToNits(brightness)).thenReturn(nits);
- when(mHolder.brightnessMappingStrategy.convertToFloatScale(nits)).thenReturn(brightness);
+ when(mHolder.automaticBrightnessController.getUserLux()).thenReturn(lux);
+ when(mHolder.automaticBrightnessController.getUserNits()).thenReturn(nits);
DisplayPowerRequest dpr = new DisplayPowerRequest();
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
advanceTime(1);
@@ -1095,7 +1093,7 @@ public final class DisplayPowerControllerTest {
any(Looper.class),
eq(mSensorManagerMock),
/* lightSensor= */ any(),
- eq(mHolder.brightnessMappingStrategy),
+ /* brightnessMappingStrategyMap= */ any(SparseArray.class),
/* lightSensorWarmUpTime= */ anyInt(),
/* brightnessMin= */ anyFloat(),
/* brightnessMax= */ anyFloat(),
@@ -1114,11 +1112,10 @@ public final class DisplayPowerControllerTest {
eq(mContext),
any(BrightnessRangeController.class),
any(BrightnessThrottler.class),
- /* idleModeBrightnessMapper= */ isNull(),
/* ambientLightHorizonShort= */ anyInt(),
/* ambientLightHorizonLong= */ anyInt(),
eq(lux),
- eq(brightness)
+ eq(nits)
);
}
@@ -1151,7 +1148,7 @@ public final class DisplayPowerControllerTest {
public void testDwbcCallsHappenOnHandler() {
mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
- mHolder.dpc.setAutomaticScreenBrightnessMode(true);
+ mHolder.dpc.setAutomaticScreenBrightnessMode(AUTO_BRIGHTNESS_MODE_IDLE);
verify(mDisplayWhiteBalanceControllerMock, never()).setStrongModeEnabled(true);
// dispatch handler looper
@@ -1291,7 +1288,7 @@ public final class DisplayPowerControllerTest {
BRIGHTNESS_RAMP_DECREASE_MAX);
// switch to idle
- mHolder.dpc.setAutomaticScreenBrightnessMode(/* idle= */ true);
+ mHolder.dpc.setAutomaticScreenBrightnessMode(AUTO_BRIGHTNESS_MODE_IDLE);
advanceTime(1);
verify(mHolder.animator, times(2)).setAnimationTimeLimits(BRIGHTNESS_RAMP_INCREASE_MAX,
@@ -1318,7 +1315,7 @@ public final class DisplayPowerControllerTest {
BRIGHTNESS_RAMP_DECREASE_MAX);
// switch to idle
- mHolder.dpc.setAutomaticScreenBrightnessMode(/* idle= */ true);
+ mHolder.dpc.setAutomaticScreenBrightnessMode(AUTO_BRIGHTNESS_MODE_IDLE);
advanceTime(1);
verify(mHolder.animator).setAnimationTimeLimits(BRIGHTNESS_RAMP_INCREASE_MAX_IDLE,
@@ -1345,7 +1342,7 @@ public final class DisplayPowerControllerTest {
mHolder.config, /* isEnabled= */ true);
// switch to idle mode
- mHolder.dpc.setAutomaticScreenBrightnessMode(true);
+ mHolder.dpc.setAutomaticScreenBrightnessMode(AUTO_BRIGHTNESS_MODE_IDLE);
// second time when switching to idle screen brightness mode
verify(mHolder.animator, times(2)).setAnimationTimeLimits(BRIGHTNESS_RAMP_INCREASE_MAX,
@@ -1370,7 +1367,7 @@ public final class DisplayPowerControllerTest {
mHolder.config, /* isEnabled= */ true);
// switch to idle mode
- mHolder.dpc.setAutomaticScreenBrightnessMode(true);
+ mHolder.dpc.setAutomaticScreenBrightnessMode(AUTO_BRIGHTNESS_MODE_IDLE);
verify(mHolder.animator).setAnimationTimeLimits(BRIGHTNESS_RAMP_INCREASE_MAX_IDLE,
BRIGHTNESS_RAMP_DECREASE_MAX_IDLE);
@@ -1653,7 +1650,7 @@ public final class DisplayPowerControllerTest {
AutomaticBrightnessController getAutomaticBrightnessController(
AutomaticBrightnessController.Callbacks callbacks, Looper looper,
SensorManager sensorManager, Sensor lightSensor,
- BrightnessMappingStrategy interactiveModeBrightnessMapper,
+ SparseArray<BrightnessMappingStrategy> brightnessMappingStrategyMap,
int lightSensorWarmUpTime, float brightnessMin, float brightnessMax,
float dozeScaleFactor, int lightSensorRate, int initialLightSensorRate,
long brighteningLightDebounceConfig, long darkeningLightDebounceConfig,
@@ -1664,15 +1661,13 @@ public final class DisplayPowerControllerTest {
HysteresisLevels ambientBrightnessThresholdsIdle,
HysteresisLevels screenBrightnessThresholdsIdle, Context context,
BrightnessRangeController brightnessRangeController,
- BrightnessThrottler brightnessThrottler,
- BrightnessMappingStrategy idleModeBrightnessMapper,
- int ambientLightHorizonShort, int ambientLightHorizonLong, float userLux,
- float userBrightness) {
+ BrightnessThrottler brightnessThrottler, int ambientLightHorizonShort,
+ int ambientLightHorizonLong, float userLux, float userNits) {
return mAutomaticBrightnessController;
}
@Override
- BrightnessMappingStrategy getInteractiveModeBrightnessMapper(Resources resources,
+ BrightnessMappingStrategy getDefaultModeBrightnessMapper(Resources resources,
DisplayDeviceConfig displayDeviceConfig,
DisplayWhiteBalanceController displayWhiteBalanceController) {
return mBrightnessMappingStrategy;
diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java
index 52fa91f5fe0e..2d0c3fdb6352 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java
@@ -293,21 +293,21 @@ public final class DisplayBrightnessControllerTest {
}
@Test
- public void testConvertToFloatScale() {
+ public void testGetBrightnessFromNits() {
float brightness = 0.5f;
float nits = 300;
// ABC is null
assertEquals(PowerManager.BRIGHTNESS_INVALID_FLOAT,
- mDisplayBrightnessController.convertToFloatScale(nits), /* delta= */ 0);
+ mDisplayBrightnessController.getBrightnessFromNits(nits), /* delta= */ 0);
AutomaticBrightnessController automaticBrightnessController =
mock(AutomaticBrightnessController.class);
- when(automaticBrightnessController.convertToFloatScale(nits)).thenReturn(brightness);
+ when(automaticBrightnessController.getBrightnessFromNits(nits)).thenReturn(brightness);
mDisplayBrightnessController.setAutomaticBrightnessController(
automaticBrightnessController);
- assertEquals(brightness, mDisplayBrightnessController.convertToFloatScale(nits),
+ assertEquals(brightness, mDisplayBrightnessController.getBrightnessFromNits(nits),
/* delta= */ 0);
}
@@ -329,7 +329,7 @@ public final class DisplayBrightnessControllerTest {
float brightness = 0.3f;
AutomaticBrightnessController automaticBrightnessController =
mock(AutomaticBrightnessController.class);
- when(automaticBrightnessController.convertToFloatScale(nits)).thenReturn(brightness);
+ when(automaticBrightnessController.getBrightnessFromNits(nits)).thenReturn(brightness);
when(mBrightnessSetting.getBrightnessNitsForDefaultDisplay()).thenReturn(nits);
mDisplayBrightnessController.setAutomaticBrightnessController(
automaticBrightnessController);
@@ -340,7 +340,7 @@ public final class DisplayBrightnessControllerTest {
// When the nits value is invalid, the brightness is resumed from where it was last set
nits = -1;
brightness = 0.4f;
- when(automaticBrightnessController.convertToFloatScale(nits)).thenReturn(brightness);
+ when(automaticBrightnessController.getBrightnessFromNits(nits)).thenReturn(brightness);
when(mBrightnessSetting.getBrightnessNitsForDefaultDisplay()).thenReturn(nits);
when(mBrightnessSetting.getBrightness()).thenReturn(brightness);
mDisplayBrightnessController.setAutomaticBrightnessController(