Fix Conversation widget on new notif pipeline
The Conversation widget stopped updating properly because it was updating on a background thread but it needed to get all active and pending notifications to do that, and the new pipeline (but not the old) only allows that on the main thread. This change gets the notifications on the main thread, then passes the list to the background thread to finish the task. Bug: 225795397 Test: manual Change-Id: If05edbfd1817e5e28dc5a18c892fdb52ef1075c1
This commit is contained in:
@@ -441,12 +441,16 @@ public class PeopleSpaceWidgetManager {
|
||||
Log.d(TAG, "Notification removed, key: " + sbn.getKey());
|
||||
}
|
||||
}
|
||||
if (DEBUG) Log.d(TAG, "Fetching notifications");
|
||||
Collection<NotificationEntry> notifications = mNotifCollection.getAllNotifs();
|
||||
mBgExecutor.execute(
|
||||
() -> updateWidgetsWithNotificationChangedInBackground(sbn, notificationAction));
|
||||
() -> updateWidgetsWithNotificationChangedInBackground(
|
||||
sbn, notificationAction, notifications));
|
||||
}
|
||||
|
||||
private void updateWidgetsWithNotificationChangedInBackground(StatusBarNotification sbn,
|
||||
PeopleSpaceUtils.NotificationAction action) {
|
||||
PeopleSpaceUtils.NotificationAction action,
|
||||
Collection<NotificationEntry> notifications) {
|
||||
try {
|
||||
PeopleTileKey key = new PeopleTileKey(
|
||||
sbn.getShortcutId(), sbn.getUser().getIdentifier(), sbn.getPackageName());
|
||||
@@ -469,7 +473,7 @@ public class PeopleSpaceWidgetManager {
|
||||
Log.d(TAG, "Widgets by URI to be updated:" + tilesUpdatedByUri.toString());
|
||||
}
|
||||
tilesUpdated.addAll(tilesUpdatedByUri);
|
||||
updateWidgetIdsBasedOnNotifications(tilesUpdated);
|
||||
updateWidgetIdsBasedOnNotifications(tilesUpdated, notifications);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Throwing exception: " + e);
|
||||
@@ -477,15 +481,15 @@ public class PeopleSpaceWidgetManager {
|
||||
}
|
||||
|
||||
/** Updates {@code widgetIdsToUpdate} with {@code action}. */
|
||||
private void updateWidgetIdsBasedOnNotifications(Set<String> widgetIdsToUpdate) {
|
||||
private void updateWidgetIdsBasedOnNotifications(Set<String> widgetIdsToUpdate,
|
||||
Collection<NotificationEntry> ungroupedNotifications) {
|
||||
if (widgetIdsToUpdate.isEmpty()) {
|
||||
if (DEBUG) Log.d(TAG, "No widgets to update, returning.");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (DEBUG) Log.d(TAG, "Fetching grouped notifications");
|
||||
Map<PeopleTileKey, Set<NotificationEntry>> groupedNotifications =
|
||||
getGroupedConversationNotifications();
|
||||
groupConversationNotifications(ungroupedNotifications);
|
||||
|
||||
widgetIdsToUpdate
|
||||
.stream()
|
||||
@@ -510,7 +514,7 @@ public class PeopleSpaceWidgetManager {
|
||||
"Augmenting tile from NotificationEntryManager widget: " + key.toString());
|
||||
}
|
||||
Map<PeopleTileKey, Set<NotificationEntry>> notifications =
|
||||
getGroupedConversationNotifications();
|
||||
groupConversationNotifications(mNotifCollection.getAllNotifs());
|
||||
String contactUri = null;
|
||||
if (tile.getContactUri() != null) {
|
||||
contactUri = tile.getContactUri().toString();
|
||||
@@ -518,9 +522,10 @@ public class PeopleSpaceWidgetManager {
|
||||
return augmentTileFromNotifications(tile, key, contactUri, notifications, appWidgetId);
|
||||
}
|
||||
|
||||
/** Returns active and pending notifications grouped by {@link PeopleTileKey}. */
|
||||
public Map<PeopleTileKey, Set<NotificationEntry>> getGroupedConversationNotifications() {
|
||||
Collection<NotificationEntry> notifications = mNotifCollection.getAllNotifs();
|
||||
/** Groups active and pending notifications grouped by {@link PeopleTileKey}. */
|
||||
public Map<PeopleTileKey, Set<NotificationEntry>> groupConversationNotifications(
|
||||
Collection<NotificationEntry> notifications
|
||||
) {
|
||||
if (DEBUG) Log.d(TAG, "Number of total notifications: " + notifications.size());
|
||||
Map<PeopleTileKey, Set<NotificationEntry>> groupedNotifications =
|
||||
notifications
|
||||
|
||||
Reference in New Issue
Block a user