diff --git a/src/com/android/launcher3/notification/NotificationListener.java b/src/com/android/launcher3/notification/NotificationListener.java index bbeb886f3c..04eb38a3c5 100644 --- a/src/com/android/launcher3/notification/NotificationListener.java +++ b/src/com/android/launcher3/notification/NotificationListener.java @@ -35,6 +35,7 @@ import android.util.Log; import android.util.Pair; import androidx.annotation.AnyThread; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; @@ -154,14 +155,9 @@ public class NotificationListener extends NotificationListenerService { case MSG_NOTIFICATION_FULL_REFRESH: List activeNotifications = null; if (sIsConnected) { - try { - activeNotifications = Arrays.stream(getActiveNotifications()) - .filter(this::notificationIsValidForUI) - .collect(Collectors.toList()); - } catch (SecurityException ex) { - Log.e(TAG, "SecurityException: failed to fetch notifications"); - activeNotifications = new ArrayList<>(); - } + activeNotifications = Arrays.stream(getActiveNotificationsSafely(null)) + .filter(this::notificationIsValidForUI) + .collect(Collectors.toList()); } else { activeNotifications = new ArrayList<>(); } @@ -175,7 +171,7 @@ public class NotificationListener extends NotificationListenerService { } case MSG_RANKING_UPDATE: { String[] keys = ((RankingMap) message.obj).getOrderedKeys(); - for (StatusBarNotification sbn : getActiveNotifications(keys)) { + for (StatusBarNotification sbn : getActiveNotificationsSafely(keys)) { updateGroupKeyIfNecessary(sbn); } return true; @@ -214,6 +210,16 @@ public class NotificationListener extends NotificationListenerService { return true; } + private @NonNull StatusBarNotification[] getActiveNotificationsSafely(@Nullable String[] keys) { + StatusBarNotification[] result = null; + try { + result = getActiveNotifications(keys); + } catch (SecurityException e) { + Log.e(TAG, "SecurityException: failed to fetch notifications"); + } + return result == null ? new StatusBarNotification[0] : result; + } + @Override public void onListenerConnected() { super.onListenerConnected(); @@ -313,9 +319,8 @@ public class NotificationListener extends NotificationListenerService { */ @WorkerThread public List getNotificationsForKeys(List keys) { - StatusBarNotification[] notifications = getActiveNotifications( - keys.stream().map(n -> n.notificationKey).toArray(String[]::new)); - return notifications == null ? Collections.emptyList() : Arrays.asList(notifications); + return Arrays.asList(getActiveNotificationsSafely( + keys.stream().map(n -> n.notificationKey).toArray(String[]::new))); } /**