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

Commit a0000994 authored by Xin Guan's avatar Xin Guan
Browse files

Don't fall through quick doze in force idle mode

Bug: 416297047
Bug: 415223966
Test: atest FrameworksMockingServicesTests:com.android.server.DeviceIdleControllerTest
Flag: EXEMPT test only
Change-Id: I3639dea70cdfd09c7a405a0531cd94ae7896169a
parent 3e3d5cd3
Loading
Loading
Loading
Loading
+13 −2
Original line number Original line Diff line number Diff line
@@ -3527,11 +3527,14 @@ public class DeviceIdleController extends SystemService
    @VisibleForTesting
    @VisibleForTesting
    @GuardedBy("this")
    @GuardedBy("this")
    void updateQuickDozeFlagLocked(boolean enabled) {
    void updateQuickDozeFlagLocked(boolean enabled) {
        if (DEBUG) Slog.i(TAG, "updateQuickDozeFlagLocked: enabled=" + enabled);
        if (DEBUG) {
            Slog.i(TAG, "updateQuickDozeFlagLocked: enabled=" + enabled
                    + ", mForceIdle=" + mForceIdle);
        }
        mQuickDozeActivated = enabled;
        mQuickDozeActivated = enabled;
        mQuickDozeActivatedWhileIdling =
        mQuickDozeActivatedWhileIdling =
                mQuickDozeActivated && (mState == STATE_IDLE || mState == STATE_IDLE_MAINTENANCE);
                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.
            // If Quick Doze is enabled, see if we should go straight into it.
            becomeInactiveIfAppropriateLocked();
            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. */
    /** Sanity check to make sure DeviceIdleController and AlarmManager are on the same page. */
    @GuardedBy("this")
    @GuardedBy("this")
    private void verifyAlarmStateLocked() {
    private void verifyAlarmStateLocked() {
+27 −0
Original line number Original line Diff line number Diff line
@@ -589,6 +589,33 @@ public class DeviceIdleControllerTest {
        assertFalse(mDeviceIdleController.isQuickDozeEnabled());
        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
    @Test
    public void testStateActiveToStateInactive_ConditionsNotMet() {
    public void testStateActiveToStateInactive_ConditionsNotMet() {
        mDeviceIdleController.becomeActiveLocked("testing", 0);
        mDeviceIdleController.becomeActiveLocked("testing", 0);