Fix auto-brightness state sent to HBMController
This bug was introduced in ag/20980705 which changed the code due to a special case - if auto-brightness is enabled and this is a follower display, the AutomaticBrightnessController should be disabled and the HBMController should be enabled. In this CL, the autoBrightnessEnabled variable will be true for the follower display and will be used to decide on the state value to sent to the HBMController. The autoBrightnessState variable, however, will be set to false if this is a follower display. Moreover, the brightnessState condition is replaced with a simplification - turn auto-brightness off if we're using the override strategy. That's because brightnessState will not be NaN if this is a follower display in DPC2 and so the condition would not allow us to set different values based on whether we're using the follower strategy. Bug: 286818379 Test: atest DisplayPowerControllerTest Test: atest DisplayPowerController2Test Test: AutoBrightnessStrategyTest Change-Id: I7c9b79805f45c655905c8938903c7bc801d2cb02
This commit is contained in:
@@ -1590,12 +1590,12 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
||||
mAllowAutoBrightnessWhileDozingConfig && Display.isDozeState(state);
|
||||
final boolean autoBrightnessEnabled = mUseAutoBrightness
|
||||
&& (state == Display.STATE_ON || autoBrightnessEnabledInDoze)
|
||||
&& Float.isNaN(brightnessState)
|
||||
&& mAutomaticBrightnessController != null
|
||||
&& mBrightnessReasonTemp.getReason() != BrightnessReason.REASON_FOLLOWER;
|
||||
&& mBrightnessReasonTemp.getReason() != BrightnessReason.REASON_OVERRIDE
|
||||
&& mAutomaticBrightnessController != null;
|
||||
final boolean autoBrightnessDisabledDueToDisplayOff = mUseAutoBrightness
|
||||
&& !(state == Display.STATE_ON || autoBrightnessEnabledInDoze);
|
||||
final int autoBrightnessState = autoBrightnessEnabled
|
||||
&& mBrightnessReasonTemp.getReason() != BrightnessReason.REASON_FOLLOWER
|
||||
? AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED
|
||||
: autoBrightnessDisabledDueToDisplayOff
|
||||
? AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE
|
||||
@@ -1655,9 +1655,11 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
||||
mShouldResetShortTermModel);
|
||||
mShouldResetShortTermModel = false;
|
||||
}
|
||||
mBrightnessRangeController.setAutoBrightnessEnabled(mUseAutoBrightness
|
||||
mBrightnessRangeController.setAutoBrightnessEnabled(autoBrightnessEnabled
|
||||
? AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED
|
||||
: AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED);
|
||||
: autoBrightnessDisabledDueToDisplayOff
|
||||
? AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE
|
||||
: AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED);
|
||||
|
||||
if (mBrightnessTracker != null) {
|
||||
mBrightnessTracker.setShouldCollectColorSample(mBrightnessConfiguration != null
|
||||
|
||||
@@ -1296,7 +1296,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
|
||||
mAutomaticBrightnessStrategy.isShortTermModelActive();
|
||||
mAutomaticBrightnessStrategy.setAutoBrightnessState(state,
|
||||
mDisplayBrightnessController.isAllowAutoBrightnessWhileDozingConfig(),
|
||||
brightnessState, mBrightnessReasonTemp.getReason(), mPowerRequest.policy,
|
||||
mBrightnessReasonTemp.getReason(), mPowerRequest.policy,
|
||||
mDisplayBrightnessController.getLastUserSetScreenBrightness(),
|
||||
userSetBrightnessChanged);
|
||||
|
||||
@@ -1306,10 +1306,12 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
|
||||
&& (mAutomaticBrightnessStrategy.getAutoBrightnessAdjustmentChanged()
|
||||
|| userSetBrightnessChanged);
|
||||
|
||||
mBrightnessRangeController.setAutoBrightnessEnabled(mAutomaticBrightnessStrategy
|
||||
.shouldUseAutoBrightness()
|
||||
mBrightnessRangeController.setAutoBrightnessEnabled(
|
||||
mAutomaticBrightnessStrategy.isAutoBrightnessEnabled()
|
||||
? AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED
|
||||
: AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED);
|
||||
: mAutomaticBrightnessStrategy.isAutoBrightnessDisabledDueToDisplayOff()
|
||||
? AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE
|
||||
: AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED);
|
||||
|
||||
boolean updateScreenBrightnessSetting = false;
|
||||
float currentBrightnessSetting = mDisplayBrightnessController.getCurrentBrightness();
|
||||
|
||||
@@ -73,6 +73,9 @@ public class AutomaticBrightnessStrategy {
|
||||
// the user has enabled the auto-brightness from the settings, it is disabled because the
|
||||
// display is off
|
||||
private boolean mIsAutoBrightnessEnabled = false;
|
||||
// Indicates if auto-brightness is disabled due to the display being off. Needed for metric
|
||||
// purposes.
|
||||
private boolean mAutoBrightnessDisabledDueToDisplayOff;
|
||||
// If the auto-brightness model for the last manual changes done by the user.
|
||||
private boolean mIsShortTermModelActive = false;
|
||||
|
||||
@@ -96,24 +99,21 @@ public class AutomaticBrightnessStrategy {
|
||||
* AutomaticBrightnessController accounting for any manual changes made by the user.
|
||||
*/
|
||||
public void setAutoBrightnessState(int targetDisplayState,
|
||||
boolean allowAutoBrightnessWhileDozingConfig,
|
||||
float brightnessState, int brightnessReason, int policy,
|
||||
boolean allowAutoBrightnessWhileDozingConfig, int brightnessReason, int policy,
|
||||
float lastUserSetScreenBrightness, boolean userSetBrightnessChanged) {
|
||||
final boolean autoBrightnessEnabledInDoze =
|
||||
allowAutoBrightnessWhileDozingConfig
|
||||
&& Display.isDozeState(targetDisplayState);
|
||||
mIsAutoBrightnessEnabled = shouldUseAutoBrightness()
|
||||
&& (targetDisplayState == Display.STATE_ON || autoBrightnessEnabledInDoze)
|
||||
&& (Float.isNaN(brightnessState)
|
||||
|| brightnessReason == BrightnessReason.REASON_TEMPORARY
|
||||
|| brightnessReason == BrightnessReason.REASON_BOOST)
|
||||
&& mAutomaticBrightnessController != null
|
||||
&& brightnessReason != BrightnessReason.REASON_FOLLOWER;
|
||||
final boolean autoBrightnessDisabledDueToDisplayOff = shouldUseAutoBrightness()
|
||||
&& brightnessReason != BrightnessReason.REASON_OVERRIDE
|
||||
&& mAutomaticBrightnessController != null;
|
||||
mAutoBrightnessDisabledDueToDisplayOff = shouldUseAutoBrightness()
|
||||
&& !(targetDisplayState == Display.STATE_ON || autoBrightnessEnabledInDoze);
|
||||
final int autoBrightnessState = mIsAutoBrightnessEnabled
|
||||
&& brightnessReason != BrightnessReason.REASON_FOLLOWER
|
||||
? AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED
|
||||
: autoBrightnessDisabledDueToDisplayOff
|
||||
: mAutoBrightnessDisabledDueToDisplayOff
|
||||
? AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE
|
||||
: AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED;
|
||||
|
||||
@@ -125,6 +125,10 @@ public class AutomaticBrightnessStrategy {
|
||||
return mIsAutoBrightnessEnabled;
|
||||
}
|
||||
|
||||
public boolean isAutoBrightnessDisabledDueToDisplayOff() {
|
||||
return mAutoBrightnessDisabledDueToDisplayOff;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the {@link BrightnessConfiguration} that is currently being used by the associated
|
||||
* display.
|
||||
|
||||
@@ -844,6 +844,155 @@ public final class DisplayPowerController2Test {
|
||||
verify(mHolder.screenOffBrightnessSensorController).stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessEnabled_DisplayIsOn() {
|
||||
Settings.System.putInt(mContext.getContentResolver(),
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE,
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
|
||||
|
||||
DisplayPowerRequest dpr = new DisplayPowerRequest();
|
||||
dpr.policy = DisplayPowerRequest.POLICY_BRIGHT;
|
||||
when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON);
|
||||
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
|
||||
advanceTime(1); // Run updatePowerState
|
||||
|
||||
verify(mHolder.automaticBrightnessController).configure(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED,
|
||||
/* configuration= */ null, PowerManager.BRIGHTNESS_INVALID_FLOAT,
|
||||
/* userChangedBrightness= */ false, /* adjustment= */ 0,
|
||||
/* userChangedAutoBrightnessAdjustment= */ false, DisplayPowerRequest.POLICY_BRIGHT,
|
||||
/* shouldResetShortTermModel= */ false
|
||||
);
|
||||
verify(mHolder.hbmController)
|
||||
.setAutoBrightnessEnabled(AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessEnabled_DisplayIsInDoze() {
|
||||
Settings.System.putInt(mContext.getContentResolver(),
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE,
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
|
||||
mContext.getOrCreateTestableResources().addOverride(
|
||||
com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing, true);
|
||||
mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
|
||||
|
||||
DisplayPowerRequest dpr = new DisplayPowerRequest();
|
||||
dpr.policy = DisplayPowerRequest.POLICY_DOZE;
|
||||
when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_DOZE);
|
||||
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
|
||||
advanceTime(1); // Run updatePowerState
|
||||
|
||||
verify(mHolder.automaticBrightnessController).configure(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED,
|
||||
/* configuration= */ null, PowerManager.BRIGHTNESS_INVALID_FLOAT,
|
||||
/* userChangedBrightness= */ false, /* adjustment= */ 0,
|
||||
/* userChangedAutoBrightnessAdjustment= */ false, DisplayPowerRequest.POLICY_DOZE,
|
||||
/* shouldResetShortTermModel= */ false
|
||||
);
|
||||
verify(mHolder.hbmController)
|
||||
.setAutoBrightnessEnabled(AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessDisabled_ManualBrightnessMode() {
|
||||
Settings.System.putInt(mContext.getContentResolver(),
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE,
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
|
||||
|
||||
DisplayPowerRequest dpr = new DisplayPowerRequest();
|
||||
dpr.policy = DisplayPowerRequest.POLICY_BRIGHT;
|
||||
when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON);
|
||||
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
|
||||
advanceTime(1); // Run updatePowerState
|
||||
|
||||
// One triggered by the test, the other by handleBrightnessModeChange
|
||||
verify(mHolder.automaticBrightnessController, times(2)).configure(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED,
|
||||
/* configuration= */ null, PowerManager.BRIGHTNESS_INVALID_FLOAT,
|
||||
/* userChangedBrightness= */ false, /* adjustment= */ 0,
|
||||
/* userChangedAutoBrightnessAdjustment= */ false, DisplayPowerRequest.POLICY_BRIGHT,
|
||||
/* shouldResetShortTermModel= */ false
|
||||
);
|
||||
verify(mHolder.hbmController, times(2))
|
||||
.setAutoBrightnessEnabled(AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessDisabled_DisplayIsOff() {
|
||||
Settings.System.putInt(mContext.getContentResolver(),
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE,
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
|
||||
|
||||
DisplayPowerRequest dpr = new DisplayPowerRequest();
|
||||
dpr.policy = DisplayPowerRequest.POLICY_OFF;
|
||||
when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_OFF);
|
||||
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
|
||||
advanceTime(1); // Run updatePowerState
|
||||
|
||||
verify(mHolder.automaticBrightnessController).configure(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE,
|
||||
/* configuration= */ null, PowerManager.BRIGHTNESS_INVALID_FLOAT,
|
||||
/* userChangedBrightness= */ false, /* adjustment= */ 0,
|
||||
/* userChangedAutoBrightnessAdjustment= */ false, DisplayPowerRequest.POLICY_OFF,
|
||||
/* shouldResetShortTermModel= */ false
|
||||
);
|
||||
verify(mHolder.hbmController).setAutoBrightnessEnabled(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessDisabled_DisplayIsInDoze() {
|
||||
Settings.System.putInt(mContext.getContentResolver(),
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE,
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
|
||||
mContext.getOrCreateTestableResources().addOverride(
|
||||
com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing, false);
|
||||
mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
|
||||
|
||||
DisplayPowerRequest dpr = new DisplayPowerRequest();
|
||||
dpr.policy = DisplayPowerRequest.POLICY_DOZE;
|
||||
when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_DOZE);
|
||||
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
|
||||
advanceTime(1); // Run updatePowerState
|
||||
|
||||
verify(mHolder.automaticBrightnessController).configure(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE,
|
||||
/* configuration= */ null, PowerManager.BRIGHTNESS_INVALID_FLOAT,
|
||||
/* userChangedBrightness= */ false, /* adjustment= */ 0,
|
||||
/* userChangedAutoBrightnessAdjustment= */ false, DisplayPowerRequest.POLICY_DOZE,
|
||||
/* shouldResetShortTermModel= */ false
|
||||
);
|
||||
verify(mHolder.hbmController).setAutoBrightnessEnabled(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessDisabled_FollowerDisplay() {
|
||||
Settings.System.putInt(mContext.getContentResolver(),
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE,
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
|
||||
mHolder.dpc.setBrightnessToFollow(0.3f, -1, 0, /* slowChange= */ false);
|
||||
|
||||
DisplayPowerRequest dpr = new DisplayPowerRequest();
|
||||
dpr.policy = DisplayPowerRequest.POLICY_BRIGHT;
|
||||
when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON);
|
||||
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
|
||||
advanceTime(1); // Run updatePowerState
|
||||
|
||||
// One triggered by the test, the other by handleBrightnessModeChange
|
||||
verify(mHolder.automaticBrightnessController, times(2)).configure(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED,
|
||||
/* configuration= */ null, PowerManager.BRIGHTNESS_INVALID_FLOAT,
|
||||
/* userChangedBrightness= */ false, /* adjustment= */ 0,
|
||||
/* userChangedAutoBrightnessAdjustment= */ false, DisplayPowerRequest.POLICY_BRIGHT,
|
||||
/* shouldResetShortTermModel= */ false
|
||||
);
|
||||
|
||||
// HBM should be allowed for the follower display
|
||||
verify(mHolder.hbmController)
|
||||
.setAutoBrightnessEnabled(AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBrightnessNitsPersistWhenDisplayDeviceChanges() {
|
||||
float brightness = 0.3f;
|
||||
|
||||
@@ -849,6 +849,155 @@ public final class DisplayPowerControllerTest {
|
||||
verify(mHolder.screenOffBrightnessSensorController).stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessEnabled_DisplayIsOn() {
|
||||
Settings.System.putInt(mContext.getContentResolver(),
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE,
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
|
||||
|
||||
DisplayPowerRequest dpr = new DisplayPowerRequest();
|
||||
dpr.policy = DisplayPowerRequest.POLICY_BRIGHT;
|
||||
when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON);
|
||||
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
|
||||
advanceTime(1); // Run updatePowerState
|
||||
|
||||
verify(mHolder.automaticBrightnessController).configure(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED,
|
||||
/* configuration= */ null, PowerManager.BRIGHTNESS_INVALID_FLOAT,
|
||||
/* userChangedBrightness= */ false, /* adjustment= */ 0,
|
||||
/* userChangedAutoBrightnessAdjustment= */ false, DisplayPowerRequest.POLICY_BRIGHT,
|
||||
/* shouldResetShortTermModel= */ false
|
||||
);
|
||||
verify(mHolder.hbmController)
|
||||
.setAutoBrightnessEnabled(AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessEnabled_DisplayIsInDoze() {
|
||||
Settings.System.putInt(mContext.getContentResolver(),
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE,
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
|
||||
mContext.getOrCreateTestableResources().addOverride(
|
||||
com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing, true);
|
||||
mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
|
||||
|
||||
DisplayPowerRequest dpr = new DisplayPowerRequest();
|
||||
dpr.policy = DisplayPowerRequest.POLICY_DOZE;
|
||||
when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_DOZE);
|
||||
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
|
||||
advanceTime(1); // Run updatePowerState
|
||||
|
||||
verify(mHolder.automaticBrightnessController).configure(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED,
|
||||
/* configuration= */ null, PowerManager.BRIGHTNESS_INVALID_FLOAT,
|
||||
/* userChangedBrightness= */ false, /* adjustment= */ 0,
|
||||
/* userChangedAutoBrightnessAdjustment= */ false, DisplayPowerRequest.POLICY_DOZE,
|
||||
/* shouldResetShortTermModel= */ false
|
||||
);
|
||||
verify(mHolder.hbmController)
|
||||
.setAutoBrightnessEnabled(AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessDisabled_ManualBrightnessMode() {
|
||||
Settings.System.putInt(mContext.getContentResolver(),
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE,
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
|
||||
|
||||
DisplayPowerRequest dpr = new DisplayPowerRequest();
|
||||
dpr.policy = DisplayPowerRequest.POLICY_BRIGHT;
|
||||
when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON);
|
||||
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
|
||||
advanceTime(1); // Run updatePowerState
|
||||
|
||||
// One triggered by the test, the other by handleBrightnessModeChange
|
||||
verify(mHolder.automaticBrightnessController, times(2)).configure(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED,
|
||||
/* configuration= */ null, PowerManager.BRIGHTNESS_INVALID_FLOAT,
|
||||
/* userChangedBrightness= */ false, /* adjustment= */ 0,
|
||||
/* userChangedAutoBrightnessAdjustment= */ false, DisplayPowerRequest.POLICY_BRIGHT,
|
||||
/* shouldResetShortTermModel= */ false
|
||||
);
|
||||
verify(mHolder.hbmController, times(2))
|
||||
.setAutoBrightnessEnabled(AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessDisabled_DisplayIsOff() {
|
||||
Settings.System.putInt(mContext.getContentResolver(),
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE,
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
|
||||
|
||||
DisplayPowerRequest dpr = new DisplayPowerRequest();
|
||||
dpr.policy = DisplayPowerRequest.POLICY_OFF;
|
||||
when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_OFF);
|
||||
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
|
||||
advanceTime(1); // Run updatePowerState
|
||||
|
||||
verify(mHolder.automaticBrightnessController).configure(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE,
|
||||
/* configuration= */ null, PowerManager.BRIGHTNESS_INVALID_FLOAT,
|
||||
/* userChangedBrightness= */ false, /* adjustment= */ 0,
|
||||
/* userChangedAutoBrightnessAdjustment= */ false, DisplayPowerRequest.POLICY_OFF,
|
||||
/* shouldResetShortTermModel= */ false
|
||||
);
|
||||
verify(mHolder.hbmController).setAutoBrightnessEnabled(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessDisabled_DisplayIsInDoze() {
|
||||
Settings.System.putInt(mContext.getContentResolver(),
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE,
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
|
||||
mContext.getOrCreateTestableResources().addOverride(
|
||||
com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing, false);
|
||||
mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
|
||||
|
||||
DisplayPowerRequest dpr = new DisplayPowerRequest();
|
||||
dpr.policy = DisplayPowerRequest.POLICY_DOZE;
|
||||
when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_DOZE);
|
||||
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
|
||||
advanceTime(1); // Run updatePowerState
|
||||
|
||||
verify(mHolder.automaticBrightnessController).configure(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE,
|
||||
/* configuration= */ null, PowerManager.BRIGHTNESS_INVALID_FLOAT,
|
||||
/* userChangedBrightness= */ false, /* adjustment= */ 0,
|
||||
/* userChangedAutoBrightnessAdjustment= */ false, DisplayPowerRequest.POLICY_DOZE,
|
||||
/* shouldResetShortTermModel= */ false
|
||||
);
|
||||
verify(mHolder.hbmController).setAutoBrightnessEnabled(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessDisabled_FollowerDisplay() {
|
||||
Settings.System.putInt(mContext.getContentResolver(),
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE,
|
||||
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
|
||||
mHolder.dpc.setBrightnessToFollow(0.3f, -1, 0, /* slowChange= */ false);
|
||||
|
||||
DisplayPowerRequest dpr = new DisplayPowerRequest();
|
||||
dpr.policy = DisplayPowerRequest.POLICY_BRIGHT;
|
||||
when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON);
|
||||
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
|
||||
advanceTime(1); // Run updatePowerState
|
||||
|
||||
// One triggered by the test, the other by handleBrightnessModeChange
|
||||
verify(mHolder.automaticBrightnessController, times(2)).configure(
|
||||
AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED,
|
||||
/* configuration= */ null, PowerManager.BRIGHTNESS_INVALID_FLOAT,
|
||||
/* userChangedBrightness= */ false, /* adjustment= */ 0,
|
||||
/* userChangedAutoBrightnessAdjustment= */ false, DisplayPowerRequest.POLICY_BRIGHT,
|
||||
/* shouldResetShortTermModel= */ false
|
||||
);
|
||||
|
||||
// HBM should be allowed for the follower display
|
||||
verify(mHolder.hbmController)
|
||||
.setAutoBrightnessEnabled(AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBrightnessNitsPersistWhenDisplayDeviceChanges() {
|
||||
float brightness = 0.3f;
|
||||
|
||||
@@ -96,32 +96,101 @@ public class AutomaticBrightnessStrategyTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setAutoBrightnessWhenDisabled() {
|
||||
public void testAutoBrightnessState_AutoBrightnessDisabled() {
|
||||
mAutomaticBrightnessStrategy.setUseAutoBrightness(false);
|
||||
int targetDisplayState = Display.STATE_ON;
|
||||
boolean allowAutoBrightnessWhileDozing = false;
|
||||
float brightnessState = Float.NaN;
|
||||
int brightnessReason = BrightnessReason.REASON_OVERRIDE;
|
||||
int brightnessReason = BrightnessReason.REASON_UNKNOWN;
|
||||
int policy = DisplayManagerInternal.DisplayPowerRequest.POLICY_BRIGHT;
|
||||
float lastUserSetBrightness = 0.2f;
|
||||
boolean userSetBrightnessChanged = true;
|
||||
mAutomaticBrightnessStrategy.updatePendingAutoBrightnessAdjustments(true);
|
||||
mAutomaticBrightnessStrategy.setAutoBrightnessState(targetDisplayState,
|
||||
allowAutoBrightnessWhileDozing, brightnessState, brightnessReason, policy,
|
||||
lastUserSetBrightness, userSetBrightnessChanged);
|
||||
allowAutoBrightnessWhileDozing, brightnessReason, policy, lastUserSetBrightness,
|
||||
userSetBrightnessChanged);
|
||||
verify(mAutomaticBrightnessController)
|
||||
.configure(AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED,
|
||||
mBrightnessConfiguration,
|
||||
lastUserSetBrightness,
|
||||
userSetBrightnessChanged, 0.5f,
|
||||
false, policy, true);
|
||||
assertFalse(mAutomaticBrightnessStrategy.isAutoBrightnessEnabled());
|
||||
assertFalse(mAutomaticBrightnessStrategy.isAutoBrightnessDisabledDueToDisplayOff());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setAutoBrightnessWhenEnabledAndDisplayIsDozing() {
|
||||
public void testAutoBrightnessState_DisplayIsOff() {
|
||||
mAutomaticBrightnessStrategy.setUseAutoBrightness(true);
|
||||
int targetDisplayState = Display.STATE_OFF;
|
||||
boolean allowAutoBrightnessWhileDozing = false;
|
||||
int brightnessReason = BrightnessReason.REASON_UNKNOWN;
|
||||
int policy = DisplayManagerInternal.DisplayPowerRequest.POLICY_OFF;
|
||||
float lastUserSetBrightness = 0.2f;
|
||||
boolean userSetBrightnessChanged = true;
|
||||
mAutomaticBrightnessStrategy.updatePendingAutoBrightnessAdjustments(true);
|
||||
mAutomaticBrightnessStrategy.setAutoBrightnessState(targetDisplayState,
|
||||
allowAutoBrightnessWhileDozing, brightnessReason, policy, lastUserSetBrightness,
|
||||
userSetBrightnessChanged);
|
||||
verify(mAutomaticBrightnessController)
|
||||
.configure(AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE,
|
||||
mBrightnessConfiguration,
|
||||
lastUserSetBrightness,
|
||||
userSetBrightnessChanged, 0.5f,
|
||||
false, policy, true);
|
||||
assertFalse(mAutomaticBrightnessStrategy.isAutoBrightnessEnabled());
|
||||
assertTrue(mAutomaticBrightnessStrategy.isAutoBrightnessDisabledDueToDisplayOff());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessState_DisplayIsInDoze_ConfigDoesNotAllow() {
|
||||
mAutomaticBrightnessStrategy.setUseAutoBrightness(true);
|
||||
int targetDisplayState = Display.STATE_DOZE;
|
||||
boolean allowAutoBrightnessWhileDozing = false;
|
||||
int brightnessReason = BrightnessReason.REASON_UNKNOWN;
|
||||
int policy = DisplayManagerInternal.DisplayPowerRequest.POLICY_DOZE;
|
||||
float lastUserSetBrightness = 0.2f;
|
||||
boolean userSetBrightnessChanged = true;
|
||||
mAutomaticBrightnessStrategy.updatePendingAutoBrightnessAdjustments(true);
|
||||
mAutomaticBrightnessStrategy.setAutoBrightnessState(targetDisplayState,
|
||||
allowAutoBrightnessWhileDozing, brightnessReason, policy, lastUserSetBrightness,
|
||||
userSetBrightnessChanged);
|
||||
verify(mAutomaticBrightnessController)
|
||||
.configure(AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE,
|
||||
mBrightnessConfiguration,
|
||||
lastUserSetBrightness,
|
||||
userSetBrightnessChanged, 0.5f,
|
||||
false, policy, true);
|
||||
assertFalse(mAutomaticBrightnessStrategy.isAutoBrightnessEnabled());
|
||||
assertTrue(mAutomaticBrightnessStrategy.isAutoBrightnessDisabledDueToDisplayOff());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessState_BrightnessReasonIsOverride() {
|
||||
mAutomaticBrightnessStrategy.setUseAutoBrightness(true);
|
||||
int targetDisplayState = Display.STATE_ON;
|
||||
boolean allowAutoBrightnessWhileDozing = false;
|
||||
int brightnessReason = BrightnessReason.REASON_OVERRIDE;
|
||||
int policy = DisplayManagerInternal.DisplayPowerRequest.POLICY_BRIGHT;
|
||||
float lastUserSetBrightness = 0.2f;
|
||||
boolean userSetBrightnessChanged = true;
|
||||
mAutomaticBrightnessStrategy.updatePendingAutoBrightnessAdjustments(true);
|
||||
mAutomaticBrightnessStrategy.setAutoBrightnessState(targetDisplayState,
|
||||
allowAutoBrightnessWhileDozing, brightnessReason, policy, lastUserSetBrightness,
|
||||
userSetBrightnessChanged);
|
||||
verify(mAutomaticBrightnessController)
|
||||
.configure(AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED,
|
||||
mBrightnessConfiguration,
|
||||
lastUserSetBrightness,
|
||||
userSetBrightnessChanged, 0.5f,
|
||||
false, policy, true);
|
||||
assertFalse(mAutomaticBrightnessStrategy.isAutoBrightnessEnabled());
|
||||
assertFalse(mAutomaticBrightnessStrategy.isAutoBrightnessDisabledDueToDisplayOff());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutoBrightnessState_DisplayIsInDoze_ConfigDoesAllow() {
|
||||
mAutomaticBrightnessStrategy.setUseAutoBrightness(true);
|
||||
int targetDisplayState = Display.STATE_DOZE;
|
||||
float brightnessState = Float.NaN;
|
||||
boolean allowAutoBrightnessWhileDozing = true;
|
||||
int brightnessReason = BrightnessReason.REASON_DOZE;
|
||||
int policy = DisplayManagerInternal.DisplayPowerRequest.POLICY_DOZE;
|
||||
@@ -131,23 +200,24 @@ public class AutomaticBrightnessStrategyTest {
|
||||
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0.4f);
|
||||
mAutomaticBrightnessStrategy.updatePendingAutoBrightnessAdjustments(false);
|
||||
mAutomaticBrightnessStrategy.setAutoBrightnessState(targetDisplayState,
|
||||
allowAutoBrightnessWhileDozing, brightnessState, brightnessReason, policy,
|
||||
lastUserSetBrightness, userSetBrightnessChanged);
|
||||
allowAutoBrightnessWhileDozing, brightnessReason, policy, lastUserSetBrightness,
|
||||
userSetBrightnessChanged);
|
||||
verify(mAutomaticBrightnessController)
|
||||
.configure(AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED,
|
||||
mBrightnessConfiguration,
|
||||
lastUserSetBrightness,
|
||||
userSetBrightnessChanged, 0.4f,
|
||||
true, policy, true);
|
||||
assertTrue(mAutomaticBrightnessStrategy.isAutoBrightnessEnabled());
|
||||
assertFalse(mAutomaticBrightnessStrategy.isAutoBrightnessDisabledDueToDisplayOff());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setAutoBrightnessWhenEnabledAndDisplayIsOn() {
|
||||
public void testAutoBrightnessState_DisplayIsOn() {
|
||||
mAutomaticBrightnessStrategy.setUseAutoBrightness(true);
|
||||
int targetDisplayState = Display.STATE_ON;
|
||||
float brightnessState = Float.NaN;
|
||||
boolean allowAutoBrightnessWhileDozing = false;
|
||||
int brightnessReason = BrightnessReason.REASON_OVERRIDE;
|
||||
int brightnessReason = BrightnessReason.REASON_UNKNOWN;
|
||||
float lastUserSetBrightness = 0.2f;
|
||||
boolean userSetBrightnessChanged = true;
|
||||
int policy = DisplayManagerInternal.DisplayPowerRequest.POLICY_BRIGHT;
|
||||
@@ -156,14 +226,16 @@ public class AutomaticBrightnessStrategyTest {
|
||||
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, pendingBrightnessAdjustment);
|
||||
mAutomaticBrightnessStrategy.updatePendingAutoBrightnessAdjustments(false);
|
||||
mAutomaticBrightnessStrategy.setAutoBrightnessState(targetDisplayState,
|
||||
allowAutoBrightnessWhileDozing, brightnessState, brightnessReason, policy,
|
||||
lastUserSetBrightness, userSetBrightnessChanged);
|
||||
allowAutoBrightnessWhileDozing, brightnessReason, policy, lastUserSetBrightness,
|
||||
userSetBrightnessChanged);
|
||||
verify(mAutomaticBrightnessController)
|
||||
.configure(AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED,
|
||||
mBrightnessConfiguration,
|
||||
lastUserSetBrightness,
|
||||
userSetBrightnessChanged, pendingBrightnessAdjustment,
|
||||
true, policy, true);
|
||||
assertTrue(mAutomaticBrightnessStrategy.isAutoBrightnessEnabled());
|
||||
assertFalse(mAutomaticBrightnessStrategy.isAutoBrightnessDisabledDueToDisplayOff());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user