Loading services/core/java/com/android/server/notification/ZenModeHelper.java +30 −13 Original line number Diff line number Diff line Loading @@ -226,10 +226,8 @@ public class ZenModeHelper { mDefaultConfig = Flags.modesUi() ? ZenModeConfig.getDefaultConfig() : readDefaultConfig(mContext.getResources()); updateDefaultConfigAutomaticRules(); if (Flags.modesApi()) { updateDefaultAutomaticRulePolicies(); } updateDefaultConfig(mContext, mDefaultConfig); mConfig = mDefaultConfig.copy(); synchronized (mConfigsArrayLock) { mConfigs.put(UserHandle.USER_SYSTEM, mConfig); Loading Loading @@ -1073,7 +1071,7 @@ public class ZenModeHelper { } void updateZenRulesOnLocaleChange() { updateDefaultConfigAutomaticRules(); updateRuleStringsForCurrentLocale(mContext, mDefaultConfig); synchronized (mConfigLock) { if (mConfig == null) { return; Loading Loading @@ -2229,30 +2227,49 @@ public class ZenModeHelper { } } private void updateDefaultConfigAutomaticRules() { for (ZenRule rule : mDefaultConfig.automaticRules.values()) { /** * Apply changes to the <em>default</em> {@link ZenModeConfig} so that the rules included by * default (Events / Sleeping) support the latest Zen features and are ready for new users. * * <p>This includes: setting a fully populated ZenPolicy, setting correct type and * allowManualInvocation=true, and ensuring default names and trigger descriptions correspond * to the current locale. */ private static void updateDefaultConfig(Context context, ZenModeConfig defaultConfig) { if (Flags.modesApi()) { updateDefaultAutomaticRulePolicies(defaultConfig); } if (Flags.modesApi() && Flags.modesUi()) { SystemZenRules.maybeUpgradeRules(context, defaultConfig); } updateRuleStringsForCurrentLocale(context, defaultConfig); } private static void updateRuleStringsForCurrentLocale(Context context, ZenModeConfig defaultConfig) { for (ZenRule rule : defaultConfig.automaticRules.values()) { if (ZenModeConfig.EVENTS_DEFAULT_RULE_ID.equals(rule.id)) { rule.name = mContext.getResources() rule.name = context.getResources() .getString(R.string.zen_mode_default_events_name); } else if (ZenModeConfig.EVERY_NIGHT_DEFAULT_RULE_ID.equals(rule.id)) { rule.name = mContext.getResources() rule.name = context.getResources() .getString(R.string.zen_mode_default_every_night_name); } if (Flags.modesApi() && Flags.modesUi()) { SystemZenRules.updateTriggerDescription(mContext, rule); SystemZenRules.updateTriggerDescription(context, rule); } } } // Updates the policies in the default automatic rules (provided via default XML config) to // be fully filled in default values. private void updateDefaultAutomaticRulePolicies() { private static void updateDefaultAutomaticRulePolicies(ZenModeConfig defaultConfig) { if (!Flags.modesApi()) { // Should be checked before calling, but just in case. return; } ZenPolicy defaultPolicy = mDefaultConfig.getZenPolicy(); for (ZenRule rule : mDefaultConfig.automaticRules.values()) { ZenPolicy defaultPolicy = defaultConfig.getZenPolicy(); for (ZenRule rule : defaultConfig.automaticRules.values()) { if (ZenModeConfig.DEFAULT_RULE_IDS.contains(rule.id) && rule.zenPolicy == null) { rule.zenPolicy = defaultPolicy.copy(); } Loading services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java +48 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.server.notification; import static android.app.AutomaticZenRule.TYPE_BEDTIME; import static android.app.AutomaticZenRule.TYPE_IMMERSIVE; import static android.app.AutomaticZenRule.TYPE_SCHEDULE_CALENDAR; import static android.app.AutomaticZenRule.TYPE_UNKNOWN; import static android.app.Flags.FLAG_MODES_API; import static android.app.Flags.FLAG_MODES_UI; import static android.app.NotificationManager.AUTOMATIC_RULE_STATUS_ACTIVATED; Loading Loading @@ -6875,6 +6877,52 @@ public class ZenModeHelperTest extends UiServiceTestCase { "Didn't find rule with id %s", ruleId); } @Test @DisableFlags({FLAG_MODES_API, FLAG_MODES_UI}) public void testDefaultConfig_preModesApi_rulesAreBare() { // Create a new user, which should get a copy of the default policy. mZenModeHelper.onUserSwitched(101); ZenRule eventsRule = mZenModeHelper.mConfig.automaticRules.get( ZenModeConfig.EVENTS_DEFAULT_RULE_ID); assertThat(eventsRule).isNotNull(); assertThat(eventsRule.zenPolicy).isNull(); assertThat(eventsRule.type).isEqualTo(TYPE_UNKNOWN); assertThat(eventsRule.triggerDescription).isNull(); } @Test @EnableFlags(FLAG_MODES_API) @DisableFlags(FLAG_MODES_UI) public void testDefaultConfig_modesApi_rulesHaveFullPolicy() { // Create a new user, which should get a copy of the default policy. mZenModeHelper.onUserSwitched(201); ZenRule eventsRule = mZenModeHelper.mConfig.automaticRules.get( ZenModeConfig.EVENTS_DEFAULT_RULE_ID); assertThat(eventsRule).isNotNull(); assertThat(eventsRule.zenPolicy).isEqualTo(mZenModeHelper.getDefaultZenPolicy()); assertThat(eventsRule.type).isEqualTo(TYPE_UNKNOWN); assertThat(eventsRule.triggerDescription).isNull(); } @Test @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) public void testDefaultConfig_modesUi_rulesHaveFullPolicy() { // Create a new user, which should get a copy of the default policy. mZenModeHelper.onUserSwitched(301); ZenRule eventsRule = mZenModeHelper.mConfig.automaticRules.get( ZenModeConfig.EVENTS_DEFAULT_RULE_ID); assertThat(eventsRule).isNotNull(); assertThat(eventsRule.zenPolicy).isEqualTo(mZenModeHelper.getDefaultZenPolicy()); assertThat(eventsRule.type).isEqualTo(TYPE_SCHEDULE_CALENDAR); assertThat(eventsRule.triggerDescription).isNotEmpty(); } private static void addZenRule(ZenModeConfig config, String id, String ownerPkg, int zenMode, @Nullable ZenPolicy zenPolicy) { ZenRule rule = new ZenRule(); Loading Loading
services/core/java/com/android/server/notification/ZenModeHelper.java +30 −13 Original line number Diff line number Diff line Loading @@ -226,10 +226,8 @@ public class ZenModeHelper { mDefaultConfig = Flags.modesUi() ? ZenModeConfig.getDefaultConfig() : readDefaultConfig(mContext.getResources()); updateDefaultConfigAutomaticRules(); if (Flags.modesApi()) { updateDefaultAutomaticRulePolicies(); } updateDefaultConfig(mContext, mDefaultConfig); mConfig = mDefaultConfig.copy(); synchronized (mConfigsArrayLock) { mConfigs.put(UserHandle.USER_SYSTEM, mConfig); Loading Loading @@ -1073,7 +1071,7 @@ public class ZenModeHelper { } void updateZenRulesOnLocaleChange() { updateDefaultConfigAutomaticRules(); updateRuleStringsForCurrentLocale(mContext, mDefaultConfig); synchronized (mConfigLock) { if (mConfig == null) { return; Loading Loading @@ -2229,30 +2227,49 @@ public class ZenModeHelper { } } private void updateDefaultConfigAutomaticRules() { for (ZenRule rule : mDefaultConfig.automaticRules.values()) { /** * Apply changes to the <em>default</em> {@link ZenModeConfig} so that the rules included by * default (Events / Sleeping) support the latest Zen features and are ready for new users. * * <p>This includes: setting a fully populated ZenPolicy, setting correct type and * allowManualInvocation=true, and ensuring default names and trigger descriptions correspond * to the current locale. */ private static void updateDefaultConfig(Context context, ZenModeConfig defaultConfig) { if (Flags.modesApi()) { updateDefaultAutomaticRulePolicies(defaultConfig); } if (Flags.modesApi() && Flags.modesUi()) { SystemZenRules.maybeUpgradeRules(context, defaultConfig); } updateRuleStringsForCurrentLocale(context, defaultConfig); } private static void updateRuleStringsForCurrentLocale(Context context, ZenModeConfig defaultConfig) { for (ZenRule rule : defaultConfig.automaticRules.values()) { if (ZenModeConfig.EVENTS_DEFAULT_RULE_ID.equals(rule.id)) { rule.name = mContext.getResources() rule.name = context.getResources() .getString(R.string.zen_mode_default_events_name); } else if (ZenModeConfig.EVERY_NIGHT_DEFAULT_RULE_ID.equals(rule.id)) { rule.name = mContext.getResources() rule.name = context.getResources() .getString(R.string.zen_mode_default_every_night_name); } if (Flags.modesApi() && Flags.modesUi()) { SystemZenRules.updateTriggerDescription(mContext, rule); SystemZenRules.updateTriggerDescription(context, rule); } } } // Updates the policies in the default automatic rules (provided via default XML config) to // be fully filled in default values. private void updateDefaultAutomaticRulePolicies() { private static void updateDefaultAutomaticRulePolicies(ZenModeConfig defaultConfig) { if (!Flags.modesApi()) { // Should be checked before calling, but just in case. return; } ZenPolicy defaultPolicy = mDefaultConfig.getZenPolicy(); for (ZenRule rule : mDefaultConfig.automaticRules.values()) { ZenPolicy defaultPolicy = defaultConfig.getZenPolicy(); for (ZenRule rule : defaultConfig.automaticRules.values()) { if (ZenModeConfig.DEFAULT_RULE_IDS.contains(rule.id) && rule.zenPolicy == null) { rule.zenPolicy = defaultPolicy.copy(); } Loading
services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java +48 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.server.notification; import static android.app.AutomaticZenRule.TYPE_BEDTIME; import static android.app.AutomaticZenRule.TYPE_IMMERSIVE; import static android.app.AutomaticZenRule.TYPE_SCHEDULE_CALENDAR; import static android.app.AutomaticZenRule.TYPE_UNKNOWN; import static android.app.Flags.FLAG_MODES_API; import static android.app.Flags.FLAG_MODES_UI; import static android.app.NotificationManager.AUTOMATIC_RULE_STATUS_ACTIVATED; Loading Loading @@ -6875,6 +6877,52 @@ public class ZenModeHelperTest extends UiServiceTestCase { "Didn't find rule with id %s", ruleId); } @Test @DisableFlags({FLAG_MODES_API, FLAG_MODES_UI}) public void testDefaultConfig_preModesApi_rulesAreBare() { // Create a new user, which should get a copy of the default policy. mZenModeHelper.onUserSwitched(101); ZenRule eventsRule = mZenModeHelper.mConfig.automaticRules.get( ZenModeConfig.EVENTS_DEFAULT_RULE_ID); assertThat(eventsRule).isNotNull(); assertThat(eventsRule.zenPolicy).isNull(); assertThat(eventsRule.type).isEqualTo(TYPE_UNKNOWN); assertThat(eventsRule.triggerDescription).isNull(); } @Test @EnableFlags(FLAG_MODES_API) @DisableFlags(FLAG_MODES_UI) public void testDefaultConfig_modesApi_rulesHaveFullPolicy() { // Create a new user, which should get a copy of the default policy. mZenModeHelper.onUserSwitched(201); ZenRule eventsRule = mZenModeHelper.mConfig.automaticRules.get( ZenModeConfig.EVENTS_DEFAULT_RULE_ID); assertThat(eventsRule).isNotNull(); assertThat(eventsRule.zenPolicy).isEqualTo(mZenModeHelper.getDefaultZenPolicy()); assertThat(eventsRule.type).isEqualTo(TYPE_UNKNOWN); assertThat(eventsRule.triggerDescription).isNull(); } @Test @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) public void testDefaultConfig_modesUi_rulesHaveFullPolicy() { // Create a new user, which should get a copy of the default policy. mZenModeHelper.onUserSwitched(301); ZenRule eventsRule = mZenModeHelper.mConfig.automaticRules.get( ZenModeConfig.EVENTS_DEFAULT_RULE_ID); assertThat(eventsRule).isNotNull(); assertThat(eventsRule.zenPolicy).isEqualTo(mZenModeHelper.getDefaultZenPolicy()); assertThat(eventsRule.type).isEqualTo(TYPE_SCHEDULE_CALENDAR); assertThat(eventsRule.triggerDescription).isNotEmpty(); } private static void addZenRule(ZenModeConfig config, String id, String ownerPkg, int zenMode, @Nullable ZenPolicy zenPolicy) { ZenRule rule = new ZenRule(); Loading