Loading services/core/java/com/android/server/display/DisplayPowerController.java +7 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -1655,8 +1655,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mShouldResetShortTermModel); mShouldResetShortTermModel = false; } mBrightnessRangeController.setAutoBrightnessEnabled(mUseAutoBrightness mBrightnessRangeController.setAutoBrightnessEnabled(autoBrightnessEnabled ? AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED : autoBrightnessDisabledDueToDisplayOff ? AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE : AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED); if (mBrightnessTracker != null) { Loading services/core/java/com/android/server/display/DisplayPowerController2.java +6 −4 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -1306,9 +1306,11 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal && (mAutomaticBrightnessStrategy.getAutoBrightnessAdjustmentChanged() || userSetBrightnessChanged); mBrightnessRangeController.setAutoBrightnessEnabled(mAutomaticBrightnessStrategy .shouldUseAutoBrightness() mBrightnessRangeController.setAutoBrightnessEnabled( mAutomaticBrightnessStrategy.isAutoBrightnessEnabled() ? AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED : mAutomaticBrightnessStrategy.isAutoBrightnessDisabledDueToDisplayOff() ? AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE : AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED); boolean updateScreenBrightnessSetting = false; Loading services/core/java/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategy.java +13 −9 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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. Loading services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java +149 −0 Original line number Diff line number Diff line Loading @@ -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; Loading services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java +149 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
services/core/java/com/android/server/display/DisplayPowerController.java +7 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -1655,8 +1655,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mShouldResetShortTermModel); mShouldResetShortTermModel = false; } mBrightnessRangeController.setAutoBrightnessEnabled(mUseAutoBrightness mBrightnessRangeController.setAutoBrightnessEnabled(autoBrightnessEnabled ? AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED : autoBrightnessDisabledDueToDisplayOff ? AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE : AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED); if (mBrightnessTracker != null) { Loading
services/core/java/com/android/server/display/DisplayPowerController2.java +6 −4 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -1306,9 +1306,11 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal && (mAutomaticBrightnessStrategy.getAutoBrightnessAdjustmentChanged() || userSetBrightnessChanged); mBrightnessRangeController.setAutoBrightnessEnabled(mAutomaticBrightnessStrategy .shouldUseAutoBrightness() mBrightnessRangeController.setAutoBrightnessEnabled( mAutomaticBrightnessStrategy.isAutoBrightnessEnabled() ? AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED : mAutomaticBrightnessStrategy.isAutoBrightnessDisabledDueToDisplayOff() ? AutomaticBrightnessController.AUTO_BRIGHTNESS_OFF_DUE_TO_DISPLAY_STATE : AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED); boolean updateScreenBrightnessSetting = false; Loading
services/core/java/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategy.java +13 −9 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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. Loading
services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java +149 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java +149 −0 Original line number Diff line number Diff line Loading @@ -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; Loading