diff --git a/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java b/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java
index 79be26d..8b74313 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java
@@ -294,10 +294,15 @@
         final List<ListBuilder.RowBuilder> bluetoothRows = new ArrayList<>();
         // Create row builders based on paired devices.
         for (CachedBluetoothDevice device : getPairedBluetoothDevices()) {
+            String summary = device.getConnectionSummary();
+            if (summary == null) {
+                summary = mContext.getString(
+                        R.string.connected_device_previously_connected_screen_title);
+            }
             final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder()
                     .setTitleItem(getBluetoothDeviceIcon(device), ListBuilder.ICON_IMAGE)
                     .setTitle(device.getName())
-                    .setSubtitle(device.getConnectionSummary());
+                    .setSubtitle(summary);
 
             if (mAvailableMediaBtDeviceUpdater.isFilterMatched(device)
                     || mSavedBtDeviceUpdater.isFilterMatched(device)) {
diff --git a/src/com/android/settings/notification/history/NotificationHistoryActivity.java b/src/com/android/settings/notification/history/NotificationHistoryActivity.java
index 8b4bc9d..ab0a8d7 100644
--- a/src/com/android/settings/notification/history/NotificationHistoryActivity.java
+++ b/src/com/android/settings/notification/history/NotificationHistoryActivity.java
@@ -265,7 +265,7 @@
             LinearLayoutManager lm = new LinearLayoutManager(NotificationHistoryActivity.this);
             mSnoozedRv.setLayoutManager(lm);
             mSnoozedRv.setAdapter(
-                    new NotificationSbnAdapter(NotificationHistoryActivity.this, mPm));
+                    new NotificationSbnAdapter(NotificationHistoryActivity.this, mPm, mUm));
             mSnoozedRv.setNestedScrollingEnabled(false);
 
             if (snoozed == null || snoozed.length == 0) {
@@ -280,7 +280,7 @@
                 new LinearLayoutManager(NotificationHistoryActivity.this);
             mDismissedRv.setLayoutManager(dismissLm);
             mDismissedRv.setAdapter(
-                new NotificationSbnAdapter(NotificationHistoryActivity.this, mPm));
+                new NotificationSbnAdapter(NotificationHistoryActivity.this, mPm, mUm));
             mDismissedRv.setNestedScrollingEnabled(false);
 
             if (dismissed == null || dismissed.length == 0) {
diff --git a/src/com/android/settings/notification/history/NotificationSbnAdapter.java b/src/com/android/settings/notification/history/NotificationSbnAdapter.java
index 5d4e716..27ecabd 100644
--- a/src/com/android/settings/notification/history/NotificationSbnAdapter.java
+++ b/src/com/android/settings/notification/history/NotificationSbnAdapter.java
@@ -32,6 +32,7 @@
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.service.notification.StatusBarNotification;
 import android.text.TextUtils;
 import android.util.Log;
@@ -47,6 +48,7 @@
 import com.android.settings.R;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -62,8 +64,9 @@
     private @ColorInt int mBackgroundColor;
     private boolean mInNightMode;
     private @UserIdInt int mCurrentUser;
+    private List<Integer> mEnabledProfiles = new ArrayList<>();
 
-    public NotificationSbnAdapter(Context context, PackageManager pm) {
+    public NotificationSbnAdapter(Context context, PackageManager pm, UserManager um) {
         mContext = context;
         mPm = pm;
         mUserBadgeCache = new HashMap<>();
@@ -74,6 +77,12 @@
         mInNightMode = (currentConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK)
                 == Configuration.UI_MODE_NIGHT_YES;
         mCurrentUser = ActivityManager.getCurrentUser();
+        int[] enabledUsers = um.getEnabledProfileIds(mCurrentUser);
+        for (int id : enabledUsers) {
+            if (!um.isQuietModeEnabled(UserHandle.of(id))) {
+                mEnabledProfiles.add(id);
+            }
+        }
         setHasStableIds(true);
     }
 
@@ -115,10 +124,9 @@
     }
 
     public void onRebuildComplete(List<StatusBarNotification> notifications) {
-        // summaries are low content; don't bother showing them
         for (int i = notifications.size() - 1; i >= 0; i--) {
             StatusBarNotification sbn = notifications.get(i);
-            if (sbn.isGroup() && sbn.getNotification().isGroupSummary()) {
+            if (!shouldShowSbn(sbn)) {
                 notifications.remove(i);
             }
         }
@@ -127,13 +135,25 @@
     }
 
     public void addSbn(StatusBarNotification sbn) {
-        if (sbn.isGroup() && sbn.getNotification().isGroupSummary()) {
+        if (!shouldShowSbn(sbn)) {
             return;
         }
         mValues.add(0, sbn);
         notifyDataSetChanged();
     }
 
+    private boolean shouldShowSbn(StatusBarNotification sbn) {
+        // summaries are low content; don't bother showing them
+        if (sbn.isGroup() && sbn.getNotification().isGroupSummary()) {
+            return false;
+        }
+        // also don't show profile notifications if the profile is currently disabled
+        if (!mEnabledProfiles.contains(normalizeUserId(sbn))) {
+            return false;
+        }
+        return true;
+    }
+
     private @NonNull CharSequence loadPackageLabel(String pkg) {
         try {
             ApplicationInfo info = mPm.getApplicationInfo(pkg,
