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:
@@ -2403,6 +2403,8 @@
|
||||
<integer name="config_dreamsBatteryLevelDrainCutoff">5</integer>
|
||||
<!-- Limit of how long the device can remain unlocked due to attention checking. -->
|
||||
<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. -->
|
||||
<string name ="config_loggable_dream_prefix" translatable="false"></string>
|
||||
|
||||
@@ -2216,6 +2216,7 @@
|
||||
<java-symbol type="integer" name="config_dreamsBatteryLevelMinimumWhenNotPowered" />
|
||||
<java-symbol type="integer" name="config_dreamsBatteryLevelDrainCutoff" />
|
||||
<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_dreamComplicationsEnabledByDefault" />
|
||||
<java-symbol type="array" name="config_disabledDreamComponents" />
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user