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

Commit 1bcc5577 authored by Darrell Shi's avatar Darrell Shi
Browse files

Prevent dreaming when settings disabled

Previously after a reboot, the mDreamsActivateOnSleepSetting value is
set to the default which is true on some devices, leading to the device
trying to dream instead of doze. This change adds a check for dream
settings enabled, which is default to false.

Test: atest PowerManagerServiceTest
Test: no longer see trying to dream from logs after device restart
Fix: 436573884
Flag: android.service.dreams.nap_when_dream_enabled
Change-Id: Id5d1b399f3789b0f8c3286c89b5bc01fc212526c
parent 9f37a591
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -101,6 +101,16 @@ flag {
  is_fixed_read_only: true
}

flag {
    name: "nap_when_dream_enabled"
    namespace: "systemui"
    description: "Allows napping only when dream settings is enabled"
    bug: "436573884"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "allow_dream_with_charge_limit"
    namespace: "systemui"
+5 −3
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import static android.os.PowerManagerInternal.WAKEFULNESS_DREAMING;
import static android.os.PowerManagerInternal.wakefulnessToString;
import static android.service.dreams.Flags.allowDreamWhenPostured;
import static android.service.dreams.Flags.dreamsV2;
import static android.service.dreams.Flags.napWhenDreamEnabled;

import static com.android.internal.util.LatencyTracker.ACTION_TURN_ON_SCREEN;
import static com.android.server.deviceidle.Flags.disableWakelocksInLightIdle;
@@ -3517,7 +3518,7 @@ public final class PowerManagerService extends SystemService
        if (!powerGroup.supportsSandmanLocked()) {
            return false;
        }
        if (mDreamsActivateOnDockSetting
        if ((!napWhenDreamEnabled() || mDreamsEnabledSetting) && mDreamsActivateOnDockSetting
                && mDockState != Intent.EXTRA_DOCK_STATE_UNDOCKED) {
            return true;
        }
@@ -3528,8 +3529,9 @@ public final class PowerManagerService extends SystemService
            // charging.
            return false;
        }
        return mDreamsActivateOnSleepSetting
                || (mDreamsActivateWhilePosturedSetting && mDevicePostured);
        return (!napWhenDreamEnabled() || mDreamsEnabledSetting)
                && (mDreamsActivateOnSleepSetting
                        || (mDreamsActivateWhilePosturedSetting && mDevicePostured));
    }

    /**
+14 −0
Original line number Diff line number Diff line
@@ -3317,6 +3317,20 @@ public class PowerManagerServiceTest {
        assertThat(mService.getLocalServiceInstance().getLastWakeup()).isEqualTo(initialWakeData);
    }

    @EnableFlags(android.service.dreams.Flags.FLAG_NAP_WHEN_DREAM_ENABLED)
    @Test
    public void testCanDreamLocked_dreamsDisabled() {
        createService();
        startSystem();
        // Dreams are disabled.
        Settings.Secure.putIntForUser(mContextSpy.getContentResolver(),
                Settings.Secure.SCREENSAVER_ENABLED, 0, UserHandle.USER_CURRENT);
        mUserSwitchedReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_USER_SWITCHED));

        forceSleep();
        assertThat(mService.getGlobalWakefulnessLocked()).isNotEqualTo(WAKEFULNESS_DREAMING);
    }

    @Test
    public void testMultiDisplay_onlyOneDisplaySleeps_onWakefulnessChangedEventsFire() {
        createService();