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

Commit 89b3dc29 authored by Yuri Lin's avatar Yuri Lin
Browse files

If modes_api is on, log active rule types even if zen mode is off

This removes a clause that would short-circuit gathering the set of active rule types if the zen mode is ZEN_MODE_OFF. But this doesn't account for rules that don't enable notification filtering.

Bug: 324281768
Test: ZenModeHelperTest
Change-Id: I36a1b2fa107079d824c34618a44d812805ffd15d
parent d0fa4222
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -436,7 +436,7 @@ class ZenModeEventLogger {
         * Only available when {@code MODES_API} is active; otherwise returns an empty list.
         */
        int[] getActiveRuleTypes() {
            if (!Flags.modesApi() || mNewZenMode == ZEN_MODE_OFF) {
            if (!Flags.modesApi()) {
                return new int[0];
            }

+16 −11
Original line number Diff line number Diff line
@@ -3634,12 +3634,11 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        mTestFlagResolver.setFlagOverride(LOG_DND_STATE_EVENTS, true);
        setupZenConfig();

        // Event 1: turn on manual zen mode. Manual rule will have ACTIVE_RULE_TYPE_MANUAL
        mZenModeHelper.setManualZenMode(ZEN_MODE_IMPORTANT_INTERRUPTIONS, null,
                UPDATE_ORIGIN_SYSTEM_OR_SYSTEMUI, "", null, Process.SYSTEM_UID);

        // Create bedtime rule
        // This one has INTERRUPTION_FILTER_ALL to make sure active rules still count when zen mode
        // (in the notification filtering sense) is not on
        AutomaticZenRule bedtime = new AutomaticZenRule.Builder("Bedtime Mode (TM)", CONDITION_ID)
                .setInterruptionFilter(INTERRUPTION_FILTER_ALL)
                .setType(TYPE_BEDTIME)
                .build();
        String bedtimeRuleId = mZenModeHelper.addAutomaticZenRule(mPkg, bedtime, UPDATE_ORIGIN_APP,
@@ -3652,17 +3651,21 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        String immersiveId = mZenModeHelper.addAutomaticZenRule(mPkg, immersive, UPDATE_ORIGIN_APP,
                "reason", CUSTOM_PKG_UID);

        // Event 2: Activate bedtime rule
        // Event 1: Activate bedtime rule. This doesn't turn on notification filtering
        mZenModeHelper.setAutomaticZenRuleState(bedtimeRuleId,
                new Condition(bedtime.getConditionId(), "", STATE_TRUE, SOURCE_SCHEDULE),
                UPDATE_ORIGIN_APP, CUSTOM_PKG_UID);

        // Event 2: turn on manual zen mode. Manual rule will have ACTIVE_RULE_TYPE_MANUAL
        mZenModeHelper.setManualZenMode(ZEN_MODE_IMPORTANT_INTERRUPTIONS, null,
                UPDATE_ORIGIN_SYSTEM_OR_SYSTEMUI, "", null, Process.SYSTEM_UID);

        // Event 3: Turn immersive on
        mZenModeHelper.setAutomaticZenRuleState(immersiveId,
                new Condition(immersive.getConditionId(), "", STATE_TRUE, SOURCE_SCHEDULE),
                UPDATE_ORIGIN_APP, CUSTOM_PKG_UID);

        // Event 4: Turn off bedtime mode, leaving just unknown + immersive
        // Event 4: Turn off bedtime mode, leaving just manual + immersive
        mZenModeHelper.setAutomaticZenRuleState(bedtimeRuleId,
                new Condition(bedtime.getConditionId(), "", STATE_FALSE, SOURCE_SCHEDULE),
                UPDATE_ORIGIN_APP, CUSTOM_PKG_UID);
@@ -3670,19 +3673,21 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        // Total of 4 events
        assertEquals(4, mZenModeEventLogger.numLoggedChanges());

        // First event: DND_TURNED_ON; active rules: 1; type is ACTIVE_RULE_TYPE_MANUAL
        // First event: active rules changed; active rules: 1; type is ACTIVE_RULE_TYPE_MANUAL
        assertThat(mZenModeEventLogger.getEventId(0)).isEqualTo(
                ZenModeEventLogger.ZenStateChangedEvent.DND_TURNED_ON.getId());
                ZenModeEventLogger.ZenStateChangedEvent.DND_ACTIVE_RULES_CHANGED.getId());
        assertThat(mZenModeEventLogger.getChangedRuleType(0)).isEqualTo(
                DNDProtoEnums.MANUAL_RULE);
                DNDProtoEnums.AUTOMATIC_RULE);
        assertThat(mZenModeEventLogger.getNumRulesActive(0)).isEqualTo(1);
        int[] ruleTypes0 = mZenModeEventLogger.getActiveRuleTypes(0);
        assertThat(ruleTypes0.length).isEqualTo(1);
        assertThat(ruleTypes0[0]).isEqualTo(ACTIVE_RULE_TYPE_MANUAL);
        assertThat(ruleTypes0[0]).isEqualTo(TYPE_BEDTIME);

        // Second event: active rules: 2; types are TYPE_MANUAL and TYPE_BEDTIME
        assertThat(mZenModeEventLogger.getEventId(1)).isEqualTo(
                ZenModeEventLogger.ZenStateChangedEvent.DND_TURNED_ON.getId());
        assertThat(mZenModeEventLogger.getChangedRuleType(1)).isEqualTo(
                DNDProtoEnums.AUTOMATIC_RULE);
                DNDProtoEnums.MANUAL_RULE);
        assertThat(mZenModeEventLogger.getNumRulesActive(1)).isEqualTo(2);
        int[] ruleTypes1 = mZenModeEventLogger.getActiveRuleTypes(1);
        assertThat(ruleTypes1.length).isEqualTo(2);