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

Commit d62f9fbc authored by Will's avatar Will
Browse files

Fetch active notifications on a background thread.

Avoid a potential ANR by moving a call to getActiveNotifications to a
background thread.

Test: atest DreamOverlayNotificationCountProviderTest
Bug: 227237503
Change-Id: I1fd0e110498fdb1d96cef018e6a2d5d6c362675e
parent 92ad3ae5
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;

import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationListener.NotificationHandler;
import com.android.systemui.statusbar.policy.CallbackController;
@@ -30,6 +31,7 @@ import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Executor;

import javax.inject.Inject;

@@ -78,10 +80,16 @@ public class DreamOverlayNotificationCountProvider

    @Inject
    public DreamOverlayNotificationCountProvider(
            NotificationListener notificationListener) {
            NotificationListener notificationListener,
            @Background Executor bgExecutor) {
        notificationListener.addNotificationHandler(mNotificationHandler);

        bgExecutor.execute(() -> {
                    Arrays.stream(notificationListener.getActiveNotifications())
                            .forEach(sbn -> mNotificationKeys.add(sbn.getKey()));
                    reportNotificationCountChanged();
                }
        );
    }

    @Override
+2 −1
Original line number Diff line number Diff line
@@ -61,7 +61,8 @@ public class DreamOverlayNotificationCountProviderTest extends SysuiTestCase {

        final StatusBarNotification[] notifications = {mNotification1};
        when(mNotificationListener.getActiveNotifications()).thenReturn(notifications);
        mProvider = new DreamOverlayNotificationCountProvider(mNotificationListener);
        mProvider = new DreamOverlayNotificationCountProvider(
                mNotificationListener, Runnable::run);
        mProvider.addCallback(mCallback);
    }