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

Commit 3dd436a5 authored by Lucas Silva's avatar Lucas Silva
Browse files

Do not wake the device if an activity starts while dozing.

Currently, if the dream wakes without any user activity, the screen will
turn off. We therefore swap to using requestAwakenInternal, which will
keep the screen on by triggering a user activity.

CTS tests disable dozing, so this is hard to verify in dream cts tests. Looks like we don't have good coverage for doze service.

Bug: 231521765
Test: manually on device
Test: atest DreamManagerServiceTestsi

Change-Id: I23ac50fded164377ef8b5ea28fb030f4312bbb3d
parent 5c23d029
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -124,8 +124,10 @@ public final class DreamManagerService extends SystemService {
                    final boolean activityAllowed = activityType == ACTIVITY_TYPE_HOME
                            || activityType == ACTIVITY_TYPE_DREAM
                            || activityType == ACTIVITY_TYPE_ASSISTANT;
                    if (mCurrentDreamToken != null && !mCurrentDreamIsWaking && !activityAllowed) {
                        stopDreamInternal(false, "activity starting: " + activityInfo.name);
                    if (mCurrentDreamToken != null && !mCurrentDreamIsWaking
                            && !mCurrentDreamIsDozing && !activityAllowed) {
                        requestAwakenInternal(
                                "stopping dream due to activity start: " + activityInfo.name);
                    }
                }
            };
@@ -229,13 +231,13 @@ public final class DreamManagerService extends SystemService {
        mPowerManager.nap(time);
    }

    private void requestAwakenInternal() {
    private void requestAwakenInternal(String reason) {
        // Treat an explicit request to awaken as user activity so that the
        // device doesn't immediately go to sleep if the timeout expired,
        // for example when being undocked.
        long time = SystemClock.uptimeMillis();
        mPowerManager.userActivity(time, false /*noChangeLights*/);
        stopDreamInternal(false /*immediate*/, "request awaken");
        stopDreamInternal(false /*immediate*/, reason);
    }

    private void finishSelfInternal(IBinder token, boolean immediate) {
@@ -715,7 +717,7 @@ public final class DreamManagerService extends SystemService {

            final long ident = Binder.clearCallingIdentity();
            try {
                requestAwakenInternal();
                requestAwakenInternal("request awaken");
            } finally {
                Binder.restoreCallingIdentity(ident);
            }