diff options
| -rw-r--r-- | services/core/java/com/android/server/dreams/DreamController.java | 4 | ||||
| -rw-r--r-- | services/core/java/com/android/server/dreams/DreamManagerService.java | 12 |
2 files changed, 15 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/dreams/DreamController.java b/services/core/java/com/android/server/dreams/DreamController.java index db9deb1ceb69..f87a1461f9d2 100644 --- a/services/core/java/com/android/server/dreams/DreamController.java +++ b/services/core/java/com/android/server/dreams/DreamController.java @@ -244,7 +244,10 @@ final class DreamController { } mListener.onDreamStopped(dream.mToken); + } else if (dream.mCanDoze && !mCurrentDream.mCanDoze) { + mListener.stopDozing(dream.mToken); } + } finally { Trace.traceEnd(Trace.TRACE_TAG_POWER); } @@ -289,6 +292,7 @@ final class DreamController { */ public interface Listener { void onDreamStopped(Binder token); + void stopDozing(Binder token); } private final class DreamRecord implements DeathRecipient, ServiceConnection { diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java index bb1e3931c02e..148b80ea0447 100644 --- a/services/core/java/com/android/server/dreams/DreamManagerService.java +++ b/services/core/java/com/android/server/dreams/DreamManagerService.java @@ -499,7 +499,12 @@ public final class DreamManagerService extends SystemService { } synchronized (mLock) { - if (mCurrentDream != null && mCurrentDream.token == token && mCurrentDream.isDozing) { + if (mCurrentDream == null) { + return; + } + + final boolean sameDream = mCurrentDream.token == token; + if ((sameDream && mCurrentDream.isDozing) || (!sameDream && !mCurrentDream.isDozing)) { mCurrentDream.isDozing = false; mDozeWakeLock.release(); mPowerManagerInternal.setDozeOverrideFromDreamManager( @@ -765,6 +770,11 @@ public final class DreamManagerService extends SystemService { } } } + + @Override + public void stopDozing(Binder token) { + stopDozingInternal(token); + } }; private final ContentObserver mDozeEnabledObserver = new ContentObserver(null) { |