finish of backlog only for one particular account

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/services/MessageArchiveService.java |  2 
src/main/java/eu/siacs/conversations/services/NotificationService.java   | 19 
2 files changed, 18 insertions(+), 3 deletions(-)

Detailed changes

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

@@ -224,7 +224,7 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
 			this.finalizeQuery(query, done);
 			Log.d(Config.LOGTAG,query.getAccount().getJid().toBareJid()+": finished mam after "+query.getTotalCount()+" messages. messages left="+Boolean.toString(!done));
 			if (query.getWith() == null && query.getMessageCount() > 0) {
-				mXmppConnectionService.getNotificationService().finishBacklog(true);
+				mXmppConnectionService.getNotificationService().finishBacklog(true,query.getAccount());
 			}
 		} else {
 			final Query nextQuery;

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

@@ -100,13 +100,28 @@ public class NotificationService {
 		}
 	}
 
-	public void finishBacklog(boolean notify) {
+	public void finishBacklog(boolean notify, Account account) {
 		synchronized (notifications) {
 			mXmppConnectionService.updateUnreadCountBadge();
-			updateNotification(notify);
+			if (account == null || !notify) {
+				updateNotification(notify);
+			} else {
+				boolean hasPendingMessages = false;
+				for(ArrayList<Message> messages : notifications.values()) {
+					if (messages.size() > 0 && messages.get(0).getConversation().getAccount() == account) {
+						hasPendingMessages = true;
+						break;
+					}
+				}
+				updateNotification(hasPendingMessages);
+			}
 		}
 	}
 
+	public void finishBacklog(boolean notify) {
+		finishBacklog(notify,null);
+	}
+
 	private void pushToStack(final Message message) {
 		final String conversationUuid = message.getConversationUuid();
 		if (notifications.containsKey(conversationUuid)) {