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

Commit dc732a85 authored by Beverly's avatar Beverly
Browse files

Don't crash on transition DOZE_SUSPEND_TRIGGERS => DOZE_PULSE_DONE

This transition can happen with the following sequence of events:
 - Heads up notification arrives during doze_aod or doze, pulse
 begins (DOZE_REQUEST_PULSE, DOZE_PULSING)
 - While pulsing, car mode begins (DOZE_SUSPEND_TRIGGERS)
 - Heads up notification stops showing (DOZE_PULSE_DONE)

If the device is in DOZE_SUSPEND_TRIGGERS, don't send DOZE_PULSE_DONE
to DozeMachine.Parts. DOZE_SUSPEND_TRIGGERS means the device
has already ended the pulsing UI.

Test: atest DozeMachineTest
Test: manually force car mode to start after DOZE_PULSING and see that
the device won't crash on pulse-done
Fixes: 262346136

Change-Id: Icc16b8a16af1fd266a2afcfdbe6e1121ef788d65
parent a55730c9
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -398,7 +398,8 @@ public class DozeMachine {
        }
        if ((mState == State.DOZE_AOD_PAUSED || mState == State.DOZE_AOD_PAUSING
                || mState == State.DOZE_AOD || mState == State.DOZE
                || mState == State.DOZE_AOD_DOCKED) && requestedState == State.DOZE_PULSE_DONE) {
                || mState == State.DOZE_AOD_DOCKED || mState == State.DOZE_SUSPEND_TRIGGERS)
                && requestedState == State.DOZE_PULSE_DONE) {
            Log.i(TAG, "Dropping pulse done because current state is already done: " + mState);
            return mState;
        }
+11 −0
Original line number Diff line number Diff line
@@ -407,6 +407,17 @@ public class DozeMachineTest extends SysuiTestCase {
        mMachine.requestState(DOZE_PULSE_DONE);
    }

    @Test
    public void testPulsing_dozeSuspendTriggers_pulseDone_doesntCrash() {
        mMachine.requestState(INITIALIZED);

        mMachine.requestState(DOZE);
        mMachine.requestPulse(DozeLog.PULSE_REASON_NOTIFICATION);
        mMachine.requestState(DOZE_PULSING);
        mMachine.requestState(DOZE_SUSPEND_TRIGGERS);
        mMachine.requestState(DOZE_PULSE_DONE);
    }

    @Test
    public void testSuppressingPulse_doesntCrash() {
        mMachine.requestState(INITIALIZED);