diff options
| -rw-r--r-- | core/java/android/service/dreams/IDreamManager.aidl | 2 | ||||
| -rw-r--r-- | services/core/java/com/android/server/dreams/DreamManagerService.java | 21 |
2 files changed, 23 insertions, 0 deletions
diff --git a/core/java/android/service/dreams/IDreamManager.aidl b/core/java/android/service/dreams/IDreamManager.aidl index 3e0deeb556e9..53ae6576ef95 100644 --- a/core/java/android/service/dreams/IDreamManager.aidl +++ b/core/java/android/service/dreams/IDreamManager.aidl @@ -35,6 +35,8 @@ interface IDreamManager { void testDream(int userId, in ComponentName componentName); @UnsupportedAppUsage boolean isDreaming(); + @UnsupportedAppUsage + boolean isDreamingOrInPreview(); void finishSelf(in IBinder token, boolean immediate); void startDozing(in IBinder token, int screenState, int screenBrightness); void stopDozing(in IBinder token); diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java index 7b60345caf87..4e0489a5c4bc 100644 --- a/services/core/java/com/android/server/dreams/DreamManagerService.java +++ b/services/core/java/com/android/server/dreams/DreamManagerService.java @@ -218,6 +218,7 @@ public final class DreamManagerService extends SystemService { }, pw, "", 200); } + /** Whether a real dream is occurring. */ private boolean isDreamingInternal() { synchronized (mLock) { return mCurrentDreamToken != null && !mCurrentDreamIsPreview @@ -225,6 +226,13 @@ public final class DreamManagerService extends SystemService { } } + /** Whether a real dream, or a dream preview is occurring. */ + private boolean isDreamingOrInPreviewInternal() { + synchronized (mLock) { + return mCurrentDreamToken != null && !mCurrentDreamIsWaking; + } + } + protected void requestStartDreamFromShell() { requestDreamInternal(); } @@ -695,6 +703,19 @@ public final class DreamManagerService extends SystemService { } @Override // Binder call + public boolean isDreamingOrInPreview() { + checkPermission(android.Manifest.permission.READ_DREAM_STATE); + + final long ident = Binder.clearCallingIdentity(); + try { + return isDreamingOrInPreviewInternal(); + } finally { + Binder.restoreCallingIdentity(ident); + } + } + + + @Override // Binder call public void dream() { checkPermission(android.Manifest.permission.WRITE_DREAM_STATE); |