From 02405da2ebfffc6c03ba8fdc53b7534ead871e4e Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 5 Feb 2025 14:35:06 -0500 Subject: [PATCH] Show missed calls from when you were offline Show them as unread and notify about them --- .../siacs/conversations/parser/MessageParser.java | 8 +++++++- .../conversations/services/NotificationService.java | 13 +++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index c0dca4c3d59c1bb08f738ce53487bc43be8694c5..cc2dc8bd975d5eb90fd9f3c75a80f0123057c496 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -18,6 +18,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashSet; +import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; @@ -846,7 +847,6 @@ public class MessageParser extends AbstractParser implements Consumer mBacklogMessageCounter = new HashMap<>(); private final LinkedHashMap mMissedCalls = new LinkedHashMap<>(); + private final Map possiblyMissedCalls = new HashMap<>(); private Conversation mOpenConversation; private boolean mIsInForeground; private long mLastNotification; @@ -489,6 +490,12 @@ public class NotificationService { updateNotification(count > 0, conversations); } } + synchronized (possiblyMissedCalls) { + for (final var entry : possiblyMissedCalls.entrySet()) { + pushFromBacklog(entry.getValue()); + } + possiblyMissedCalls.clear(); + } synchronized (mMissedCalls) { updateMissedCallNotifications(mMissedCalls.keySet()); } @@ -877,6 +884,12 @@ public class NotificationService { } } + public void possiblyMissedCall(final String sessionId, final Message message) { + synchronized (possiblyMissedCalls) { + possiblyMissedCalls.put(sessionId, message); + } + } + public void pushMissedCallNow(final Message message) { synchronized (mMissedCalls) { pushMissedCall(message);