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

Commit ef2c91c9 authored by Beverly's avatar Beverly
Browse files

Don't filter demoted conversation from app subtext

If the notification channel is a demoted converation, we still want to
include it as a notification channel that can bypass DND under the
"apps" preference for DND.

Test: manual, make RunSettingsRoboTests7
Fixes: 152765113
Change-Id: Ief072b19280b0dc6e6c37d2d46d51f045d42bb4e
parent ad4405d0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -109,7 +109,7 @@ public class ZenModeBypassingAppsPreferenceController extends AbstractZenModePre
            String pkg = entry.info.packageName;
            for (NotificationChannel channel : mNotificationBackend
                    .getNotificationChannelsBypassingDnd(pkg, entry.info.uid).getList()) {
                if (!TextUtils.isEmpty(channel.getConversationId())) {
                if (!TextUtils.isEmpty(channel.getConversationId()) && !channel.isDemoted()) {
                    // conversation channels that bypass dnd will be shown on the People page
                    continue;
                }
+70 −1
Original line number Diff line number Diff line
@@ -135,7 +135,9 @@ public class ZenModeBypassingAppsPreferenceControllerTest {
        appEntries.add(entry2);

        List<NotificationChannel> channelsBypassing = new ArrayList<>();
        channelsBypassing.add(mock(NotificationChannel.class));
        NotificationChannel mockChannel = mock(NotificationChannel.class);
        when(mockChannel.getConversationId()).thenReturn(null); // not a conversation
        channelsBypassing.add(mockChannel);

        when(mBackend.getNotificationChannelsBypassingDnd(entry1.info.packageName,
                entry1.info.uid)).thenReturn(new ParceledListSlice<>(channelsBypassing));
@@ -151,6 +153,73 @@ public class ZenModeBypassingAppsPreferenceControllerTest {
        assertThat(mController.getSummary().contains(entry2.label)).isTrue();
    }

    @Test
    public void testUpdateBypassingApps_conversation() {
        // GIVEN DND is off
        Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.ZEN_MODE,
                Settings.Global.ZEN_MODE_OFF);

        // mock app list
        ApplicationsState.AppEntry entry = mock(ApplicationsState.AppEntry.class);
        entry.info = new ApplicationInfo();
        entry.info.packageName = "test";
        entry.label = "test";
        entry.info.uid = 0;

        List<ApplicationsState.AppEntry> appEntries = new ArrayList<>();
        appEntries.add(entry);

        List<NotificationChannel> channelsBypassing = new ArrayList<>();
        NotificationChannel conversation  = mock(NotificationChannel.class);
        when(conversation.getConversationId()).thenReturn("conversation!");
        channelsBypassing.add(conversation);

        when(mBackend.getNotificationChannelsBypassingDnd(entry.info.packageName,
                entry.info.uid)).thenReturn(new ParceledListSlice<>(channelsBypassing));

        // WHEN a single app is passed to the controller with a conversation notif channel
        mController.updateAppsBypassingDndSummaryText(appEntries);

        // THEN the preference is enabled and the summary doesn't contain any apps because the
        // only channel bypassing DND is a conversation (which will be showed on the
        // conversations page instead of the apps page)
        assertThat(mController.mPreference.isEnabled()).isTrue();
        assertThat(mController.getSummary().contains("No apps")).isTrue();
    }

    @Test
    public void testUpdateBypassingApps_demotedConversation() {
        // GIVEN DND is off
        Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.ZEN_MODE,
                Settings.Global.ZEN_MODE_OFF);

        // mock app list
        ApplicationsState.AppEntry entry = mock(ApplicationsState.AppEntry.class);
        entry.info = new ApplicationInfo();
        entry.info.packageName = "test";
        entry.label = "test";
        entry.info.uid = 0;

        List<ApplicationsState.AppEntry> appEntries = new ArrayList<>();
        appEntries.add(entry);

        List<NotificationChannel> channelsBypassing = new ArrayList<>();
        NotificationChannel demotedConversation  = mock(NotificationChannel.class);
        when(demotedConversation.getConversationId()).thenReturn("conversationId");
        when(demotedConversation.isDemoted()).thenReturn(true);
        channelsBypassing.add(demotedConversation);

        when(mBackend.getNotificationChannelsBypassingDnd(entry.info.packageName,
                entry.info.uid)).thenReturn(new ParceledListSlice<>(channelsBypassing));

        // WHEN a single app is passed to the controller with a demoted conversation notif channel
        mController.updateAppsBypassingDndSummaryText(appEntries);

        // THEN the preference is enabled and the summary contains the app name from the list
        assertThat(mController.mPreference.isEnabled()).isTrue();
        assertThat(mController.getSummary().contains(entry.label)).isTrue();
    }

    @Test
    public void testUpdateAppsBypassingDnd_nullAppsList() {
        // GIVEN DND is off