summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Piotr WilczyƄski <wilczynskip@google.com> 2023-01-24 18:00:09 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-01-24 18:00:09 +0000
commit706fdd85ef7058030cd5d60fcd4d08ebcbfac3d4 (patch)
treefaaba5a830811f961e5c8c61bf8fc1f0e644b888
parentd0beaad303ba75331eac51f284ce20508d1c6fbe (diff)
parent9a90d78c5ae19307304a428748993372dfa86145 (diff)
Merge "Add follower strategy"
-rw-r--r--services/core/java/com/android/server/display/AutomaticBrightnessController.java8
-rw-r--r--services/core/java/com/android/server/display/BrightnessMappingStrategy.java17
-rw-r--r--services/core/java/com/android/server/display/DisplayManagerService.java3
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java68
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController2.java58
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerControllerInterface.java27
-rw-r--r--services/core/java/com/android/server/display/brightness/BrightnessReason.java5
-rw-r--r--services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java10
-rw-r--r--services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java19
-rw-r--r--services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java3
-rw-r--r--services/core/java/com/android/server/display/brightness/strategy/DozeBrightnessStrategy.java3
-rw-r--r--services/core/java/com/android/server/display/brightness/strategy/FollowerBrightnessStrategy.java75
-rw-r--r--services/core/java/com/android/server/display/brightness/strategy/OverrideBrightnessStrategy.java3
-rw-r--r--services/core/java/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategy.java3
-rw-r--r--services/core/java/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategy.java3
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java33
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java33
-rw-r--r--services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/display/brightness/BrightnessReasonTest.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java21
-rw-r--r--services/tests/servicestests/src/com/android/server/display/brightness/strategy/BoostBrightnessStrategyTest.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/display/brightness/strategy/DozeBrightnessStrategyTest.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/display/brightness/strategy/FollowerBrightnessStrategyTest.java63
-rw-r--r--services/tests/servicestests/src/com/android/server/display/brightness/strategy/OverrideBrightnessStrategyTest.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategyTest.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategyTest.java2
27 files changed, 456 insertions, 17 deletions
diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
index 4f008357d151..10abfdd9f4ba 100644
--- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java
+++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
@@ -1127,6 +1127,14 @@ class AutomaticBrightnessController {
}
}
+ public float convertToFloatScale(float nits) {
+ if (mCurrentBrightnessMapper != null) {
+ return mCurrentBrightnessMapper.convertToFloatScale(nits);
+ } else {
+ return -1.0f;
+ }
+ }
+
public void recalculateSplines(boolean applyAdjustment, float[] adjustment) {
mCurrentBrightnessMapper.recalculateSplines(applyAdjustment, adjustment);
diff --git a/services/core/java/com/android/server/display/BrightnessMappingStrategy.java b/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
index 3fc50c4edf6d..d7c1529aedc4 100644
--- a/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
+++ b/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
@@ -322,6 +322,13 @@ public abstract class BrightnessMappingStrategy {
public abstract float convertToNits(float brightness);
/**
+ * Converts the provided nits value to a float value if possible.
+ *
+ * Returns -1.0f if there's no available mapping for the nits to float.
+ */
+ public abstract float convertToFloatScale(float nits);
+
+ /**
* Adds a user interaction data point to the brightness mapping.
*
* This data point <b>must</b> exist on the brightness curve as a result of this call. This is
@@ -671,6 +678,11 @@ public abstract class BrightnessMappingStrategy {
}
@Override
+ public float convertToFloatScale(float nits) {
+ return -1.0f;
+ }
+
+ @Override
public void addUserDataPoint(float lux, float brightness) {
float unadjustedBrightness = getUnadjustedBrightness(lux);
if (mLoggingEnabled) {
@@ -913,6 +925,11 @@ public abstract class BrightnessMappingStrategy {
}
@Override
+ public float convertToFloatScale(float nits) {
+ return mNitsToBrightnessSpline.interpolate(nits);
+ }
+
+ @Override
public void addUserDataPoint(float lux, float brightness) {
float unadjustedBrightness = getUnadjustedBrightness(lux);
if (mLoggingEnabled) {
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 466070fe14b2..c1d8cf488c2c 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -1655,6 +1655,9 @@ public final class DisplayManagerService extends SystemService {
return;
}
+ // TODO (b/265793751): Set this DPC as a follower of the default DPC if needed,
+ // clear this DPC's followers if it's not a lead display
+
final String uniqueId = device.getUniqueId();
HighBrightnessModeMetadata hbmMetadata = mHighBrightnessModeMetadataMap.get(uniqueId);
dpc.onDisplayChanged(hbmMetadata);
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 142ec68582f9..263c4d7ea683 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -54,6 +54,7 @@ import android.util.MathUtils;
import android.util.MutableFloat;
import android.util.MutableInt;
import android.util.Slog;
+import android.util.SparseArray;
import android.util.TimeUtils;
import android.view.Display;
@@ -450,6 +451,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// PowerManager.BRIGHTNESS_INVALID_FLOAT when there's no temporary brightness set.
private float mTemporaryScreenBrightness;
+ // This brightness value is set in concurrent displays mode. It is the brightness value
+ // of the lead display that this DPC should follow.
+ private float mBrightnessToFollow;
+
// The last auto brightness adjustment that was set by the user and not temporary. Set to
// Float.NaN when an auto-brightness adjustment hasn't been recorded yet.
private float mAutoBrightnessAdjustment;
@@ -499,6 +504,12 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
private boolean mIsEnabled;
private boolean mIsInTransition;
+ // DPCs following the brightness of this DPC. This is used in concurrent displays mode - there
+ // is one lead display, the additional displays follow the brightness value of the lead display.
+ @GuardedBy("mLock")
+ private SparseArray<DisplayPowerControllerInterface> mDisplayBrightnessFollowers =
+ new SparseArray();
+
/**
* Creates the display power controller.
*/
@@ -635,6 +646,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
loadProximitySensor();
mCurrentScreenBrightnessSetting = getScreenBrightnessSetting();
+ mBrightnessToFollow = PowerManager.BRIGHTNESS_INVALID_FLOAT;
mAutoBrightnessAdjustment = getAutoBrightnessAdjustmentSetting();
mTemporaryScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
mPendingScreenBrightnessSetting = PowerManager.BRIGHTNESS_INVALID_FLOAT;
@@ -701,6 +713,48 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
}
}
+ @Override
+ public int getDisplayId() {
+ return mDisplayId;
+ }
+
+ @Override
+ public void setBrightnessToFollow(float leadDisplayBrightness, float nits) {
+ if (mAutomaticBrightnessController == null || nits < 0) {
+ mBrightnessToFollow = leadDisplayBrightness;
+ } else {
+ float brightness = mAutomaticBrightnessController.convertToFloatScale(nits);
+ if (isValidBrightnessValue(brightness)) {
+ mBrightnessToFollow = brightness;
+ } else {
+ // The device does not support nits
+ mBrightnessToFollow = leadDisplayBrightness;
+ }
+ }
+ sendUpdatePowerState();
+ }
+
+ @Override
+ public void addDisplayBrightnessFollower(DisplayPowerControllerInterface follower) {
+ synchronized (mLock) {
+ mDisplayBrightnessFollowers.append(follower.getDisplayId(), follower);
+ }
+ sendUpdatePowerState();
+ }
+
+ @Override
+ public void clearDisplayBrightnessFollowers() {
+ SparseArray<DisplayPowerControllerInterface> followers;
+ synchronized (mLock) {
+ followers = mDisplayBrightnessFollowers.clone();
+ mDisplayBrightnessFollowers.clear();
+ }
+ for (int i = 0; i < followers.size(); i++) {
+ DisplayPowerControllerInterface follower = followers.valueAt(i);
+ follower.setBrightnessToFollow(PowerManager.BRIGHTNESS_INVALID_FLOAT, /* nits= */ -1);
+ }
+ }
+
@Nullable
@Override
public ParceledListSlice<AmbientBrightnessDayStats> getAmbientBrightnessStats(
@@ -1241,6 +1295,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
int brightnessAdjustmentFlags = 0;
mBrightnessReasonTemp.set(null);
mTempBrightnessEvent.reset();
+ SparseArray<DisplayPowerControllerInterface> displayBrightnessFollowers;
synchronized (mLock) {
if (mStopped) {
return;
@@ -1269,6 +1324,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
}
mustNotify = !mDisplayReadyLocked;
+
+ displayBrightnessFollowers = mDisplayBrightnessFollowers.clone();
}
// Compute the basic display state using the policy.
@@ -1376,6 +1433,11 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mBrightnessReasonTemp.setReason(BrightnessReason.REASON_SCREEN_OFF);
}
+ if (Float.isNaN(brightnessState) && isValidBrightnessValue(mBrightnessToFollow)) {
+ brightnessState = mBrightnessToFollow;
+ mBrightnessReasonTemp.setReason(BrightnessReason.REASON_FOLLOWER);
+ }
+
if ((Float.isNaN(brightnessState))
&& isValidBrightnessValue(mPowerRequest.screenBrightnessOverride)) {
brightnessState = mPowerRequest.screenBrightnessOverride;
@@ -1557,6 +1619,11 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mAppliedThrottling = false;
}
+ for (int i = 0; i < displayBrightnessFollowers.size(); i++) {
+ DisplayPowerControllerInterface follower = displayBrightnessFollowers.valueAt(i);
+ follower.setBrightnessToFollow(brightnessState, convertToNits(brightnessState));
+ }
+
if (updateScreenBrightnessSetting) {
// Tell the rest of the system about the new brightness in case we had to change it
// for things like auto-brightness or high-brightness-mode. Note that we do this
@@ -2668,6 +2735,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
pw.println(" mPendingScreenBrightnessSetting="
+ mPendingScreenBrightnessSetting);
pw.println(" mTemporaryScreenBrightness=" + mTemporaryScreenBrightness);
+ pw.println(" mBrightnessToFollow=" + mBrightnessToFollow);
pw.println(" mAutoBrightnessAdjustment=" + mAutoBrightnessAdjustment);
pw.println(" mBrightnessReason=" + mBrightnessReason);
pw.println(" mTemporaryAutoBrightnessAdjustment=" + mTemporaryAutoBrightnessAdjustment);
diff --git a/services/core/java/com/android/server/display/DisplayPowerController2.java b/services/core/java/com/android/server/display/DisplayPowerController2.java
index ba9fe38c7cb4..0cc4e9386c92 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController2.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController2.java
@@ -52,6 +52,7 @@ import android.util.MathUtils;
import android.util.MutableFloat;
import android.util.MutableInt;
import android.util.Slog;
+import android.util.SparseArray;
import android.view.Display;
import com.android.internal.R;
@@ -409,6 +410,13 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
private boolean mIsEnabled;
private boolean mIsInTransition;
+
+ // DPCs following the brightness of this DPC. This is used in concurrent displays mode - there
+ // is one lead display, the additional displays follow the brightness value of the lead display.
+ @GuardedBy("mLock")
+ private SparseArray<DisplayPowerControllerInterface> mDisplayBrightnessFollowers =
+ new SparseArray();
+
/**
* Creates the display power controller.
*/
@@ -1110,6 +1118,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
boolean mustInitialize = false;
int brightnessAdjustmentFlags = 0;
mTempBrightnessEvent.reset();
+ SparseArray<DisplayPowerControllerInterface> displayBrightnessFollowers;
synchronized (mLock) {
if (mStopped) {
return;
@@ -1138,6 +1147,8 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
}
mustNotify = !mDisplayReadyLocked;
+
+ displayBrightnessFollowers = mDisplayBrightnessFollowers.clone();
}
int state = mDisplayStateController
@@ -1321,6 +1332,11 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
mAppliedThrottling = false;
}
+ for (int i = 0; i < displayBrightnessFollowers.size(); i++) {
+ DisplayPowerControllerInterface follower = displayBrightnessFollowers.valueAt(i);
+ follower.setBrightnessToFollow(brightnessState, convertToNits(brightnessState));
+ }
+
if (updateScreenBrightnessSetting) {
// Tell the rest of the system about the new brightness in case we had to change it
// for things like auto-brightness or high-brightness-mode. Note that we do this
@@ -2097,6 +2113,27 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
mDisplayBrightnessController.setBrightness(brightnessValue);
}
+ @Override
+ public int getDisplayId() {
+ return mDisplayId;
+ }
+
+ @Override
+ public void setBrightnessToFollow(float leadDisplayBrightness, float nits) {
+ if (mAutomaticBrightnessController == null || nits < 0) {
+ mDisplayBrightnessController.setBrightnessToFollow(leadDisplayBrightness);
+ } else {
+ float brightness = mAutomaticBrightnessController.convertToFloatScale(nits);
+ if (BrightnessUtils.isValidBrightnessValue(brightness)) {
+ mDisplayBrightnessController.setBrightnessToFollow(brightness);
+ } else {
+ // The device does not support nits
+ mDisplayBrightnessController.setBrightnessToFollow(leadDisplayBrightness);
+ }
+ }
+ sendUpdatePowerState();
+ }
+
private void putAutoBrightnessAdjustmentSetting(float adjustment) {
if (mDisplayId == Display.DEFAULT_DISPLAY) {
mAutoBrightnessAdjustment = adjustment;
@@ -2147,6 +2184,27 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
}
@Override
+ public void addDisplayBrightnessFollower(DisplayPowerControllerInterface follower) {
+ synchronized (mLock) {
+ mDisplayBrightnessFollowers.append(follower.getDisplayId(), follower);
+ }
+ sendUpdatePowerState();
+ }
+
+ @Override
+ public void clearDisplayBrightnessFollowers() {
+ SparseArray<DisplayPowerControllerInterface> followers;
+ synchronized (mLock) {
+ followers = mDisplayBrightnessFollowers.clone();
+ mDisplayBrightnessFollowers.clear();
+ }
+ for (int i = 0; i < followers.size(); i++) {
+ DisplayPowerControllerInterface follower = followers.valueAt(i);
+ follower.setBrightnessToFollow(PowerManager.BRIGHTNESS_INVALID_FLOAT, /* nits= */ -1);
+ }
+ }
+
+ @Override
public void dump(final PrintWriter pw) {
synchronized (mLock) {
pw.println();
diff --git a/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java b/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java
index 7b0198465e68..a95ac74b27c8 100644
--- a/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java
+++ b/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java
@@ -161,4 +161,31 @@ public interface DisplayPowerControllerInterface {
* @param newUserId The new userId
*/
void onSwitchUser(int newUserId);
+
+ /**
+ * Get the ID of the display associated with this DPC.
+ * @return The display ID
+ */
+ int getDisplayId();
+
+ /**
+ * Set the brightness to follow if this is an additional display in a set of concurrent
+ * displays.
+ * @param leadDisplayBrightness The brightness of the lead display in the set of concurrent
+ * displays
+ * @param nits The brightness value in nits if the device supports nits
+ */
+ void setBrightnessToFollow(float leadDisplayBrightness, float nits);
+
+ /**
+ * Add an additional display that will copy the brightness value from this display. This is used
+ * when the device is in concurrent displays mode.
+ * @param follower The DPC that should copy the brightness value from this DPC
+ */
+ void addDisplayBrightnessFollower(DisplayPowerControllerInterface follower);
+
+ /**
+ * Clear all the additional displays following the brightness value of this display.
+ */
+ void clearDisplayBrightnessFollowers();
}
diff --git a/services/core/java/com/android/server/display/brightness/BrightnessReason.java b/services/core/java/com/android/server/display/brightness/BrightnessReason.java
index a952004e7f9d..d7ae2699ee2d 100644
--- a/services/core/java/com/android/server/display/brightness/BrightnessReason.java
+++ b/services/core/java/com/android/server/display/brightness/BrightnessReason.java
@@ -38,7 +38,8 @@ public final class BrightnessReason {
public static final int REASON_TEMPORARY = 7;
public static final int REASON_BOOST = 8;
public static final int REASON_SCREEN_OFF_BRIGHTNESS_SENSOR = 9;
- public static final int REASON_MAX = REASON_SCREEN_OFF_BRIGHTNESS_SENSOR;
+ public static final int REASON_FOLLOWER = 10;
+ public static final int REASON_MAX = REASON_FOLLOWER;
public static final int MODIFIER_DIMMED = 0x1;
public static final int MODIFIER_LOW_POWER = 0x2;
@@ -193,6 +194,8 @@ public final class BrightnessReason {
return "boost";
case REASON_SCREEN_OFF_BRIGHTNESS_SENSOR:
return "screen_off_brightness_sensor";
+ case REASON_FOLLOWER:
+ return "follower";
default:
return Integer.toString(reason);
}
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 e003ecb5cbad..13fcff3805d3 100644
--- a/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java
+++ b/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java
@@ -129,6 +129,16 @@ public final class DisplayBrightnessController {
}
/**
+ * Sets the brightness to follow
+ */
+ public void setBrightnessToFollow(Float brightnessToFollow) {
+ synchronized (mLock) {
+ mDisplayBrightnessStrategySelector.getFollowerDisplayBrightnessStrategy()
+ .setBrightnessToFollow(brightnessToFollow);
+ }
+ }
+
+ /**
* Returns a boolean flag indicating if the light sensor is to be used to decide the screen
* brightness when dozing
*/
diff --git a/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java b/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java
index 7d05f139c69d..02ca2d33fc99 100644
--- a/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java
+++ b/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java
@@ -28,6 +28,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.server.display.brightness.strategy.BoostBrightnessStrategy;
import com.android.server.display.brightness.strategy.DisplayBrightnessStrategy;
import com.android.server.display.brightness.strategy.DozeBrightnessStrategy;
+import com.android.server.display.brightness.strategy.FollowerBrightnessStrategy;
import com.android.server.display.brightness.strategy.InvalidBrightnessStrategy;
import com.android.server.display.brightness.strategy.OverrideBrightnessStrategy;
import com.android.server.display.brightness.strategy.ScreenOffBrightnessStrategy;
@@ -55,6 +56,8 @@ public class DisplayBrightnessStrategySelector {
private final TemporaryBrightnessStrategy mTemporaryBrightnessStrategy;
// The brightness strategy used to manage the brightness state when boost is requested
private final BoostBrightnessStrategy mBoostBrightnessStrategy;
+ // The brightness strategy used for additional displays
+ private final FollowerBrightnessStrategy mFollowerBrightnessStrategy;
// The brightness strategy used to manage the brightness state when the request is invalid.
private final InvalidBrightnessStrategy mInvalidBrightnessStrategy;
@@ -76,6 +79,7 @@ public class DisplayBrightnessStrategySelector {
mOverrideBrightnessStrategy = injector.getOverrideBrightnessStrategy();
mTemporaryBrightnessStrategy = injector.getTemporaryBrightnessStrategy();
mBoostBrightnessStrategy = injector.getBoostBrightnessStrategy();
+ mFollowerBrightnessStrategy = injector.getFollowerBrightnessStrategy(displayId);
mInvalidBrightnessStrategy = injector.getInvalidBrightnessStrategy();
mAllowAutoBrightnessWhileDozingConfig = context.getResources().getBoolean(
R.bool.config_allowAutoBrightnessWhileDozing);
@@ -93,10 +97,13 @@ public class DisplayBrightnessStrategySelector {
DisplayBrightnessStrategy displayBrightnessStrategy = mInvalidBrightnessStrategy;
if (targetDisplayState == Display.STATE_OFF) {
displayBrightnessStrategy = mScreenOffBrightnessStrategy;
- } else if (displayPowerRequest.boostScreenBrightness) {
- displayBrightnessStrategy = mBoostBrightnessStrategy;
} else if (shouldUseDozeBrightnessStrategy(displayPowerRequest)) {
displayBrightnessStrategy = mDozeBrightnessStrategy;
+ } else if (BrightnessUtils.isValidBrightnessValue(
+ mFollowerBrightnessStrategy.getBrightnessToFollow())) {
+ displayBrightnessStrategy = mFollowerBrightnessStrategy;
+ } else if (displayPowerRequest.boostScreenBrightness) {
+ displayBrightnessStrategy = mBoostBrightnessStrategy;
} else if (BrightnessUtils
.isValidBrightnessValue(displayPowerRequest.screenBrightnessOverride)) {
displayBrightnessStrategy = mOverrideBrightnessStrategy;
@@ -119,6 +126,10 @@ public class DisplayBrightnessStrategySelector {
return mTemporaryBrightnessStrategy;
}
+ public FollowerBrightnessStrategy getFollowerDisplayBrightnessStrategy() {
+ return mFollowerBrightnessStrategy;
+ }
+
/**
* Returns a boolean flag indicating if the light sensor is to be used to decide the screen
* brightness when dozing
@@ -180,6 +191,10 @@ public class DisplayBrightnessStrategySelector {
return new BoostBrightnessStrategy();
}
+ FollowerBrightnessStrategy getFollowerBrightnessStrategy(int displayId) {
+ return new FollowerBrightnessStrategy(displayId);
+ }
+
InvalidBrightnessStrategy getInvalidBrightnessStrategy() {
return new InvalidBrightnessStrategy();
}
diff --git a/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java
index 475ef5012751..0cf234b09830 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java
@@ -35,7 +35,8 @@ public class BoostBrightnessStrategy implements DisplayBrightnessStrategy {
@Override
public DisplayBrightnessState updateBrightness(
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
- // Todo(brup): Introduce a validator class and add validations before setting the brightness
+ // Todo(b/241308599): Introduce a validator class and add validations before setting
+ // the brightness
DisplayBrightnessState displayBrightnessState =
BrightnessUtils.constructDisplayBrightnessState(BrightnessReason.REASON_BOOST,
PowerManager.BRIGHTNESS_MAX,
diff --git a/services/core/java/com/android/server/display/brightness/strategy/DozeBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/DozeBrightnessStrategy.java
index 0bc900b664b1..98075f91c28b 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/DozeBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/DozeBrightnessStrategy.java
@@ -30,7 +30,8 @@ public class DozeBrightnessStrategy implements DisplayBrightnessStrategy {
@Override
public DisplayBrightnessState updateBrightness(
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
- // Todo(brup): Introduce a validator class and add validations before setting the brightness
+ // Todo(b/241308599): Introduce a validator class and add validations before setting
+ // the brightness
return BrightnessUtils.constructDisplayBrightnessState(BrightnessReason.REASON_DOZE,
displayPowerRequest.dozeScreenBrightness, displayPowerRequest.dozeScreenBrightness);
}
diff --git a/services/core/java/com/android/server/display/brightness/strategy/FollowerBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/FollowerBrightnessStrategy.java
new file mode 100644
index 000000000000..fe684a4a0c56
--- /dev/null
+++ b/services/core/java/com/android/server/display/brightness/strategy/FollowerBrightnessStrategy.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.display.brightness.strategy;
+
+import android.hardware.display.DisplayManagerInternal;
+import android.os.PowerManager;
+
+import com.android.server.display.DisplayBrightnessState;
+import com.android.server.display.brightness.BrightnessReason;
+import com.android.server.display.brightness.BrightnessUtils;
+
+import java.io.PrintWriter;
+
+/**
+ * Manages the brightness of an additional display that copies the brightness value from the lead
+ * display when the device is using concurrent displays.
+ */
+public class FollowerBrightnessStrategy implements DisplayBrightnessStrategy {
+
+ // The ID of the LogicalDisplay using this strategy.
+ private final int mDisplayId;
+
+ // Set to PowerManager.BRIGHTNESS_INVALID_FLOAT when there's no brightness to follow set.
+ private float mBrightnessToFollow;
+
+ public FollowerBrightnessStrategy(int displayId) {
+ mDisplayId = displayId;
+ mBrightnessToFollow = PowerManager.BRIGHTNESS_INVALID_FLOAT;
+ }
+
+ @Override
+ public DisplayBrightnessState updateBrightness(
+ DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
+ // Todo(b/241308599): Introduce a validator class and add validations before setting
+ // the brightness
+ return BrightnessUtils.constructDisplayBrightnessState(BrightnessReason.REASON_FOLLOWER,
+ mBrightnessToFollow, mBrightnessToFollow);
+ }
+
+ @Override
+ public String getName() {
+ return "FollowerBrightnessStrategy";
+ }
+
+ public float getBrightnessToFollow() {
+ return mBrightnessToFollow;
+ }
+
+ public void setBrightnessToFollow(float brightnessToFollow) {
+ mBrightnessToFollow = brightnessToFollow;
+ }
+
+ /**
+ * Dumps the state of this class.
+ */
+ public void dump(PrintWriter writer) {
+ writer.println("FollowerBrightnessStrategy:");
+ writer.println(" mDisplayId=" + mDisplayId);
+ writer.println(" mBrightnessToFollow:" + mBrightnessToFollow);
+ }
+}
diff --git a/services/core/java/com/android/server/display/brightness/strategy/OverrideBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/OverrideBrightnessStrategy.java
index f03f03602a51..6d3830abd561 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/OverrideBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/OverrideBrightnessStrategy.java
@@ -29,7 +29,8 @@ public class OverrideBrightnessStrategy implements DisplayBrightnessStrategy {
@Override
public DisplayBrightnessState updateBrightness(
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
- // Todo(brup): Introduce a validator class and add validations before setting the brightness
+ // Todo(b/241308599): Introduce a validator class and add validations before setting
+ // the brightness
return BrightnessUtils.constructDisplayBrightnessState(BrightnessReason.REASON_OVERRIDE,
displayPowerRequest.screenBrightnessOverride,
displayPowerRequest.screenBrightnessOverride);
diff --git a/services/core/java/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategy.java
index 396fa06ffe18..ee5e0664748d 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategy.java
@@ -30,7 +30,8 @@ public class ScreenOffBrightnessStrategy implements DisplayBrightnessStrategy {
@Override
public DisplayBrightnessState updateBrightness(
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
- // Todo(brup): Introduce a validator class and add validations before setting the brightness
+ // Todo(b/241308599): Introduce a validator class and add validations before setting
+ // the brightness
return BrightnessUtils.constructDisplayBrightnessState(BrightnessReason.REASON_SCREEN_OFF,
PowerManager.BRIGHTNESS_OFF_FLOAT,
PowerManager.BRIGHTNESS_OFF_FLOAT);
diff --git a/services/core/java/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategy.java
index 7d759ca84f67..d97415d67616 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategy.java
@@ -43,7 +43,8 @@ public class TemporaryBrightnessStrategy implements DisplayBrightnessStrategy {
@Override
public DisplayBrightnessState updateBrightness(
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
- // Todo(brup): Introduce a validator class and add validations before setting the brightness
+ // Todo(b/241308599): Introduce a validator class and add validations before setting
+ // the brightness
DisplayBrightnessState displayBrightnessState =
BrightnessUtils.constructDisplayBrightnessState(BrightnessReason.REASON_TEMPORARY,
mTemporaryScreenBrightness,
diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java
index 2a790a1c8e57..3d36c1c16338 100644
--- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java
+++ b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java
@@ -18,6 +18,8 @@ package com.android.server.display;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isA;
@@ -253,4 +255,35 @@ public final class DisplayPowerController2Test {
});
when(mDisplayDeviceConfigMock.getNits()).thenReturn(new float[]{2, 500});
}
+
+ @Test
+ public void testDisplayBrightnessFollowers() {
+ setUpDisplay(DISPLAY_ID, UNIQUE_DISPLAY_ID);
+
+ DisplayPowerController2 defaultDpc = new DisplayPowerController2(
+ mContextSpy, mInjector, mDisplayPowerCallbacksMock, mHandler,
+ mSensorManagerMock, mDisplayBlankerMock, mLogicalDisplayMock,
+ mBrightnessTrackerMock, mBrightnessSettingMock, () -> {
+ }, mHighBrightnessModeMetadataMock);
+ DisplayPowerController2 followerDpc = new DisplayPowerController2(
+ mContextSpy, mInjector, mDisplayPowerCallbacksMock, mHandler,
+ mSensorManagerMock, mDisplayBlankerMock, mLogicalDisplayMock,
+ mBrightnessTrackerMock, mBrightnessSettingMock, () -> {
+ }, mHighBrightnessModeMetadataMock);
+
+ defaultDpc.addDisplayBrightnessFollower(followerDpc);
+
+ defaultDpc.setBrightness(0.3f);
+ assertEquals(defaultDpc.getBrightnessInfo().brightness,
+ followerDpc.getBrightnessInfo().brightness, 0);
+
+ defaultDpc.setBrightness(0.6f);
+ assertEquals(defaultDpc.getBrightnessInfo().brightness,
+ followerDpc.getBrightnessInfo().brightness, 0);
+
+ float brightness = 0.1f;
+ defaultDpc.clearDisplayBrightnessFollowers();
+ defaultDpc.setBrightness(brightness);
+ assertNotEquals(brightness, followerDpc.getBrightnessInfo().brightness, 0);
+ }
}
diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java
index d99ed7877ca8..b6388ccbc653 100644
--- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java
@@ -19,6 +19,8 @@ package com.android.server.display;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isA;
@@ -235,4 +237,35 @@ public final class DisplayPowerControllerTest {
});
when(mDisplayDeviceConfigMock.getNits()).thenReturn(new float[]{2, 500});
}
+
+ @Test
+ public void testDisplayBrightnessFollowers() {
+ setUpDisplay(DISPLAY_ID, UNIQUE_DISPLAY_ID);
+
+ DisplayPowerController defaultDpc = new DisplayPowerController(
+ mContextSpy, mInjector, mDisplayPowerCallbacksMock, mHandler,
+ mSensorManagerMock, mDisplayBlankerMock, mLogicalDisplayMock,
+ mBrightnessTrackerMock, mBrightnessSettingMock, () -> {
+ }, mHighBrightnessModeMetadataMock);
+ DisplayPowerController followerDpc = new DisplayPowerController(
+ mContextSpy, mInjector, mDisplayPowerCallbacksMock, mHandler,
+ mSensorManagerMock, mDisplayBlankerMock, mLogicalDisplayMock,
+ mBrightnessTrackerMock, mBrightnessSettingMock, () -> {
+ }, mHighBrightnessModeMetadataMock);
+
+ defaultDpc.addDisplayBrightnessFollower(followerDpc);
+
+ defaultDpc.setBrightness(0.3f);
+ assertEquals(defaultDpc.getBrightnessInfo().brightness,
+ followerDpc.getBrightnessInfo().brightness, 0);
+
+ defaultDpc.setBrightness(0.6f);
+ assertEquals(defaultDpc.getBrightnessInfo().brightness,
+ followerDpc.getBrightnessInfo().brightness, 0);
+
+ float brightness = 0.1f;
+ defaultDpc.clearDisplayBrightnessFollowers();
+ defaultDpc.setBrightness(brightness);
+ assertNotEquals(brightness, followerDpc.getBrightnessInfo().brightness, 0);
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java b/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java
index 82b89bbb0464..91fd76ec4b70 100644
--- a/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java
@@ -164,7 +164,7 @@ public final class DisplayDeviceConfigTest {
assertArrayEquals(new int[]{-1, 10, 20, 30, 40},
mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux());
- // Todo(brup): Add asserts for BrightnessThrottlingData, DensityMapping,
+ // Todo: Add asserts for BrightnessThrottlingData, DensityMapping,
// HighBrightnessModeData AmbientLightSensor, RefreshRateLimitations and ProximitySensor.
}
@@ -236,7 +236,7 @@ public final class DisplayDeviceConfigTest {
assertArrayEquals(mDisplayDeviceConfig.getHighAmbientBrightnessThresholds(),
HIGH_AMBIENT_THRESHOLD_OF_PEAK_REFRESH_RATE);
- // Todo(brup): Add asserts for BrightnessThrottlingData, DensityMapping,
+ // Todo: Add asserts for BrightnessThrottlingData, DensityMapping,
// HighBrightnessModeData AmbientLightSensor, RefreshRateLimitations and ProximitySensor.
}
diff --git a/services/tests/servicestests/src/com/android/server/display/brightness/BrightnessReasonTest.java b/services/tests/servicestests/src/com/android/server/display/brightness/BrightnessReasonTest.java
index 57aa61a0ebd2..e58b3e891b70 100644
--- a/services/tests/servicestests/src/com/android/server/display/brightness/BrightnessReasonTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/brightness/BrightnessReasonTest.java
@@ -65,7 +65,7 @@ public final class BrightnessReasonTest {
@Test
public void setReasonDoesntSetIfModifierIsBeyondExtremes() {
- int extremeReason = 10;
+ int extremeReason = BrightnessReason.REASON_MAX + 1;
mBrightnessReason.setReason(extremeReason);
assertEquals(mBrightnessReason.getReason(), BrightnessReason.REASON_DOZE);
diff --git a/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java b/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java
index c24d83f0f878..d4ab794f55dc 100644
--- a/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java
@@ -75,7 +75,7 @@ public final class DisplayBrightnessControllerTest {
}
@Test
- public void updateBrightness() {
+ public void testUpdateBrightness() {
DisplayPowerRequest displayPowerRequest = mock(DisplayPowerRequest.class);
DisplayBrightnessStrategy displayBrightnessStrategy = mock(DisplayBrightnessStrategy.class);
int targetDisplayState = Display.STATE_DOZE;
diff --git a/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java b/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java
index dcf217c35c18..a9e616d766c6 100644
--- a/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java
@@ -31,6 +31,7 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.internal.R;
import com.android.server.display.brightness.strategy.BoostBrightnessStrategy;
import com.android.server.display.brightness.strategy.DozeBrightnessStrategy;
+import com.android.server.display.brightness.strategy.FollowerBrightnessStrategy;
import com.android.server.display.brightness.strategy.InvalidBrightnessStrategy;
import com.android.server.display.brightness.strategy.OverrideBrightnessStrategy;
import com.android.server.display.brightness.strategy.ScreenOffBrightnessStrategy;
@@ -61,6 +62,8 @@ public final class DisplayBrightnessStrategySelectorTest {
@Mock
private InvalidBrightnessStrategy mInvalidBrightnessStrategy;
@Mock
+ private FollowerBrightnessStrategy mFollowerBrightnessStrategy;
+ @Mock
private Context mContext;
@Mock
private Resources mResources;
@@ -100,6 +103,11 @@ public final class DisplayBrightnessStrategySelectorTest {
}
@Override
+ FollowerBrightnessStrategy getFollowerBrightnessStrategy(int displayId) {
+ return mFollowerBrightnessStrategy;
+ }
+
+ @Override
InvalidBrightnessStrategy getInvalidBrightnessStrategy() {
return mInvalidBrightnessStrategy;
}
@@ -133,6 +141,7 @@ public final class DisplayBrightnessStrategySelectorTest {
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest = mock(
DisplayManagerInternal.DisplayPowerRequest.class);
displayPowerRequest.screenBrightnessOverride = 0.4f;
+ when(mFollowerBrightnessStrategy.getBrightnessToFollow()).thenReturn(Float.NaN);
assertEquals(mDisplayBrightnessStrategySelector.selectStrategy(displayPowerRequest,
Display.STATE_ON), mOverrideBrightnessStrategy);
}
@@ -142,6 +151,7 @@ public final class DisplayBrightnessStrategySelectorTest {
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest = mock(
DisplayManagerInternal.DisplayPowerRequest.class);
displayPowerRequest.screenBrightnessOverride = Float.NaN;
+ when(mFollowerBrightnessStrategy.getBrightnessToFollow()).thenReturn(Float.NaN);
when(mTemporaryBrightnessStrategy.getTemporaryScreenBrightness()).thenReturn(0.3f);
assertEquals(mDisplayBrightnessStrategySelector.selectStrategy(displayPowerRequest,
Display.STATE_ON), mTemporaryBrightnessStrategy);
@@ -152,6 +162,7 @@ public final class DisplayBrightnessStrategySelectorTest {
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest = mock(
DisplayManagerInternal.DisplayPowerRequest.class);
displayPowerRequest.boostScreenBrightness = true;
+ when(mFollowerBrightnessStrategy.getBrightnessToFollow()).thenReturn(Float.NaN);
displayPowerRequest.screenBrightnessOverride = Float.NaN;
when(mTemporaryBrightnessStrategy.getTemporaryScreenBrightness()).thenReturn(Float.NaN);
assertEquals(mDisplayBrightnessStrategySelector.selectStrategy(displayPowerRequest,
@@ -163,8 +174,18 @@ public final class DisplayBrightnessStrategySelectorTest {
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest = mock(
DisplayManagerInternal.DisplayPowerRequest.class);
displayPowerRequest.screenBrightnessOverride = Float.NaN;
+ when(mFollowerBrightnessStrategy.getBrightnessToFollow()).thenReturn(Float.NaN);
when(mTemporaryBrightnessStrategy.getTemporaryScreenBrightness()).thenReturn(Float.NaN);
assertEquals(mDisplayBrightnessStrategySelector.selectStrategy(displayPowerRequest,
Display.STATE_ON), mInvalidBrightnessStrategy);
}
+
+ @Test
+ public void selectStrategySelectsFollowerStrategyWhenValid() {
+ DisplayManagerInternal.DisplayPowerRequest displayPowerRequest = mock(
+ DisplayManagerInternal.DisplayPowerRequest.class);
+ when(mFollowerBrightnessStrategy.getBrightnessToFollow()).thenReturn(0.3f);
+ assertEquals(mDisplayBrightnessStrategySelector.selectStrategy(displayPowerRequest,
+ Display.STATE_ON), mFollowerBrightnessStrategy);
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/display/brightness/strategy/BoostBrightnessStrategyTest.java b/services/tests/servicestests/src/com/android/server/display/brightness/strategy/BoostBrightnessStrategyTest.java
index 431a239ab4fd..c1de8943b73a 100644
--- a/services/tests/servicestests/src/com/android/server/display/brightness/strategy/BoostBrightnessStrategyTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/brightness/strategy/BoostBrightnessStrategyTest.java
@@ -44,7 +44,7 @@ public class BoostBrightnessStrategyTest {
}
@Test
- public void updateBrightnessWorksAsExpectedWhenBoostBrightnessIsRequested() {
+ public void testUpdateBrightnessWhenBoostBrightnessIsRequested() {
DisplayManagerInternal.DisplayPowerRequest
displayPowerRequest = new DisplayManagerInternal.DisplayPowerRequest();
displayPowerRequest.boostScreenBrightness = true;
diff --git a/services/tests/servicestests/src/com/android/server/display/brightness/strategy/DozeBrightnessStrategyTest.java b/services/tests/servicestests/src/com/android/server/display/brightness/strategy/DozeBrightnessStrategyTest.java
index 29652ff0396b..76fa17287726 100644
--- a/services/tests/servicestests/src/com/android/server/display/brightness/strategy/DozeBrightnessStrategyTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/brightness/strategy/DozeBrightnessStrategyTest.java
@@ -41,7 +41,7 @@ public class DozeBrightnessStrategyTest {
}
@Test
- public void updateBrightnessWorksAsExpectedWhenScreenDozeStateIsRequested() {
+ public void testUpdateBrightnessWhenScreenDozeStateIsRequested() {
DisplayPowerRequest displayPowerRequest = new DisplayPowerRequest();
float dozeScreenBrightness = 0.2f;
displayPowerRequest.dozeScreenBrightness = dozeScreenBrightness;
diff --git a/services/tests/servicestests/src/com/android/server/display/brightness/strategy/FollowerBrightnessStrategyTest.java b/services/tests/servicestests/src/com/android/server/display/brightness/strategy/FollowerBrightnessStrategyTest.java
new file mode 100644
index 000000000000..f20404e25afc
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/display/brightness/strategy/FollowerBrightnessStrategyTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.display.brightness.strategy;
+
+import static org.junit.Assert.assertEquals;
+
+import android.hardware.display.DisplayManagerInternal;
+import android.view.Display;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.server.display.DisplayBrightnessState;
+import com.android.server.display.brightness.BrightnessReason;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class FollowerBrightnessStrategyTest {
+ private FollowerBrightnessStrategy mFollowerBrightnessStrategy;
+
+ @Before
+ public void before() {
+ mFollowerBrightnessStrategy = new FollowerBrightnessStrategy(Display.DEFAULT_DISPLAY);
+ }
+
+ @Test
+ public void testUpdateBrightness() {
+ DisplayManagerInternal.DisplayPowerRequest
+ displayPowerRequest = new DisplayManagerInternal.DisplayPowerRequest();
+ float brightnessToFollow = 0.2f;
+ mFollowerBrightnessStrategy.setBrightnessToFollow(brightnessToFollow);
+ BrightnessReason brightnessReason = new BrightnessReason();
+ brightnessReason.setReason(BrightnessReason.REASON_FOLLOWER);
+ DisplayBrightnessState expectedDisplayBrightnessState =
+ new DisplayBrightnessState.Builder()
+ .setBrightness(brightnessToFollow)
+ .setBrightnessReason(brightnessReason)
+ .setSdrBrightness(brightnessToFollow)
+ .build();
+ DisplayBrightnessState updatedDisplayBrightnessState =
+ mFollowerBrightnessStrategy.updateBrightness(displayPowerRequest);
+ assertEquals(expectedDisplayBrightnessState, updatedDisplayBrightnessState);
+ }
+
+}
diff --git a/services/tests/servicestests/src/com/android/server/display/brightness/strategy/OverrideBrightnessStrategyTest.java b/services/tests/servicestests/src/com/android/server/display/brightness/strategy/OverrideBrightnessStrategyTest.java
index 4d89c28e3cf1..2487b32bbd9d 100644
--- a/services/tests/servicestests/src/com/android/server/display/brightness/strategy/OverrideBrightnessStrategyTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/brightness/strategy/OverrideBrightnessStrategyTest.java
@@ -43,7 +43,7 @@ public class OverrideBrightnessStrategyTest {
}
@Test
- public void updateBrightnessWorksAsExpectedWhenScreenDozeStateIsRequested() {
+ public void testUpdateBrightnessWhenScreenDozeStateIsRequested() {
DisplayManagerInternal.DisplayPowerRequest
displayPowerRequest = new DisplayManagerInternal.DisplayPowerRequest();
float overrideBrightness = 0.2f;
diff --git a/services/tests/servicestests/src/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategyTest.java b/services/tests/servicestests/src/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategyTest.java
index 050547550c95..353e92e234e4 100644
--- a/services/tests/servicestests/src/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategyTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategyTest.java
@@ -43,7 +43,7 @@ public final class ScreenOffBrightnessStrategyTest {
}
@Test
- public void updateBrightnessWorksAsExpectedWhenScreenOffDisplayState() {
+ public void testUpdateBrightnessWhenScreenOffDisplayState() {
DisplayPowerRequest displayPowerRequest = new DisplayPowerRequest();
BrightnessReason brightnessReason = new BrightnessReason();
brightnessReason.setReason(BrightnessReason.REASON_SCREEN_OFF);
diff --git a/services/tests/servicestests/src/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategyTest.java b/services/tests/servicestests/src/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategyTest.java
index b92aa9ce139c..99679a3ce5df 100644
--- a/services/tests/servicestests/src/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategyTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategyTest.java
@@ -43,7 +43,7 @@ public class TemporaryBrightnessStrategyTest {
}
@Test
- public void updateBrightnessWorksAsExpectedWhenTemporaryBrightnessIsSet() {
+ public void testUpdateBrightnessWhenTemporaryBrightnessIsSet() {
DisplayManagerInternal.DisplayPowerRequest
displayPowerRequest = new DisplayManagerInternal.DisplayPowerRequest();
float temporaryBrightness = 0.2f;