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

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

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

parents 4a95ef6c b932945b
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();