Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 789f0520 authored by Will's avatar Will
Browse files

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
parent 9e7f234b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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>
+1 −0
Original line number Diff line number Diff line
@@ -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" />
+13 −0
Original line number Diff line number Diff line
@@ -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,