diff --git a/res/values/strings.xml b/res/values/strings.xml
index 04852e0..d612e81 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -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] -->
diff --git a/src/com/android/settings/applications/AppStateNotificationBridge.java b/src/com/android/settings/applications/AppStateNotificationBridge.java
index d06aeb1..fc9e14f 100644
--- a/src/com/android/settings/applications/AppStateNotificationBridge.java
+++ b/src/com/android/settings/applications/AppStateNotificationBridge.java
@@ -100,18 +100,20 @@
     }
 
     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 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
diff --git a/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java b/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java
index 2e4a640..7d1e159 100644
--- a/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java
+++ b/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java
@@ -49,6 +49,7 @@
             FILTER_APPS_WITH_OVERLAY,
             FILTER_APPS_WRITE_SETTINGS,
             FILTER_APPS_INSTALL_SOURCES,
+            FILTER_APPS_BLOCKED,
     })
     @interface FilterType {
     }
@@ -71,14 +72,15 @@
     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 @@
                 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() {
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 35c6d1c..1f577b4 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -21,6 +21,8 @@
 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
         .FILTER_APPS_ENABLED;
@@ -409,6 +411,7 @@
         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 @@
                 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,16 +1116,7 @@
 
         @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;
-            }
+            return true;
         }
 
         private static boolean packageNameEquals(PackageItemInfo info1, PackageItemInfo info2) {
@@ -1338,8 +1334,7 @@
                     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 @@
                     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);
                     }
diff --git a/tests/robotests/src/com/android/settings/applications/AppStateNotificationBridgeTest.java b/tests/robotests/src/com/android/settings/applications/AppStateNotificationBridgeTest.java
index 8e3bb42..cb50486 100644
--- a/tests/robotests/src/com/android/settings/applications/AppStateNotificationBridgeTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppStateNotificationBridgeTest.java
@@ -19,6 +19,8 @@
 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
         .FILTER_APP_NOTIFICATION_RECENCY;
@@ -379,10 +381,11 @@
         NotificationsSentState sent = new NotificationsSentState();
         sent.lastSent = System.currentTimeMillis() - (2 * DAY_IN_MILLIS);
 
-        assertThat(AppStateNotificationBridge.getSummary(mContext, neverSent, true)).isEqualTo(
-                mContext.getString(R.string.notifications_sent_never));
-        assertThat(AppStateNotificationBridge.getSummary(mContext, sent, true).toString())
-                .contains("2");
+        assertThat(AppStateNotificationBridge.getSummary(
+                mContext, neverSent, R.id.sort_order_recent_notification)).isEqualTo(
+                        mContext.getString(R.string.notifications_sent_never));
+        assertThat(AppStateNotificationBridge.getSummary(
+                mContext, sent, R.id.sort_order_recent_notification).toString()).contains("2");
     }
 
     @Test
@@ -392,13 +395,24 @@
         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();
         allowState.lastSent = 1;
@@ -433,6 +447,23 @@
     }
 
     @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<>();
         AppEntry a = mock(AppEntry.class);
diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java
index c9ab7c0..b3f5b5e 100644
--- a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java
@@ -200,13 +200,13 @@
     }
 
     @Test
-    public void shouldUseStableItemHeight_mainType_yes() {
+    public void shouldUseStableItemHeight() {
         assertThat(ManageApplications.ApplicationsAdapter.shouldUseStableItemHeight(
                 LIST_TYPE_MAIN))
                 .isTrue();
         assertThat(ManageApplications.ApplicationsAdapter.shouldUseStableItemHeight(
                 LIST_TYPE_NOTIFICATION))
-                .isFalse();
+                .isTrue();
     }
 
     @Test
