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

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

Merge "Catch SecurityException from NoMan to workaround possible race condition" into tm-dev

parents cf806451 bee13b63
Loading
Loading
Loading
Loading
+17 −12
Original line number Diff line number Diff line
@@ -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<StatusBarNotification> activeNotifications = null;
                if (sIsConnected) {
                    try {
                        activeNotifications = Arrays.stream(getActiveNotifications())
                    activeNotifications = Arrays.stream(getActiveNotificationsSafely(null))
                            .filter(this::notificationIsValidForUI)
                            .collect(Collectors.toList());
                    } catch (SecurityException ex) {
                        Log.e(TAG, "SecurityException: failed to fetch notifications");
                        activeNotifications = new ArrayList<>();
                    }
                } 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<StatusBarNotification> getNotificationsForKeys(List<NotificationKeyData> 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)));
    }

    /**