Loading services/core/java/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategy.java +9 −2 Original line number Diff line number Diff line Loading @@ -102,6 +102,9 @@ public class AutomaticBrightnessStrategy extends AutomaticBrightnessStrategy2 private DisplayManagerFlags mDisplayManagerFlags; // Indicates if the current auto-brightness should be ramped up or down slowly. private boolean mIsSlowChange; @VisibleForTesting AutomaticBrightnessStrategy(Context context, int displayId, Injector injector, DisplayManagerFlags displayManagerFlags) { Loading Loading @@ -172,6 +175,11 @@ public class AutomaticBrightnessStrategy extends AutomaticBrightnessStrategy2 isValid = true; } } // A change is slow when the auto-brightness was already applied, and there are no new // auto-brightness adjustments from an external client(e.g. Moving the slider). As such, // it is important to record this value before applying the current auto-brightness. mIsSlowChange = hasAppliedAutoBrightness() && !getAutoBrightnessAdjustmentChanged(); setAutoBrightnessApplied(isValid); return isValid; } Loading Loading @@ -284,8 +292,7 @@ public class AutomaticBrightnessStrategy extends AutomaticBrightnessStrategy2 .setSdrBrightness(brightness) .setBrightnessReason(brightnessReason) .setDisplayBrightnessStrategyName(getName()) .setIsSlowChange(hasAppliedAutoBrightness() && !getAutoBrightnessAdjustmentChanged()) .setIsSlowChange(mIsSlowChange) .setBrightnessEvent(brightnessEvent) .setBrightnessAdjustmentFlag(mAutoBrightnessAdjustmentReasonsFlags) .setShouldUpdateScreenBrightnessSetting( Loading services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategyTest.java +80 −0 Original line number Diff line number Diff line Loading @@ -570,6 +570,86 @@ public class AutomaticBrightnessStrategyTest { assertEquals(expectedDisplayBrightnessState, actualDisplayBrightnessState); } @Test public void updateBrightness_constructsDisplayBrightnessState_withNoAdjustmentFlag_isSlowChange() { BrightnessEvent brightnessEvent = new BrightnessEvent(DISPLAY_ID); mAutomaticBrightnessStrategy = new AutomaticBrightnessStrategy( mContext, DISPLAY_ID, displayId -> brightnessEvent, mDisplayManagerFlags); mAutomaticBrightnessStrategy.setAutomaticBrightnessController( mAutomaticBrightnessController); float brightness = 0.4f; BrightnessReason brightnessReason = new BrightnessReason(); brightnessReason.setReason(BrightnessReason.REASON_AUTOMATIC); when(mAutomaticBrightnessController.getAutomaticScreenBrightness(brightnessEvent)) .thenReturn(brightness); // Set the state such that auto-brightness was already applied mAutomaticBrightnessStrategy.setAutoBrightnessApplied(true); // Update the auto-brightess validity state to change the isSlowChange flag mAutomaticBrightnessStrategy.isAutoBrightnessValid(); DisplayManagerInternal.DisplayPowerRequest displayPowerRequest = mock(DisplayManagerInternal.DisplayPowerRequest.class); DisplayBrightnessState expectedDisplayBrightnessState = new DisplayBrightnessState.Builder() .setBrightness(brightness) .setSdrBrightness(brightness) .setBrightnessReason(brightnessReason) .setDisplayBrightnessStrategyName(mAutomaticBrightnessStrategy.getName()) .setIsSlowChange(true) .setBrightnessEvent(brightnessEvent) .setBrightnessAdjustmentFlag(0) .setShouldUpdateScreenBrightnessSetting(true) .setIsUserInitiatedChange(true) .build(); DisplayBrightnessState actualDisplayBrightnessState = mAutomaticBrightnessStrategy .updateBrightness(new StrategyExecutionRequest(displayPowerRequest, 0.6f, /* userSetBrightnessChanged= */ true)); assertEquals(expectedDisplayBrightnessState, actualDisplayBrightnessState); } @Test public void updateBrightness_autoBrightnessNotApplied_noAdjustments_isNotSlowChange() { BrightnessEvent brightnessEvent = new BrightnessEvent(DISPLAY_ID); mAutomaticBrightnessStrategy = new AutomaticBrightnessStrategy( mContext, DISPLAY_ID, displayId -> brightnessEvent, mDisplayManagerFlags); mAutomaticBrightnessStrategy.setAutomaticBrightnessController( mAutomaticBrightnessController); float brightness = 0.4f; BrightnessReason brightnessReason = new BrightnessReason(); brightnessReason.setReason(BrightnessReason.REASON_AUTOMATIC); when(mAutomaticBrightnessController.getAutomaticScreenBrightness(brightnessEvent)) .thenReturn(brightness); // Set the state such that auto-brightness was not already applied mAutomaticBrightnessStrategy.setAutoBrightnessApplied(false); // Update the auto-brightess validity state to change the isSlowChange flag mAutomaticBrightnessStrategy.isAutoBrightnessValid(); DisplayManagerInternal.DisplayPowerRequest displayPowerRequest = mock(DisplayManagerInternal.DisplayPowerRequest.class); DisplayBrightnessState expectedDisplayBrightnessState = new DisplayBrightnessState.Builder() .setBrightness(brightness) .setSdrBrightness(brightness) .setBrightnessReason(brightnessReason) .setDisplayBrightnessStrategyName(mAutomaticBrightnessStrategy.getName()) .setIsSlowChange(false) .setBrightnessEvent(brightnessEvent) .setBrightnessAdjustmentFlag(0) .setShouldUpdateScreenBrightnessSetting(true) .setIsUserInitiatedChange(true) .build(); DisplayBrightnessState actualDisplayBrightnessState = mAutomaticBrightnessStrategy .updateBrightness(new StrategyExecutionRequest(displayPowerRequest, 0.6f, /* userSetBrightnessChanged= */ true)); assertEquals(expectedDisplayBrightnessState, actualDisplayBrightnessState); } private void setPendingAutoBrightnessAdjustment(float pendingAutoBrightnessAdjustment) { Settings.System.putFloat(mContext.getContentResolver(), Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, pendingAutoBrightnessAdjustment); Loading Loading
services/core/java/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategy.java +9 −2 Original line number Diff line number Diff line Loading @@ -102,6 +102,9 @@ public class AutomaticBrightnessStrategy extends AutomaticBrightnessStrategy2 private DisplayManagerFlags mDisplayManagerFlags; // Indicates if the current auto-brightness should be ramped up or down slowly. private boolean mIsSlowChange; @VisibleForTesting AutomaticBrightnessStrategy(Context context, int displayId, Injector injector, DisplayManagerFlags displayManagerFlags) { Loading Loading @@ -172,6 +175,11 @@ public class AutomaticBrightnessStrategy extends AutomaticBrightnessStrategy2 isValid = true; } } // A change is slow when the auto-brightness was already applied, and there are no new // auto-brightness adjustments from an external client(e.g. Moving the slider). As such, // it is important to record this value before applying the current auto-brightness. mIsSlowChange = hasAppliedAutoBrightness() && !getAutoBrightnessAdjustmentChanged(); setAutoBrightnessApplied(isValid); return isValid; } Loading Loading @@ -284,8 +292,7 @@ public class AutomaticBrightnessStrategy extends AutomaticBrightnessStrategy2 .setSdrBrightness(brightness) .setBrightnessReason(brightnessReason) .setDisplayBrightnessStrategyName(getName()) .setIsSlowChange(hasAppliedAutoBrightness() && !getAutoBrightnessAdjustmentChanged()) .setIsSlowChange(mIsSlowChange) .setBrightnessEvent(brightnessEvent) .setBrightnessAdjustmentFlag(mAutoBrightnessAdjustmentReasonsFlags) .setShouldUpdateScreenBrightnessSetting( Loading
services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategyTest.java +80 −0 Original line number Diff line number Diff line Loading @@ -570,6 +570,86 @@ public class AutomaticBrightnessStrategyTest { assertEquals(expectedDisplayBrightnessState, actualDisplayBrightnessState); } @Test public void updateBrightness_constructsDisplayBrightnessState_withNoAdjustmentFlag_isSlowChange() { BrightnessEvent brightnessEvent = new BrightnessEvent(DISPLAY_ID); mAutomaticBrightnessStrategy = new AutomaticBrightnessStrategy( mContext, DISPLAY_ID, displayId -> brightnessEvent, mDisplayManagerFlags); mAutomaticBrightnessStrategy.setAutomaticBrightnessController( mAutomaticBrightnessController); float brightness = 0.4f; BrightnessReason brightnessReason = new BrightnessReason(); brightnessReason.setReason(BrightnessReason.REASON_AUTOMATIC); when(mAutomaticBrightnessController.getAutomaticScreenBrightness(brightnessEvent)) .thenReturn(brightness); // Set the state such that auto-brightness was already applied mAutomaticBrightnessStrategy.setAutoBrightnessApplied(true); // Update the auto-brightess validity state to change the isSlowChange flag mAutomaticBrightnessStrategy.isAutoBrightnessValid(); DisplayManagerInternal.DisplayPowerRequest displayPowerRequest = mock(DisplayManagerInternal.DisplayPowerRequest.class); DisplayBrightnessState expectedDisplayBrightnessState = new DisplayBrightnessState.Builder() .setBrightness(brightness) .setSdrBrightness(brightness) .setBrightnessReason(brightnessReason) .setDisplayBrightnessStrategyName(mAutomaticBrightnessStrategy.getName()) .setIsSlowChange(true) .setBrightnessEvent(brightnessEvent) .setBrightnessAdjustmentFlag(0) .setShouldUpdateScreenBrightnessSetting(true) .setIsUserInitiatedChange(true) .build(); DisplayBrightnessState actualDisplayBrightnessState = mAutomaticBrightnessStrategy .updateBrightness(new StrategyExecutionRequest(displayPowerRequest, 0.6f, /* userSetBrightnessChanged= */ true)); assertEquals(expectedDisplayBrightnessState, actualDisplayBrightnessState); } @Test public void updateBrightness_autoBrightnessNotApplied_noAdjustments_isNotSlowChange() { BrightnessEvent brightnessEvent = new BrightnessEvent(DISPLAY_ID); mAutomaticBrightnessStrategy = new AutomaticBrightnessStrategy( mContext, DISPLAY_ID, displayId -> brightnessEvent, mDisplayManagerFlags); mAutomaticBrightnessStrategy.setAutomaticBrightnessController( mAutomaticBrightnessController); float brightness = 0.4f; BrightnessReason brightnessReason = new BrightnessReason(); brightnessReason.setReason(BrightnessReason.REASON_AUTOMATIC); when(mAutomaticBrightnessController.getAutomaticScreenBrightness(brightnessEvent)) .thenReturn(brightness); // Set the state such that auto-brightness was not already applied mAutomaticBrightnessStrategy.setAutoBrightnessApplied(false); // Update the auto-brightess validity state to change the isSlowChange flag mAutomaticBrightnessStrategy.isAutoBrightnessValid(); DisplayManagerInternal.DisplayPowerRequest displayPowerRequest = mock(DisplayManagerInternal.DisplayPowerRequest.class); DisplayBrightnessState expectedDisplayBrightnessState = new DisplayBrightnessState.Builder() .setBrightness(brightness) .setSdrBrightness(brightness) .setBrightnessReason(brightnessReason) .setDisplayBrightnessStrategyName(mAutomaticBrightnessStrategy.getName()) .setIsSlowChange(false) .setBrightnessEvent(brightnessEvent) .setBrightnessAdjustmentFlag(0) .setShouldUpdateScreenBrightnessSetting(true) .setIsUserInitiatedChange(true) .build(); DisplayBrightnessState actualDisplayBrightnessState = mAutomaticBrightnessStrategy .updateBrightness(new StrategyExecutionRequest(displayPowerRequest, 0.6f, /* userSetBrightnessChanged= */ true)); assertEquals(expectedDisplayBrightnessState, actualDisplayBrightnessState); } private void setPendingAutoBrightnessAdjustment(float pendingAutoBrightnessAdjustment) { Settings.System.putFloat(mContext.getContentResolver(), Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, pendingAutoBrightnessAdjustment); Loading