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

Commit 316e02f3 authored by Darrell Shi's avatar Darrell Shi
Browse files

DO NOT MERGE Revert "DO NOT MERGE Revert "Handle dream restart""

This reverts commit 36acacd2.

Reason for revert: reland this with fix for b/270178573

Fix: 265110360
Fix: 260205205

Change-Id: I0eaa29021b4f8ffeb572877e5ecefbf5f1b4dd18
parent aef78d6f
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Objects;

/**
 * Internal controller for starting and stopping the current dream and managing related state.
@@ -119,10 +120,20 @@ final class DreamController {
                    + ", isPreviewMode=" + isPreviewMode + ", canDoze=" + canDoze
                    + ", userId=" + userId + ", reason='" + reason + "'");

            if (mCurrentDream != null) {
                mPreviousDreams.add(mCurrentDream);
            }
            final DreamRecord oldDream = mCurrentDream;
            mCurrentDream = new DreamRecord(token, name, isPreviewMode, canDoze, userId, wakeLock);
            if (oldDream != null) {
                if (!oldDream.mWakingGently) {
                    // We will stop these previous dreams once the new dream is started.
                    mPreviousDreams.add(oldDream);
                } else if (Objects.equals(oldDream.mName, mCurrentDream.mName)) {
                    // We are attempting to start a dream that is currently waking up gently.
                    // Let's silently stop the old instance here to clear the dream state.
                    // This should happen after the new mCurrentDream is set to avoid announcing
                    // a "dream stopped" state.
                    stopDreamInstance(/* immediately */ true, "restarting same dream", oldDream);
                }
            }

            mCurrentDream.mDreamStartTime = SystemClock.elapsedRealtime();
            MetricsLogger.visible(mContext,