Change summary
src/main/java/eu/siacs/conversations/parser/MessageParser.java | 8
src/main/java/eu/siacs/conversations/services/NotificationService.java | 13
2 files changed, 20 insertions(+), 1 deletion(-)
Detailed changes
@@ -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<im.convers
if (replacementId != null && mXmppConnectionService.allowMessageCorrection()) {
final Message replacedMessage = conversation.findMessageWithRemoteIdAndCounterpart(replacementId, counterpart);
-Log.d("WUT", "" + replacementId + " " + replacedMessage);
if (replacedMessage != null) {
final boolean fingerprintsMatch = replacedMessage.getFingerprint() == null
|| replacedMessage.getFingerprint().equals(message.getFingerprint());
@@ -1184,7 +1184,10 @@ Log.d("WUT", "" + replacementId + " " + replacedMessage);
message.setServerMsgId(serverMsgId);
message.setTime(timestamp);
message.setBody(new RtpSessionStatus(false, 0).toString());
+ message.markUnread();
c.add(message);
+ mXmppConnectionService.getNotificationService().possiblyMissedCall(c.getUuid() + sessionId, message);
+ query.incrementActualMessageCount();
mXmppConnectionService.databaseBackend.createMessage(message);
}
} else if ("proceed".equals(action)) {
@@ -1203,6 +1206,9 @@ Log.d("WUT", "" + replacementId + " " + replacedMessage);
message.setServerMsgId(serverMsgId);
}
message.setTime(timestamp);
+ message.markRead();
+ mXmppConnectionService.getNotificationService().possiblyMissedCall(c.getUuid() + sessionId, message);
+ query.incrementActualMessageCount();
mXmppConnectionService.updateMessage(message, true);
} else {
Log.d(
@@ -122,6 +122,7 @@ public class NotificationService {
private final HashMap<Conversation, AtomicInteger> mBacklogMessageCounter = new HashMap<>();
private final LinkedHashMap<Conversational, MissedCallsInfo> mMissedCalls =
new LinkedHashMap<>();
+ private final Map<String, Message> 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);