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

Commit b932945b authored by Matías Hernández's avatar Matías Hernández
Browse files

Don't add the "Events" mode anymore, and delete it if disabled

Fixes: 368227085
Test: atest ZenModeHelperTest
Flag: android.app.modes_ui
Change-Id: I69ef0e6d5a161c52a0afb3e07e84969b9bdd3832
parent 30c37da0
Loading
Loading
Loading
Loading
+9 −15
Original line number Diff line number Diff line
@@ -202,10 +202,8 @@ public class ZenModeConfig implements Parcelable {
    private static final int DEFAULT_CALLS_SOURCE = SOURCE_STAR;

    public static final String MANUAL_RULE_ID = "MANUAL_RULE";
    public static final String EVENTS_DEFAULT_RULE_ID = "EVENTS_DEFAULT_RULE";
    public static final String EVENTS_OBSOLETE_RULE_ID = "EVENTS_DEFAULT_RULE";
    public static final String EVERY_NIGHT_DEFAULT_RULE_ID = "EVERY_NIGHT_DEFAULT_RULE";
    public static final List<String> DEFAULT_RULE_IDS = Arrays.asList(EVERY_NIGHT_DEFAULT_RULE_ID,
            EVENTS_DEFAULT_RULE_ID);

    public static final int[] ALL_DAYS = { Calendar.SUNDAY, Calendar.MONDAY, Calendar.TUESDAY,
            Calendar.WEDNESDAY, Calendar.THURSDAY, Calendar.FRIDAY, Calendar.SATURDAY };
@@ -424,21 +422,10 @@ public class ZenModeConfig implements Parcelable {
        return policy;
    }

    @FlaggedApi(Flags.FLAG_MODES_UI)
    public static ZenModeConfig getDefaultConfig() {
        ZenModeConfig config = new ZenModeConfig();

        EventInfo eventInfo = new EventInfo();
        eventInfo.reply = REPLY_YES_OR_MAYBE;
        ZenRule events = new ZenRule();
        events.id = EVENTS_DEFAULT_RULE_ID;
        events.conditionId = toEventConditionId(eventInfo);
        events.component = ComponentName.unflattenFromString(
                "android/com.android.server.notification.EventConditionProvider");
        events.enabled = false;
        events.zenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS;
        events.pkg = "android";
        config.automaticRules.put(EVENTS_DEFAULT_RULE_ID, events);

        ScheduleInfo scheduleInfo = new ScheduleInfo();
        scheduleInfo.days = new int[] {1, 2, 3, 4, 5, 6, 7};
        scheduleInfo.startHour = 22;
@@ -457,6 +444,13 @@ public class ZenModeConfig implements Parcelable {
        return config;
    }

    // TODO: b/368247671 - Can be made a constant again when modes_ui is inlined
    public static List<String> getDefaultRuleIds() {
        return Flags.modesUi()
            ? List.of(EVERY_NIGHT_DEFAULT_RULE_ID)
            : List.of(EVERY_NIGHT_DEFAULT_RULE_ID, EVENTS_OBSOLETE_RULE_ID);
    }

    void ensureManualZenRule() {
        if (manualRule == null) {
            final ZenRule newRule = new ZenRule();
+12 −4
Original line number Diff line number Diff line
@@ -1722,7 +1722,7 @@ public class ZenModeHelper {
            // booleans to determine whether to reset the rules to the default rules
            boolean allRulesDisabled = true;
            boolean hasDefaultRules = config.automaticRules.containsAll(
                    ZenModeConfig.DEFAULT_RULE_IDS);
                    ZenModeConfig.getDefaultRuleIds());

            long time = Flags.modesApi() ? mClock.millis() : System.currentTimeMillis();
            if (config.automaticRules != null && config.automaticRules.size() > 0) {
@@ -1799,6 +1799,14 @@ public class ZenModeHelper {
                config.deletedRules.clear();
            }

            if (Flags.modesUi() && config.automaticRules != null) {
                ZenRule obsoleteEventsRule = config.automaticRules.get(
                        ZenModeConfig.EVENTS_OBSOLETE_RULE_ID);
                if (obsoleteEventsRule != null && !obsoleteEventsRule.enabled) {
                    config.automaticRules.remove(ZenModeConfig.EVENTS_OBSOLETE_RULE_ID);
                }
            }

            if (DEBUG) Log.d(TAG, reason);
            synchronized (mConfigLock) {
                setConfigLocked(config, null,
@@ -2257,7 +2265,7 @@ public class ZenModeHelper {
    private static void updateRuleStringsForCurrentLocale(Context context,
            ZenModeConfig defaultConfig) {
        for (ZenRule rule : defaultConfig.automaticRules.values()) {
            if (ZenModeConfig.EVENTS_DEFAULT_RULE_ID.equals(rule.id)) {
            if (ZenModeConfig.EVENTS_OBSOLETE_RULE_ID.equals(rule.id)) {
                rule.name = context.getResources()
                        .getString(R.string.zen_mode_default_events_name);
            } else if (ZenModeConfig.EVERY_NIGHT_DEFAULT_RULE_ID.equals(rule.id)) {
@@ -2279,7 +2287,7 @@ public class ZenModeHelper {
        }
        ZenPolicy defaultPolicy = defaultConfig.getZenPolicy();
        for (ZenRule rule : defaultConfig.automaticRules.values()) {
            if (ZenModeConfig.DEFAULT_RULE_IDS.contains(rule.id) && rule.zenPolicy == null) {
            if (ZenModeConfig.getDefaultRuleIds().contains(rule.id) && rule.zenPolicy == null) {
                rule.zenPolicy = defaultPolicy.copy();
            }
        }
@@ -2483,7 +2491,7 @@ public class ZenModeHelper {
            List<StatsEvent> events) {
        // Make the ID safe.
        String id = rule.id == null ? "" : rule.id;
        if (!ZenModeConfig.DEFAULT_RULE_IDS.contains(id)) {
        if (!ZenModeConfig.getDefaultRuleIds().contains(id)) {
            id = "";
        }

+66 −25
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ 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_SCHEDULE_TIME;
import static android.app.AutomaticZenRule.TYPE_UNKNOWN;
import static android.app.Flags.FLAG_MODES_API;
import static android.app.Flags.FLAG_MODES_UI;
@@ -221,7 +221,7 @@ import platform.test.runner.parameterized.Parameters;
@TestableLooper.RunWithLooper
public class ZenModeHelperTest extends UiServiceTestCase {

    private static final String EVENTS_DEFAULT_RULE_ID = ZenModeConfig.EVENTS_DEFAULT_RULE_ID;
    private static final String EVENTS_DEFAULT_RULE_ID = ZenModeConfig.EVENTS_OBSOLETE_RULE_ID;
    private static final String SCHEDULE_DEFAULT_RULE_ID =
            ZenModeConfig.EVERY_NIGHT_DEFAULT_RULE_ID;
    private static final String CUSTOM_PKG_NAME = "not.android";
@@ -1216,7 +1216,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {

        // list for tracking which ids we've seen in the pulled atom output
        List<String> ids = new ArrayList<>();
        ids.addAll(ZenModeConfig.DEFAULT_RULE_IDS);
        ids.addAll(ZenModeConfig.getDefaultRuleIds());
        ids.add("");  // empty string for root config

        for (StatsEvent ev : events) {
@@ -1793,14 +1793,13 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        // check default rules
        ArrayMap<String, ZenModeConfig.ZenRule> rules = mZenModeHelper.mConfig.automaticRules;
        assertTrue(rules.size() != 0);
        for (String defaultId : ZenModeConfig.DEFAULT_RULE_IDS) {
        for (String defaultId : ZenModeConfig.getDefaultRuleIds()) {
            assertTrue(rules.containsKey(defaultId));
        }

        assertEquals(originalPolicy, mZenModeHelper.getNotificationPolicy());
    }


    @Test
    public void testReadXmlAllDisabledRulesResetDefaultRules() throws Exception {
        setupZenConfig();
@@ -1830,7 +1829,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        // check default rules
        ArrayMap<String, ZenModeConfig.ZenRule> rules = mZenModeHelper.mConfig.automaticRules;
        assertTrue(rules.size() != 0);
        for (String defaultId : ZenModeConfig.DEFAULT_RULE_IDS) {
        for (String defaultId : ZenModeConfig.getDefaultRuleIds()) {
            assertTrue(rules.containsKey(defaultId));
        }
        assertFalse(rules.containsKey("customRule"));
@@ -1839,6 +1838,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
    }

    @Test
    @DisableFlags(FLAG_MODES_UI) // modes_ui has only 1 default rule
    public void testReadXmlOnlyOneDefaultRuleExists() throws Exception {
        setupZenConfig();
        Policy originalPolicy = mZenModeHelper.getNotificationPolicy();
@@ -1882,11 +1882,11 @@ public class ZenModeHelperTest extends UiServiceTestCase {

        // check default rules
        ArrayMap<String, ZenModeConfig.ZenRule> rules = mZenModeHelper.mConfig.automaticRules;
        assertTrue(rules.size() != 0);
        for (String defaultId : ZenModeConfig.DEFAULT_RULE_IDS) {
            assertTrue(rules.containsKey(defaultId));
        assertThat(rules).isNotEmpty();
        for (String defaultId : ZenModeConfig.getDefaultRuleIds()) {
            assertThat(rules).containsKey(defaultId);
        }
        assertFalse(rules.containsKey("customRule"));
        assertThat(rules).doesNotContainKey("customRule");

        assertEquals(originalPolicy, mZenModeHelper.getNotificationPolicy());
    }
@@ -1932,13 +1932,13 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        defaultEventRule.zenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS;
        defaultEventRule.conditionId = ZenModeConfig.toScheduleConditionId(
                defaultEventRuleInfo);
        defaultEventRule.id = ZenModeConfig.EVENTS_DEFAULT_RULE_ID;
        defaultEventRule.id = ZenModeConfig.EVENTS_OBSOLETE_RULE_ID;
        defaultScheduleRule.zenPolicy = new ZenPolicy.Builder()
                .allowAlarms(false)
                .allowMedia(false)
                .allowRepeatCallers(false)
                .build();
        automaticRules.put(ZenModeConfig.EVENTS_DEFAULT_RULE_ID, defaultEventRule);
        automaticRules.put(ZenModeConfig.EVENTS_OBSOLETE_RULE_ID, defaultEventRule);

        mZenModeHelper.mConfig.automaticRules = automaticRules;

@@ -1951,18 +1951,19 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        mZenModeHelper.readXml(parser, false, UserHandle.USER_ALL);

        // check default rules
        int expectedNumAutoRules = 1 + ZenModeConfig.getDefaultRuleIds().size(); // custom + default
        ArrayMap<String, ZenModeConfig.ZenRule> rules = mZenModeHelper.mConfig.automaticRules;
        assertEquals(3, rules.size());
        for (String defaultId : ZenModeConfig.DEFAULT_RULE_IDS) {
            assertTrue(rules.containsKey(defaultId));
        assertThat(rules).hasSize(expectedNumAutoRules);
        for (String defaultId : ZenModeConfig.getDefaultRuleIds()) {
            assertThat(rules).containsKey(defaultId);
        }
        assertTrue(rules.containsKey("customRule"));
        assertThat(rules).containsKey("customRule");

        assertEquals(originalPolicy, mZenModeHelper.getNotificationPolicy());

        List<StatsEvent> events = new LinkedList<>();
        mZenModeHelper.pullRules(events);
        assertEquals(4, events.size());
        assertThat(events).hasSize(expectedNumAutoRules + 1); // auto + manual
    }

    @Test
@@ -2151,8 +2152,8 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        defaultEventRule.zenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS;
        defaultEventRule.conditionId = ZenModeConfig.toScheduleConditionId(
                defaultEventRuleInfo);
        defaultEventRule.id = ZenModeConfig.EVENTS_DEFAULT_RULE_ID;
        automaticRules.put(ZenModeConfig.EVENTS_DEFAULT_RULE_ID, defaultEventRule);
        defaultEventRule.id = ZenModeConfig.EVENTS_OBSOLETE_RULE_ID;
        automaticRules.put(ZenModeConfig.EVENTS_OBSOLETE_RULE_ID, defaultEventRule);

        mZenModeHelper.mConfig.automaticRules = automaticRules;

@@ -2167,7 +2168,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        // check default rules
        ArrayMap<String, ZenModeConfig.ZenRule> rules = mZenModeHelper.mConfig.automaticRules;
        assertThat(rules.size()).isGreaterThan(0);
        for (String defaultId : ZenModeConfig.DEFAULT_RULE_IDS) {
        for (String defaultId : ZenModeConfig.getDefaultRuleIds()) {
            assertThat(rules).containsKey(defaultId);
            ZenRule rule = rules.get(defaultId);
            assertThat(rule.zenPolicy).isNotNull();
@@ -2371,7 +2372,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        // Find default rules; check they have non-null policies; check that they match the default
        // and not whatever has been set up in setupZenConfig.
        ArrayMap<String, ZenModeConfig.ZenRule> rules = mZenModeHelper.mConfig.automaticRules;
        for (String defaultId : ZenModeConfig.DEFAULT_RULE_IDS) {
        for (String defaultId : ZenModeConfig.getDefaultRuleIds()) {
            assertThat(rules).containsKey(defaultId);
            ZenRule rule = rules.get(defaultId);
            assertThat(rule.zenPolicy).isNotNull();
@@ -6884,7 +6885,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        mZenModeHelper.onUserSwitched(101);

        ZenRule eventsRule = mZenModeHelper.mConfig.automaticRules.get(
                ZenModeConfig.EVENTS_DEFAULT_RULE_ID);
                ZenModeConfig.EVENTS_OBSOLETE_RULE_ID);

        assertThat(eventsRule).isNotNull();
        assertThat(eventsRule.zenPolicy).isNull();
@@ -6900,7 +6901,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        mZenModeHelper.onUserSwitched(201);

        ZenRule eventsRule = mZenModeHelper.mConfig.automaticRules.get(
                ZenModeConfig.EVENTS_DEFAULT_RULE_ID);
                ZenModeConfig.EVENTS_OBSOLETE_RULE_ID);

        assertThat(eventsRule).isNotNull();
        assertThat(eventsRule.zenPolicy).isEqualTo(mZenModeHelper.getDefaultZenPolicy());
@@ -6915,11 +6916,11 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        mZenModeHelper.onUserSwitched(301);

        ZenRule eventsRule = mZenModeHelper.mConfig.automaticRules.get(
                ZenModeConfig.EVENTS_DEFAULT_RULE_ID);
                ZenModeConfig.EVERY_NIGHT_DEFAULT_RULE_ID);

        assertThat(eventsRule).isNotNull();
        assertThat(eventsRule.zenPolicy).isEqualTo(mZenModeHelper.getDefaultZenPolicy());
        assertThat(eventsRule.type).isEqualTo(TYPE_SCHEDULE_CALENDAR);
        assertThat(eventsRule.type).isEqualTo(TYPE_SCHEDULE_TIME);
        assertThat(eventsRule.triggerDescription).isNotEmpty();
    }

@@ -7008,6 +7009,46 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        assertThat(zenRule.zenPolicy).isNotSameInstanceAs(mZenModeHelper.getDefaultZenPolicy());
    }

    @Test
    @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI})
    public void readXml_withDisabledEventsRule_deletesIt() throws Exception {
        ZenRule rule = new ZenRule();
        rule.id = ZenModeConfig.EVENTS_OBSOLETE_RULE_ID;
        rule.name = "Events";
        rule.zenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS;
        rule.conditionId = Uri.parse("events");

        rule.enabled = false;
        mZenModeHelper.mConfig.automaticRules.put(ZenModeConfig.EVENTS_OBSOLETE_RULE_ID, rule);
        ByteArrayOutputStream xmlBytes = writeXmlAndPurge(ZenModeConfig.XML_VERSION_MODES_UI);
        TypedXmlPullParser parser = getParserForByteStream(xmlBytes);

        mZenModeHelper.readXml(parser, false, UserHandle.USER_ALL);

        assertThat(mZenModeHelper.mConfig.automaticRules).doesNotContainKey(
                ZenModeConfig.EVENTS_OBSOLETE_RULE_ID);
    }

    @Test
    @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI})
    public void readXml_withEnabledEventsRule_keepsIt() throws Exception {
        ZenRule rule = new ZenRule();
        rule.id = ZenModeConfig.EVENTS_OBSOLETE_RULE_ID;
        rule.name = "Events";
        rule.zenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS;
        rule.conditionId = Uri.parse("events");

        rule.enabled = true;
        mZenModeHelper.mConfig.automaticRules.put(ZenModeConfig.EVENTS_OBSOLETE_RULE_ID, rule);
        ByteArrayOutputStream xmlBytes = writeXmlAndPurge(ZenModeConfig.XML_VERSION_MODES_UI);
        TypedXmlPullParser parser = getParserForByteStream(xmlBytes);

        mZenModeHelper.readXml(parser, false, UserHandle.USER_ALL);

        assertThat(mZenModeHelper.mConfig.automaticRules).containsKey(
                ZenModeConfig.EVENTS_OBSOLETE_RULE_ID);
    }

    private static void addZenRule(ZenModeConfig config, String id, String ownerPkg, int zenMode,
            @Nullable ZenPolicy zenPolicy) {
        ZenRule rule = new ZenRule();