diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 60d875c2ca39a..05a742c4bc742 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -2403,6 +2403,8 @@
5
900000
+
+ false
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index dd69fa0bebb20..ba598ad0bdfff 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2216,6 +2216,7 @@
+
diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java
index 436c434ccbca7..f68d22acd6aba 100644
--- a/services/core/java/com/android/server/dreams/DreamManagerService.java
+++ b/services/core/java/com/android/server/dreams/DreamManagerService.java
@@ -92,6 +92,7 @@ public final class DreamManagerService extends SystemService {
private boolean mCurrentDreamIsDozing;
private boolean mCurrentDreamIsWaking;
private boolean mForceAmbientDisplayEnabled;
+ private boolean mDreamsOnlyEnabledForSystemUser;
private int mCurrentDreamDozeScreenState = Display.STATE_UNKNOWN;
private int mCurrentDreamDozeScreenBrightness = PowerManager.BRIGHTNESS_DEFAULT;
@@ -115,6 +116,8 @@ public final class DreamManagerService extends SystemService {
mContext.getResources().getString(R.string.config_loggable_dream_prefix));
AmbientDisplayConfiguration adc = new AmbientDisplayConfiguration(mContext);
mAmbientDisplayComponent = ComponentName.unflattenFromString(adc.ambientDisplayComponent());
+ mDreamsOnlyEnabledForSystemUser =
+ mContext.getResources().getBoolean(R.bool.config_dreamsOnlyEnabledForSystemUser);
}
@Override
@@ -156,6 +159,7 @@ public final class DreamManagerService extends SystemService {
pw.println("mCurrentDreamIsDozing=" + mCurrentDreamIsDozing);
pw.println("mCurrentDreamIsWaking=" + mCurrentDreamIsWaking);
pw.println("mForceAmbientDisplayEnabled=" + mForceAmbientDisplayEnabled);
+ pw.println("mDreamsOnlyEnabledForSystemUser=" + mDreamsOnlyEnabledForSystemUser);
pw.println("mCurrentDreamDozeScreenState="
+ Display.stateToString(mCurrentDreamDozeScreenState));
pw.println("mCurrentDreamDozeScreenBrightness=" + mCurrentDreamDozeScreenBrightness);
@@ -314,6 +318,11 @@ public final class DreamManagerService extends SystemService {
}
private ComponentName[] getDreamComponentsForUser(int userId) {
+ if (!dreamsEnabledForUser(userId)) {
+ // Don't return any dream components if the user is not allowed to dream.
+ return null;
+ }
+
String names = Settings.Secure.getStringForUser(mContext.getContentResolver(),
Settings.Secure.SCREENSAVER_COMPONENTS,
userId);
@@ -367,6 +376,10 @@ public final class DreamManagerService extends SystemService {
}
+ private boolean dreamsEnabledForUser(int userId) {
+ return !mDreamsOnlyEnabledForSystemUser || (userId == UserHandle.USER_SYSTEM);
+ }
+
private ServiceInfo getServiceInfo(ComponentName name) {
try {
return name != null ? mContext.getPackageManager().getServiceInfo(name,