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

Commit e5b1fe7a authored by Matías Hernández's avatar Matías Hernández Committed by Android (Google) Code Review
Browse files

Merge "Fix default zen config to be up to date according to enabled flags" into main

parents a052fb79 3218427d
Loading
Loading
Loading
Loading
+30 −13
Original line number Diff line number Diff line
@@ -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);
@@ -1073,7 +1071,7 @@ public class ZenModeHelper {
    }

    void updateZenRulesOnLocaleChange() {
        updateDefaultConfigAutomaticRules();
        updateRuleStringsForCurrentLocale(mContext, mDefaultConfig);
        synchronized (mConfigLock) {
            if (mConfig == null) {
                return;
@@ -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();
            }
+48 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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();