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

Commit 25d95e0d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add 'notificaton blocked' filter to notifications"

parents 36f47db6 a4e51b52
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -8301,7 +8301,7 @@
    <!-- Label for showing apps with blocked notifications in list [CHAR LIMIT=30] -->
    <string name="filter_notif_all_apps">Apps: All</string>
    <!-- Label for showing apps with blocked notifications in list [CHAR LIMIT=30] -->
    <string name="filter_notif_blocked_apps">Apps: Turned off</string>
    <string name="filter_notif_blocked_apps">Turned off</string>
    <!-- Label for showing categories with urgent notifications in list [CHAR LIMIT=30] -->
    <string name="filter_notif_urgent_channels">Categories: Urgent importance</string>
    <!-- Label for showing categories with low importance notifications in list [CHAR LIMIT=30] -->
+20 −3
Original line number Diff line number Diff line
@@ -100,18 +100,20 @@ public class AppStateNotificationBridge extends AppStateBaseBridge {
    }

    public static CharSequence getSummary(Context context, NotificationsSentState state,
            boolean sortByRecency) {
        if (sortByRecency) {
            int sortOrder) {
        if (sortOrder == R.id.sort_order_recent_notification) {
            if (state.lastSent == 0) {
                return context.getString(R.string.notifications_sent_never);
            }
            return StringUtil.formatRelativeTime(
                    context, System.currentTimeMillis() - state.lastSent, true);
        } else {
        } else if (sortOrder == R.id.sort_order_frequent_notification) {
            if (state.avgSentWeekly > 0) {
                return context.getString(R.string.notifications_sent_weekly, state.avgSentWeekly);
            }
            return context.getString(R.string.notifications_sent_daily, state.avgSentDaily);
        } else {
            return "";
        }
    }

@@ -267,6 +269,21 @@ public class AppStateNotificationBridge extends AppStateBaseBridge {
        }
    };

    public static final AppFilter FILTER_APP_NOTIFICATION_BLOCKED = new AppFilter() {
        @Override
        public void init() {
        }

        @Override
        public boolean filterApp(AppEntry info) {
            NotificationsSentState state = getNotificationsSentState(info);
            if (state != null) {
                return state.blocked;
            }
            return false;
        }
    };

    public static final Comparator<AppEntry> RECENT_NOTIFICATION_COMPARATOR
            = new Comparator<AppEntry>() {
        @Override
+10 −2
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ public class AppFilterRegistry {
            FILTER_APPS_WITH_OVERLAY,
            FILTER_APPS_WRITE_SETTINGS,
            FILTER_APPS_INSTALL_SOURCES,
            FILTER_APPS_BLOCKED,
    })
    @interface FilterType {
    }
@@ -71,14 +72,15 @@ public class AppFilterRegistry {
    public static final int FILTER_APPS_INSTALL_SOURCES = 13;
    public static final int FILTER_APP_HAS_DIRECTORY_ACCESS = 14;
    public static final int FILTER_APP_CAN_CHANGE_WIFI_STATE = 15;
    // Next id: 16
    public static final int FILTER_APPS_BLOCKED = 16;
    // Next id: 17

    private static AppFilterRegistry sRegistry;

    private final AppFilterItem[] mFilters;

    private AppFilterRegistry() {
        mFilters = new AppFilterItem[16];
        mFilters = new AppFilterItem[17];

        // High power whitelist, on
        mFilters[FILTER_APPS_POWER_WHITELIST] = new AppFilterItem(
@@ -178,6 +180,12 @@ public class AppFilterRegistry {
                AppStateChangeWifiStateBridge.FILTER_CHANGE_WIFI_STATE,
                FILTER_APP_CAN_CHANGE_WIFI_STATE,
                R.string.filter_write_settings_apps);

        // Blocked Notifications
        mFilters[FILTER_APPS_BLOCKED] = new AppFilterItem(
                AppStateNotificationBridge.FILTER_APP_NOTIFICATION_BLOCKED,
                FILTER_APPS_BLOCKED,
                R.string.filter_notif_blocked_apps);
    }

    public static AppFilterRegistry getInstance() {
+8 −14
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE;

import static com.android.settings.applications.manageapplications.AppFilterRegistry
        .FILTER_APPS_ALL;
import static com.android.settings.applications.manageapplications.AppFilterRegistry
        .FILTER_APPS_BLOCKED;
import static com.android.settings.applications.manageapplications.AppFilterRegistry
        .FILTER_APPS_DISABLED;
import static com.android.settings.applications.manageapplications.AppFilterRegistry
@@ -409,6 +411,7 @@ public class ManageApplications extends InstrumentedFragment
        if (mListType == LIST_TYPE_NOTIFICATION) {
            mFilterAdapter.enableFilter(FILTER_APPS_RECENT);
            mFilterAdapter.enableFilter(FILTER_APPS_FREQUENT);
            mFilterAdapter.enableFilter(FILTER_APPS_BLOCKED);
            mFilterAdapter.disableFilter(FILTER_APPS_ALL);
        }
        if (mListType == LIST_TYPE_HIGH_POWER) {
@@ -955,6 +958,8 @@ public class ManageApplications extends InstrumentedFragment
                rebuild(R.id.sort_order_frequent_notification);
            } else if (FILTER_APPS_RECENT == appFilter.getFilterType()) {
                rebuild(R.id.sort_order_recent_notification);
            } else if (FILTER_APPS_BLOCKED == appFilter.getFilterType()) {
                rebuild(R.id.sort_order_alpha);
            } else {
                rebuild();
            }
@@ -1111,17 +1116,8 @@ public class ManageApplications extends InstrumentedFragment

        @VisibleForTesting
        static boolean shouldUseStableItemHeight(int listType) {
            switch (listType) {
                case LIST_TYPE_NOTIFICATION:
                    // Most entries in notification type has no summary. Don't use stable height
                    // so height is short for most entries.
                    return false;
                default:
                    // Other types have non-empty summary, so keep the height as we expect summary
                    // to fill in.
            return true;
        }
        }

        private static boolean packageNameEquals(PackageItemInfo info1, PackageItemInfo info2) {
            if (info1 == null || info2 == null) {
@@ -1338,8 +1334,7 @@ public class ManageApplications extends InstrumentedFragment
                    if (entry.extraInfo != null
                            && entry.extraInfo instanceof NotificationsSentState) {
                        holder.setSummary(AppStateNotificationBridge.getSummary(mContext,
                                (NotificationsSentState) entry.extraInfo,
                                (mLastSortMode == R.id.sort_order_recent_notification)));
                                (NotificationsSentState) entry.extraInfo, mLastSortMode));
                    } else {
                        holder.setSummary(null);
                    }
@@ -1388,8 +1383,7 @@ public class ManageApplications extends InstrumentedFragment
                    if (entry.extraInfo != null
                            && entry.extraInfo instanceof NotificationsSentState) {
                        holder.setSummary(AppStateNotificationBridge.getSummary(mContext,
                                (NotificationsSentState) entry.extraInfo,
                                (mLastSortMode == R.id.sort_order_recent_notification)));
                                (NotificationsSentState) entry.extraInfo, mLastSortMode));
                    } else {
                        holder.setSummary(null);
                    }
+37 −6
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.settings.applications;

import static android.text.format.DateUtils.DAY_IN_MILLIS;

import static com.android.settings.applications.AppStateNotificationBridge
        .FILTER_APP_NOTIFICATION_BLOCKED;
import static com.android.settings.applications.AppStateNotificationBridge
        .FILTER_APP_NOTIFICATION_FREQUENCY;
import static com.android.settings.applications.AppStateNotificationBridge
@@ -379,10 +381,11 @@ public class AppStateNotificationBridgeTest {
        NotificationsSentState sent = new NotificationsSentState();
        sent.lastSent = System.currentTimeMillis() - (2 * DAY_IN_MILLIS);

        assertThat(AppStateNotificationBridge.getSummary(mContext, neverSent, true)).isEqualTo(
        assertThat(AppStateNotificationBridge.getSummary(
                mContext, neverSent, R.id.sort_order_recent_notification)).isEqualTo(
                        mContext.getString(R.string.notifications_sent_never));
        assertThat(AppStateNotificationBridge.getSummary(mContext, sent, true).toString())
                .contains("2");
        assertThat(AppStateNotificationBridge.getSummary(
                mContext, sent, R.id.sort_order_recent_notification).toString()).contains("2");
    }

    @Test
@@ -392,12 +395,23 @@ public class AppStateNotificationBridgeTest {
        NotificationsSentState sentOften = new NotificationsSentState();
        sentOften.avgSentDaily = 8;

        assertThat(AppStateNotificationBridge.getSummary(mContext, sentRarely, false).toString())
        assertThat(AppStateNotificationBridge.getSummary(
                mContext, sentRarely, R.id.sort_order_frequent_notification).toString())
                .contains("1");
        assertThat(AppStateNotificationBridge.getSummary(mContext, sentOften, false).toString())
        assertThat(AppStateNotificationBridge.getSummary(
                mContext, sentOften, R.id.sort_order_frequent_notification).toString())
                .contains("8");
    }

    @Test
    public void testSummary_alpha() {
        NotificationsSentState sentRarely = new NotificationsSentState();
        sentRarely.avgSentWeekly = 1;
        assertThat(AppStateNotificationBridge.getSummary(
                mContext, sentRarely, R.id.sort_order_alpha).toString())
                .isEqualTo("");
    }

    @Test
    public void testFilterRecency() {
        NotificationsSentState allowState = new NotificationsSentState();
@@ -432,6 +446,23 @@ public class AppStateNotificationBridgeTest {
        assertFalse(FILTER_APP_NOTIFICATION_FREQUENCY.filterApp(deny));
    }

    @Test
    public void testFilterBlocked() {
        NotificationsSentState allowState = new NotificationsSentState();
        allowState.blocked = true;
        AppEntry allow = mock(AppEntry.class);
        allow.extraInfo = allowState;

        assertTrue(FILTER_APP_NOTIFICATION_BLOCKED.filterApp(allow));

        NotificationsSentState denyState = new NotificationsSentState();
        denyState.blocked = false;
        AppEntry deny = mock(AppEntry.class);
        deny.extraInfo = denyState;

        assertFalse(FILTER_APP_NOTIFICATION_BLOCKED.filterApp(deny));
    }

    @Test
    public void testComparators_nullsNoCrash() {
        List<AppEntry> entries = new ArrayList<>();
Loading