Add the ability to restrict dreams to the system user.

By default, this functionality is disabled.
Which means that all users should continue to
be able to start dreams.

Bug: 213906883
Test: Manually with the following steps:
Step 0: Have 2 or more users on the device. Enable screen saver in
display settings. Optionally set the screen timeout to 15 seconds for
faster dreaming.
Step 1: With the system user (the first user created) as the
selected user, allow the device to fall into a dream. Make sure the
dream appears. Switch to a different user. Allow the device to fall into
a dream. Verify that the device behaves the same way it would without
this change (depending on other configuration settings, it may or may
not dream, but this change itself does not prevent any user from
dreaming).
Step 2: To verify that this change does prevent non-system users from
dreaming, set the config_dreamsOnlyEnabledForSystemUser config value to
true in core/res/res/values/config.xml and push the change to a device.
Switch to a non-system user and allow the device to fall into a dream.
The device should not display a dream (and instead, should just display
a black screen).

Change-Id: I2fa7a16ee7c6250a7a3ac49e82bb4c8085451391
This commit is contained in:
Will
2022-03-04 15:20:06 -08:00
parent 9e7f234b10
commit 789f052027
3 changed files with 16 additions and 0 deletions

View File

@@ -2403,6 +2403,8 @@
<integer name="config_dreamsBatteryLevelDrainCutoff">5</integer> <integer name="config_dreamsBatteryLevelDrainCutoff">5</integer>
<!-- Limit of how long the device can remain unlocked due to attention checking. --> <!-- Limit of how long the device can remain unlocked due to attention checking. -->
<integer name="config_attentionMaximumExtension">900000</integer> <!-- 15 minutes. --> <integer name="config_attentionMaximumExtension">900000</integer> <!-- 15 minutes. -->
<!-- Is the system user the only user allowed to dream. -->
<bool name="config_dreamsOnlyEnabledForSystemUser">false</bool>
<!-- The prefix of dream component names that are loggable. If empty, logs "other" for all. --> <!-- The prefix of dream component names that are loggable. If empty, logs "other" for all. -->
<string name ="config_loggable_dream_prefix" translatable="false"></string> <string name ="config_loggable_dream_prefix" translatable="false"></string>

View File

@@ -2216,6 +2216,7 @@
<java-symbol type="integer" name="config_dreamsBatteryLevelMinimumWhenNotPowered" /> <java-symbol type="integer" name="config_dreamsBatteryLevelMinimumWhenNotPowered" />
<java-symbol type="integer" name="config_dreamsBatteryLevelDrainCutoff" /> <java-symbol type="integer" name="config_dreamsBatteryLevelDrainCutoff" />
<java-symbol type="string" name="config_dreamsDefaultComponent" /> <java-symbol type="string" name="config_dreamsDefaultComponent" />
<java-symbol type="bool" name="config_dreamsOnlyEnabledForSystemUser" />
<java-symbol type="array" name="config_supportedDreamComplications" /> <java-symbol type="array" name="config_supportedDreamComplications" />
<java-symbol type="array" name="config_dreamComplicationsEnabledByDefault" /> <java-symbol type="array" name="config_dreamComplicationsEnabledByDefault" />
<java-symbol type="array" name="config_disabledDreamComponents" /> <java-symbol type="array" name="config_disabledDreamComponents" />

View File

@@ -92,6 +92,7 @@ public final class DreamManagerService extends SystemService {
private boolean mCurrentDreamIsDozing; private boolean mCurrentDreamIsDozing;
private boolean mCurrentDreamIsWaking; private boolean mCurrentDreamIsWaking;
private boolean mForceAmbientDisplayEnabled; private boolean mForceAmbientDisplayEnabled;
private boolean mDreamsOnlyEnabledForSystemUser;
private int mCurrentDreamDozeScreenState = Display.STATE_UNKNOWN; private int mCurrentDreamDozeScreenState = Display.STATE_UNKNOWN;
private int mCurrentDreamDozeScreenBrightness = PowerManager.BRIGHTNESS_DEFAULT; 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)); mContext.getResources().getString(R.string.config_loggable_dream_prefix));
AmbientDisplayConfiguration adc = new AmbientDisplayConfiguration(mContext); AmbientDisplayConfiguration adc = new AmbientDisplayConfiguration(mContext);
mAmbientDisplayComponent = ComponentName.unflattenFromString(adc.ambientDisplayComponent()); mAmbientDisplayComponent = ComponentName.unflattenFromString(adc.ambientDisplayComponent());
mDreamsOnlyEnabledForSystemUser =
mContext.getResources().getBoolean(R.bool.config_dreamsOnlyEnabledForSystemUser);
} }
@Override @Override
@@ -156,6 +159,7 @@ public final class DreamManagerService extends SystemService {
pw.println("mCurrentDreamIsDozing=" + mCurrentDreamIsDozing); pw.println("mCurrentDreamIsDozing=" + mCurrentDreamIsDozing);
pw.println("mCurrentDreamIsWaking=" + mCurrentDreamIsWaking); pw.println("mCurrentDreamIsWaking=" + mCurrentDreamIsWaking);
pw.println("mForceAmbientDisplayEnabled=" + mForceAmbientDisplayEnabled); pw.println("mForceAmbientDisplayEnabled=" + mForceAmbientDisplayEnabled);
pw.println("mDreamsOnlyEnabledForSystemUser=" + mDreamsOnlyEnabledForSystemUser);
pw.println("mCurrentDreamDozeScreenState=" pw.println("mCurrentDreamDozeScreenState="
+ Display.stateToString(mCurrentDreamDozeScreenState)); + Display.stateToString(mCurrentDreamDozeScreenState));
pw.println("mCurrentDreamDozeScreenBrightness=" + mCurrentDreamDozeScreenBrightness); pw.println("mCurrentDreamDozeScreenBrightness=" + mCurrentDreamDozeScreenBrightness);
@@ -314,6 +318,11 @@ public final class DreamManagerService extends SystemService {
} }
private ComponentName[] getDreamComponentsForUser(int userId) { 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(), String names = Settings.Secure.getStringForUser(mContext.getContentResolver(),
Settings.Secure.SCREENSAVER_COMPONENTS, Settings.Secure.SCREENSAVER_COMPONENTS,
userId); 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) { private ServiceInfo getServiceInfo(ComponentName name) {
try { try {
return name != null ? mContext.getPackageManager().getServiceInfo(name, return name != null ? mContext.getPackageManager().getServiceInfo(name,