avoid some unnecessary notification updates

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/services/NotificationService.java | 27 
1 file changed, 16 insertions(+), 11 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/services/NotificationService.java 🔗

@@ -225,12 +225,11 @@ public class NotificationService {
 		}
 		synchronized (notifications) {
 			markAsReadIfHasDirectReply(conversation);
-			//TODO: only update if something actually got removed?
-			notifications.remove(conversation.getUuid());
-			final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(mXmppConnectionService);
-			//TODO on later androids (that have multiple Conversations) maybe canceling is enough + update summary notification
-			notificationManager.cancel(conversation.getUuid(), NOTIFICATION_ID);
-			updateNotification(false);
+			if (notifications.remove(conversation.getUuid()) != null) {
+				final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(mXmppConnectionService);
+				notificationManager.cancel(conversation.getUuid(), NOTIFICATION_ID);
+				updateNotification(false, true);
+			}
 		}
 	}
 
@@ -254,6 +253,10 @@ public class NotificationService {
 	}
 
 	public void updateNotification(final boolean notify) {
+		updateNotification(notify, false);
+	}
+
+	public void updateNotification(final boolean notify, boolean summaryOnly) {
 		final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(mXmppConnectionService);
 		final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mXmppConnectionService);
 
@@ -271,11 +274,13 @@ public class NotificationService {
 			} else {
 				mBuilder = buildMultipleConversation();
 				modifyForSoundVibrationAndLight(mBuilder, notify, preferences);
-				for(Map.Entry<String,ArrayList<Message>> entry : notifications.entrySet()) {
-					Builder singleBuilder = buildSingleConversations(entry.getValue());
-					singleBuilder.setGroup(CONVERSATIONS_GROUP);
-					setNotificationColor(singleBuilder);
-					notificationManager.notify(entry.getKey(), NOTIFICATION_ID ,singleBuilder.build());
+				if (!summaryOnly) {
+					for (Map.Entry<String, ArrayList<Message>> entry : notifications.entrySet()) {
+						Builder singleBuilder = buildSingleConversations(entry.getValue());
+						singleBuilder.setGroup(CONVERSATIONS_GROUP);
+						setNotificationColor(singleBuilder);
+						notificationManager.notify(entry.getKey(), NOTIFICATION_ID, singleBuilder.build());
+					}
 				}
 				notificationManager.notify(NOTIFICATION_ID, mBuilder.build());
 			}