diff options
2 files changed, 31 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/display/brightness/clamper/BrightnessClamperController.java b/services/core/java/com/android/server/display/brightness/clamper/BrightnessClamperController.java index 440a271d7f76..860be2028eb3 100644 --- a/services/core/java/com/android/server/display/brightness/clamper/BrightnessClamperController.java +++ b/services/core/java/com/android/server/display/brightness/clamper/BrightnessClamperController.java @@ -32,6 +32,7 @@ import android.provider.DeviceConfig; import android.provider.DeviceConfigInterface; import android.util.IndentingPrintWriter; import android.util.Spline; +import android.view.Display; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.display.BrightnessSynchronizer; @@ -58,6 +59,7 @@ public class BrightnessClamperController { private final DeviceConfigParameterProvider mDeviceConfigParameterProvider; private final Handler mHandler; private final LightSensorController mLightSensorController; + private int mDisplayState = Display.STATE_OFF; private final ClamperChangeListener mClamperChangeListenerExternal; private final Executor mExecutor; @@ -149,16 +151,13 @@ public class BrightnessClamperController { public DisplayBrightnessState clamp(DisplayBrightnessState displayBrightnessState, DisplayManagerInternal.DisplayPowerRequest request, float brightnessValue, boolean slowChange, int displayState) { + mDisplayState = displayState; DisplayBrightnessState.Builder builder = DisplayBrightnessState.Builder.from( displayBrightnessState); builder.setIsSlowChange(slowChange); builder.setBrightness(brightnessValue); - if (displayState != STATE_ON) { - mLightSensorController.stop(); - } else { - adjustLightSensorSubscription(); - } + adjustLightSensorSubscription(); for (int i = 0; i < mModifiers.size(); i++) { mModifiers.get(i).apply(request, builder); @@ -230,7 +229,8 @@ public class BrightnessClamperController { } private void adjustLightSensorSubscription() { - if (mModifiers.stream().anyMatch(BrightnessStateModifier::shouldListenToLightSensor)) { + if (mDisplayState == STATE_ON && mModifiers.stream() + .anyMatch(BrightnessStateModifier::shouldListenToLightSensor)) { mLightSensorController.restart(); } else { mLightSensorController.stop(); diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/clamper/BrightnessClamperControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/clamper/BrightnessClamperControllerTest.java index 66e9c98b6481..238654d2aaf1 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/brightness/clamper/BrightnessClamperControllerTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/clamper/BrightnessClamperControllerTest.java @@ -27,6 +27,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -126,16 +127,11 @@ public class BrightnessClamperControllerTest { @Test public void testConstructor_doesNotStartsLightSensorController() { - verify(mMockLightSensorController, never()).restart(); - } - - @Test - public void testConstructor_startsLightSensorController() { when(mMockModifier.shouldListenToLightSensor()).thenReturn(true); mClamperController = createBrightnessClamperController(); - verify(mMockLightSensorController).restart(); + verify(mMockLightSensorController, never()).restart(); } @Test @@ -171,20 +167,43 @@ public class BrightnessClamperControllerTest { @Test public void testOnDisplayChanged_doesNotRestartLightSensor() { + mClamperController.clamp(mDisplayBrightnessState, mMockRequest, 0.1f, + false, STATE_ON); + reset(mMockLightSensorController); + mClamperController.onDisplayChanged(mMockDisplayDeviceData); verify(mMockLightSensorController, never()).restart(); + verify(mMockLightSensorController).stop(); } @Test public void testOnDisplayChanged_restartsLightSensor() { when(mMockModifier.shouldListenToLightSensor()).thenReturn(true); + mClamperController.clamp(mDisplayBrightnessState, mMockRequest, 0.1f, + false, STATE_ON); + reset(mMockLightSensorController); + mClamperController.onDisplayChanged(mMockDisplayDeviceData); + verify(mMockLightSensorController, never()).stop(); verify(mMockLightSensorController).restart(); } @Test + public void testOnDisplayChanged_doesNotRestartLightSensor_screenOff() { + when(mMockModifier.shouldListenToLightSensor()).thenReturn(true); + mClamperController.clamp(mDisplayBrightnessState, mMockRequest, 0.1f, + false, STATE_OFF); + reset(mMockLightSensorController); + + mClamperController.onDisplayChanged(mMockDisplayDeviceData); + + verify(mMockLightSensorController, never()).restart(); + verify(mMockLightSensorController).stop(); + } + + @Test public void testClamp_AppliesModifier() { float initialBrightness = 0.2f; boolean initialSlowChange = true; |