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

Commit 450ac0b8 authored by Xin Guan's avatar Xin Guan Committed by Android (Google) Code Review
Browse files

Merge "Don't fall through quick doze in force idle mode" into main

parents 6c9e8790 a0000994
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -3527,11 +3527,14 @@ public class DeviceIdleController extends SystemService
    @VisibleForTesting
    @GuardedBy("this")
    void updateQuickDozeFlagLocked(boolean enabled) {
        if (DEBUG) Slog.i(TAG, "updateQuickDozeFlagLocked: enabled=" + enabled);
        if (DEBUG) {
            Slog.i(TAG, "updateQuickDozeFlagLocked: enabled=" + enabled
                    + ", mForceIdle=" + mForceIdle);
        }
        mQuickDozeActivated = enabled;
        mQuickDozeActivatedWhileIdling =
                mQuickDozeActivated && (mState == STATE_IDLE || mState == STATE_IDLE_MAINTENANCE);
        if (enabled) {
        if (!mForceIdle && enabled) {
            // If Quick Doze is enabled, see if we should go straight into it.
            becomeInactiveIfAppropriateLocked();
        }
@@ -3617,6 +3620,14 @@ public class DeviceIdleController extends SystemService
        }
    }

    /** Must only be used in tests. */
    @VisibleForTesting
    void setForceIdleEnabledForTest(boolean enabled) {
        synchronized (this) {
            mForceIdle = enabled;
        }
    }

    /** Sanity check to make sure DeviceIdleController and AlarmManager are on the same page. */
    @GuardedBy("this")
    private void verifyAlarmStateLocked() {
+27 −0
Original line number Diff line number Diff line
@@ -589,6 +589,33 @@ public class DeviceIdleControllerTest {
        assertFalse(mDeviceIdleController.isQuickDozeEnabled());
    }

    @Test
    public void testStateUnchanged_QuickDozeOn_ForceIdleOn() {
        enterDeepState(STATE_ACTIVE);
        mDeviceIdleController.setForceIdleEnabledForTest(true);
        setQuickDozeEnabled(true);
        setChargingOn(false);
        setScreenOn(false);
        verifyStateConditions(STATE_ACTIVE);
        assertTrue(mDeviceIdleController.isQuickDozeEnabled());
    }

    @Test
    public void testStateActiveToStateQuickDozeDelay_ForceIdleOff() {
        setAlarmSoon(false);
        InOrder inOrder = inOrder(mDeviceIdleController);

        enterDeepState(STATE_ACTIVE);
        mDeviceIdleController.setForceIdleEnabledForTest(false);
        setQuickDozeEnabled(true);
        setChargingOn(false);
        setScreenOn(false);
        verifyStateConditions(STATE_QUICK_DOZE_DELAY);
        assertTrue(mDeviceIdleController.isQuickDozeEnabled());
        inOrder.verify(mDeviceIdleController)
                .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT));
    }

    @Test
    public void testStateActiveToStateInactive_ConditionsNotMet() {
        mDeviceIdleController.becomeActiveLocked("testing", 0);