diff options
| author | 2025-01-08 08:16:58 -0800 | |
|---|---|---|
| committer | 2025-01-08 14:57:33 -0500 | |
| commit | f57b541662c38a308da24d0c2aa7099045ffc0e6 (patch) | |
| tree | 622cd612ae3b1bee869be6353dea0de789a90222 | |
| parent | 8949f5c0b99235b52230a34bc6e3d478b321f177 (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
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); |