summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lucas Silva <lusilva@google.com> 2025-01-08 08:16:58 -0800
committer Lucas Silva <lusilva@google.com> 2025-01-08 14:57:33 -0500
commitf57b541662c38a308da24d0c2aa7099045ffc0e6 (patch)
tree622cd612ae3b1bee869be6353dea0de789a90222
parent8949f5c0b99235b52230a34bc6e3d478b321f177 (diff)
Add postured dream setting
This adds a new entry into the dream settings for 'While stationary and upright'. When this is enabled, dreams will be activated when the device is stationary and upright. Bug: 383208131 Test: locally - mp droid and verified entry shows up in settings UI and writes to Settings.Secure correctly Flag: android.service.dreams.allow_dream_when_postured Change-Id: Id38d5a6fc121be36a16d4bdfc6c40fcc59e3c085
-rw-r--r--core/java/android/service/dreams/flags.aconfig7
-rw-r--r--core/proto/android/providers/settings/secure.proto1
-rw-r--r--core/res/res/values/config.xml3
-rw-r--r--core/res/res/values/symbols.xml1
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/dream/DreamBackend.java58
-rw-r--r--packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java1
-rw-r--r--packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java1
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java3
8 files changed, 67 insertions, 8 deletions
diff --git a/core/java/android/service/dreams/flags.aconfig b/core/java/android/service/dreams/flags.aconfig
index dfc11dcb5427..d3a230d1335d 100644
--- a/core/java/android/service/dreams/flags.aconfig
+++ b/core/java/android/service/dreams/flags.aconfig
@@ -77,3 +77,10 @@ flag {
purpose: PURPOSE_BUGFIX
}
}
+
+flag {
+ name: "allow_dream_when_postured"
+ namespace: "systemui"
+ description: "Allow dreaming when device is stationary and upright"
+ bug: "383208131"
+}
diff --git a/core/proto/android/providers/settings/secure.proto b/core/proto/android/providers/settings/secure.proto
index 4f7ba9388a1d..5d0b340ac839 100644
--- a/core/proto/android/providers/settings/secure.proto
+++ b/core/proto/android/providers/settings/secure.proto
@@ -580,6 +580,7 @@ message SecureSettingsProto {
optional SettingProto activate_on_dock = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
optional SettingProto activate_on_sleep = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
optional SettingProto default_component = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto activate_on_postured = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
}
optional Screensaver screensaver = 47;
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index ce9a0c636d62..e14cffd72b0c 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -2766,6 +2766,9 @@
<bool name="config_dreamsActivatedOnDockByDefault">true</bool>
<!-- If supported and enabled, are dreams activated when asleep and charging? (by default) -->
<bool name="config_dreamsActivatedOnSleepByDefault">false</bool>
+ <!-- If supported and enabled, are dreams enabled while device is stationary and upright?
+ (by default) -->
+ <bool name="config_dreamsActivatedOnPosturedByDefault">false</bool>
<!-- ComponentName of the default dream (Settings.Secure.DEFAULT_SCREENSAVER_COMPONENT) -->
<string name="config_dreamsDefaultComponent" translatable="false">com.android.deskclock/com.android.deskclock.Screensaver</string>
<!-- ComponentNames of the dreams that we should hide -->
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index f89ca44cce30..de6cefec3f63 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2330,6 +2330,7 @@
<java-symbol type="bool" name="config_dreamsEnabledOnBattery" />
<java-symbol type="bool" name="config_dreamsActivatedOnDockByDefault" />
<java-symbol type="bool" name="config_dreamsActivatedOnSleepByDefault" />
+ <java-symbol type="bool" name="config_dreamsActivatedOnPosturedByDefault" />
<java-symbol type="integer" name="config_dreamsBatteryLevelMinimumWhenPowered" />
<java-symbol type="integer" name="config_dreamsBatteryLevelMinimumWhenNotPowered" />
<java-symbol type="integer" name="config_dreamsBatteryLevelDrainCutoff" />
diff --git a/packages/SettingsLib/src/com/android/settingslib/dream/DreamBackend.java b/packages/SettingsLib/src/com/android/settingslib/dream/DreamBackend.java
index dc40304ba24a..51259e2f311d 100644
--- a/packages/SettingsLib/src/com/android/settingslib/dream/DreamBackend.java
+++ b/packages/SettingsLib/src/com/android/settingslib/dream/DreamBackend.java
@@ -16,6 +16,8 @@
package com.android.settingslib.dream;
+import static android.service.dreams.Flags.allowDreamWhenPostured;
+
import android.annotation.IntDef;
import android.content.ComponentName;
import android.content.Context;
@@ -78,14 +80,21 @@ public class DreamBackend {
}
@Retention(RetentionPolicy.SOURCE)
- @IntDef({WHILE_CHARGING, WHILE_DOCKED, EITHER, NEVER})
+ @IntDef({
+ WHILE_CHARGING,
+ WHILE_DOCKED,
+ WHILE_POSTURED,
+ WHILE_CHARGING_OR_DOCKED,
+ NEVER
+ })
public @interface WhenToDream {
}
public static final int WHILE_CHARGING = 0;
public static final int WHILE_DOCKED = 1;
- public static final int EITHER = 2;
- public static final int NEVER = 3;
+ public static final int WHILE_POSTURED = 2;
+ public static final int WHILE_CHARGING_OR_DOCKED = 3;
+ public static final int NEVER = 4;
/**
* The type of dream complications which can be provided by a
@@ -134,6 +143,8 @@ public class DreamBackend {
.DREAM_SETTING_CHANGED__WHEN_TO_DREAM__WHEN_TO_DREAM_WHILE_CHARGING_ONLY;
private static final int WHEN_TO_DREAM_DOCKED = FrameworkStatsLog
.DREAM_SETTING_CHANGED__WHEN_TO_DREAM__WHEN_TO_DREAM_WHILE_DOCKED_ONLY;
+ private static final int WHEN_TO_DREAM_POSTURED = FrameworkStatsLog
+ .DREAM_SETTING_CHANGED__WHEN_TO_DREAM__WHEN_TO_DREAM_WHILE_POSTURED_ONLY;
private static final int WHEN_TO_DREAM_CHARGING_OR_DOCKED = FrameworkStatsLog
.DREAM_SETTING_CHANGED__WHEN_TO_DREAM__WHEN_TO_DREAM_EITHER_CHARGING_OR_DOCKED;
@@ -143,6 +154,7 @@ public class DreamBackend {
private final boolean mDreamsEnabledByDefault;
private final boolean mDreamsActivatedOnSleepByDefault;
private final boolean mDreamsActivatedOnDockByDefault;
+ private final boolean mDreamsActivatedOnPosturedByDefault;
private final Set<ComponentName> mDisabledDreams;
private final List<String> mLoggableDreamPrefixes;
private Set<Integer> mSupportedComplications;
@@ -168,6 +180,8 @@ public class DreamBackend {
com.android.internal.R.bool.config_dreamsActivatedOnSleepByDefault);
mDreamsActivatedOnDockByDefault = resources.getBoolean(
com.android.internal.R.bool.config_dreamsActivatedOnDockByDefault);
+ mDreamsActivatedOnPosturedByDefault = resources.getBoolean(
+ com.android.internal.R.bool.config_dreamsActivatedOnPosturedByDefault);
mDisabledDreams = Arrays.stream(resources.getStringArray(
com.android.internal.R.array.config_disabledDreamComponents))
.map(ComponentName::unflattenFromString)
@@ -280,10 +294,11 @@ public class DreamBackend {
@WhenToDream
public int getWhenToDreamSetting() {
- return isActivatedOnDock() && isActivatedOnSleep() ? EITHER
+ return isActivatedOnDock() && isActivatedOnSleep() ? WHILE_CHARGING_OR_DOCKED
: isActivatedOnDock() ? WHILE_DOCKED
- : isActivatedOnSleep() ? WHILE_CHARGING
- : NEVER;
+ : isActivatedOnPostured() ? WHILE_POSTURED
+ : isActivatedOnSleep() ? WHILE_CHARGING
+ : NEVER;
}
public void setWhenToDream(@WhenToDream int whenToDream) {
@@ -293,16 +308,25 @@ public class DreamBackend {
case WHILE_CHARGING:
setActivatedOnDock(false);
setActivatedOnSleep(true);
+ setActivatedOnPostured(false);
break;
case WHILE_DOCKED:
setActivatedOnDock(true);
setActivatedOnSleep(false);
+ setActivatedOnPostured(false);
break;
- case EITHER:
+ case WHILE_CHARGING_OR_DOCKED:
setActivatedOnDock(true);
setActivatedOnSleep(true);
+ setActivatedOnPostured(false);
+ break;
+
+ case WHILE_POSTURED:
+ setActivatedOnPostured(true);
+ setActivatedOnSleep(false);
+ setActivatedOnDock(false);
break;
case NEVER:
@@ -407,6 +431,22 @@ public class DreamBackend {
setBoolean(Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, value);
}
+ public boolean isActivatedOnPostured() {
+ return allowDreamWhenPostured()
+ && getBoolean(Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED,
+ mDreamsActivatedOnPosturedByDefault);
+ }
+
+ /**
+ * Sets whether dreams should be activated when the device is postured (stationary and upright)
+ */
+ public void setActivatedOnPostured(boolean value) {
+ if (allowDreamWhenPostured()) {
+ logd("setActivatedOnPostured(%s)", value);
+ setBoolean(Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED, value);
+ }
+ }
+
private boolean getBoolean(String key, boolean def) {
return Settings.Secure.getInt(mContext.getContentResolver(), key, def ? 1 : 0) == 1;
}
@@ -548,7 +588,9 @@ public class DreamBackend {
return WHEN_TO_DREAM_CHARGING;
case WHILE_DOCKED:
return WHEN_TO_DREAM_DOCKED;
- case EITHER:
+ case WHILE_POSTURED:
+ return WHEN_TO_DREAM_POSTURED;
+ case WHILE_CHARGING_OR_DOCKED:
return WHEN_TO_DREAM_CHARGING_OR_DOCKED;
case NEVER:
default:
diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
index dd28402d705f..7b4a2ca5de39 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
@@ -155,6 +155,7 @@ public class SecureSettings {
Settings.Secure.SCREENSAVER_COMPONENTS,
Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK,
Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP,
+ Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED,
Settings.Secure.SCREENSAVER_HOME_CONTROLS_ENABLED,
Settings.Secure.SHOW_FIRST_CRASH_DIALOG_DEV_OPTION,
Settings.Secure.VOLUME_DIALOG_DISMISS_TIMEOUT,
diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
index b01f6229af16..b0309a8fa5a5 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
@@ -230,6 +230,7 @@ public class SecureSettingsValidators {
VALIDATORS.put(Secure.SCREENSAVER_COMPONENTS, COMMA_SEPARATED_COMPONENT_LIST_VALIDATOR);
VALIDATORS.put(Secure.SCREENSAVER_ACTIVATE_ON_DOCK, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, BOOLEAN_VALIDATOR);
+ VALIDATORS.put(Secure.SCREENSAVER_ACTIVATE_ON_POSTURED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.SCREENSAVER_HOME_CONTROLS_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.SHOW_FIRST_CRASH_DIALOG_DEV_OPTION, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.VOLUME_DIALOG_DISMISS_TIMEOUT, NON_NEGATIVE_INTEGER_VALIDATOR);
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
index 5ad4b8a6dffe..1c6d6816e9b4 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
@@ -2550,6 +2550,9 @@ class SettingsProtoDumpUtil {
dumpSetting(s, p,
Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT,
SecureSettingsProto.Screensaver.DEFAULT_COMPONENT);
+ dumpSetting(s, p,
+ Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED,
+ SecureSettingsProto.Screensaver.ACTIVATE_ON_POSTURED);
p.end(screensaverToken);
final long searchToken = p.start(SecureSettingsProto.SEARCH);