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

Commit a2e7ca74 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Catch SecurityException from NoMan to workaround possible race...

Merge "Catch SecurityException from NoMan to workaround possible race condition" into tm-dev am: 1cd4d369

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/17775689



Change-Id: Iace994dce515e3b3699f97dac1d4706458eb646f
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 08805831 1cd4d369
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)));
    }

    /**