From 316e02f3a825ccda1f6ff3a0f9fabd42728753c6 Mon Sep 17 00:00:00 2001 From: Darrell Shi Date: Fri, 24 Feb 2023 00:32:44 +0000 Subject: [PATCH 1/2] DO NOT MERGE Revert "DO NOT MERGE Revert "Handle dream restart"" This reverts commit 36acacd2a077d216c67337ba7823707af132fee6. Reason for revert: reland this with fix for b/270178573 Fix: 265110360 Fix: 260205205 Change-Id: I0eaa29021b4f8ffeb572877e5ecefbf5f1b4dd18 --- .../android/server/dreams/DreamController.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/dreams/DreamController.java b/services/core/java/com/android/server/dreams/DreamController.java index f74356debd0f0..97ab58764e1e5 100644 --- a/services/core/java/com/android/server/dreams/DreamController.java +++ b/services/core/java/com/android/server/dreams/DreamController.java @@ -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, From 01c6a7af31831601d6affddeae5ddef44336630e Mon Sep 17 00:00:00 2001 From: Galia Peycheva Date: Wed, 22 Feb 2023 15:00:07 +0000 Subject: [PATCH 2/2] Add oldDream to mPreviousDreams always when dreams overlap Bug: 270178573 Test: start dream; press power button; wake up device; start dream; ensure dream starts Change-Id: Ie601d2b4303340f89001265ba685ae97ee7fd6d8 --- .../java/com/android/server/dreams/DreamController.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/dreams/DreamController.java b/services/core/java/com/android/server/dreams/DreamController.java index 97ab58764e1e5..ccab7bc9f31d3 100644 --- a/services/core/java/com/android/server/dreams/DreamController.java +++ b/services/core/java/com/android/server/dreams/DreamController.java @@ -123,15 +123,14 @@ final class DreamController { 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)) { + 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); + } else { + mPreviousDreams.add(oldDream); } }