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
This commit is contained in:
Will
2022-03-29 17:22:09 -07:00
parent 92ad3ae513
commit d62f9fbcc5
2 changed files with 13 additions and 4 deletions

View File

@@ -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);
Arrays.stream(notificationListener.getActiveNotifications())
.forEach(sbn -> mNotificationKeys.add(sbn.getKey()));
bgExecutor.execute(() -> {
Arrays.stream(notificationListener.getActiveNotifications())
.forEach(sbn -> mNotificationKeys.add(sbn.getKey()));
reportNotificationCountChanged();
}
);
}
@Override

View File

@@ -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);
}