Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02808c9b authored by Piotr Wilczyński's avatar Piotr Wilczyński
Browse files

Don't update brightness if screen on blocked by offload

Bug: 417342861
Test: DisplayPowerControllerTest
Flag: EXEMPT bugfix
Change-Id: I0454f8447570146e3932e37a0d4a9c60540a41ff
parent 6b930544
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1628,7 +1628,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                        || mAutomaticBrightnessStrategy
                        .isTemporaryAutoBrightnessAdjustmentApplied();
        float rampSpeed = 0;
        if (!mPendingScreenOff) {
        if (!mPendingScreenOff && mPendingScreenOnUnblockerByDisplayOffload == null) {
            if (mSkipScreenOnBrightnessRamp) {
                if (state == Display.STATE_ON) {
                    if (mSkipRampState == RAMP_STATE_SKIP_NONE && mDozing) {
+56 −12
Original line number Diff line number Diff line
@@ -1746,6 +1746,59 @@ public final class DisplayPowerControllerTest {

        verify(mDisplayOffloadSession).blockScreenOn(any(Runnable.class));
        verify(mDisplayOffloadSession, never()).cancelBlockScreenOn();

        // Set brightness
        when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON);
        float brightness = 0.34f;
        when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
        ArgumentCaptor<BrightnessSetting.BrightnessSettingListener> listenerCaptor =
                ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class);
        verify(mHolder.brightnessSetting).registerListener(listenerCaptor.capture());
        BrightnessSetting.BrightnessSettingListener listener = listenerCaptor.getValue();
        listener.onBrightnessChanged(brightness);
        advanceTime(1); // Send messages, run updatePowerState

        // Brightness should not be set if screen on blocked
        verify(mHolder.animator, never()).animateTo(/* linearFirstTarget= */ anyFloat(),
                /* linearSecondTarget= */ anyFloat(), /* rate= */ anyFloat(),
                /* ignoreAnimationLimits= */ anyBoolean());
    }

    @Test
    public void testOffloadBlocker_turnON_noOffloadSession_screenOnNotBlocked() {
        // set up, do not set the offload session
        int initState = Display.STATE_OFF;
        mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
        when(mDisplayOffloadSession.blockScreenOn(any())).thenReturn(true);

        // start with OFF.
        when(mHolder.displayPowerState.getScreenState()).thenReturn(initState);
        DisplayPowerRequest dpr = new DisplayPowerRequest();
        dpr.policy = DisplayPowerRequest.POLICY_OFF;
        mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
        advanceTime(1); // Run updatePowerState

        // go to ON.
        dpr.policy = DisplayPowerRequest.POLICY_BRIGHT;
        mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
        advanceTime(1); // Run updatePowerState

        verify(mDisplayOffloadSession, never()).blockScreenOn(any(Runnable.class));
        verify(mDisplayOffloadSession, never()).cancelBlockScreenOn();

        // Set brightness
        when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON);
        float brightness = 0.34f;
        when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
        ArgumentCaptor<BrightnessSetting.BrightnessSettingListener> listenerCaptor =
                ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class);
        verify(mHolder.brightnessSetting).registerListener(listenerCaptor.capture());
        BrightnessSetting.BrightnessSettingListener listener = listenerCaptor.getValue();
        listener.onBrightnessChanged(brightness);
        advanceTime(1); // Send messages, run updatePowerState

        verify(mHolder.animator).animateTo(eq(brightness), /* linearSecondTarget= */ anyFloat(),
                /* rate= */ eq(0f), /* ignoreAnimationLimits= */ eq(false));
    }

    @Test
@@ -2224,21 +2277,12 @@ public final class DisplayPowerControllerTest {
        when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
        when(mHolder.hbmController.getCurrentBrightnessMax())
                .thenReturn(PowerManager.BRIGHTNESS_MAX);
        when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON);
        // Start with state=DOZE.
        when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_DOZE);

        DisplayPowerRequest dprInit = new DisplayPowerRequest();
        dprInit.policy = DisplayPowerRequest.POLICY_DOZE;
        dprInit.policy = DisplayPowerRequest.POLICY_BRIGHT;
        mHolder.dpc.requestPowerState(dprInit, /* waitForNegativeProximity= */ false);
        advanceTime(1); // Run updatePowerState; initialize to DOZE
        // Go to state=ON. But state change would be blocked. so, state=DOZE.
        when(mDisplayOffloadSession.blockScreenOn(any())).thenReturn(true);
        DisplayPowerRequest dpr = new DisplayPowerRequest();
        dpr.dozeScreenState = Display.STATE_ON;
        dpr.policy = DisplayPowerRequest.POLICY_BRIGHT;
        dpr.useNormalBrightnessForDoze = true;
        mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
        advanceTime(1); // Run updatePowerState; process turning on.
        advanceTime(1); // Run updatePowerState

        ArgumentCaptor<BrightnessSetting.BrightnessSettingListener> listenerCaptor =
                ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class);