From 9d4c3bf722a500b129bbcefb1c4694652f216faf Mon Sep 17 00:00:00 2001 From: Ryan ZHAO Date: Fri, 5 Mar 2021 10:17:34 +1100 Subject: [PATCH] send read receipt using new pipeline --- .../conversation/ConversationActivity.java | 3 ++- .../securesms/notifications/MarkReadReceiver.java | 15 +++++++-------- .../messaging/messages/control/ReadReceipt.kt | 6 +++--- .../sending_receiving/MessageReceiverHandler.kt | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java index c4d788e992..9fc5aacf48 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -141,6 +141,7 @@ import org.thoughtcrime.securesms.loki.activities.HomeActivity; import org.thoughtcrime.securesms.loki.api.PublicChatInfoUpdateWorker; import org.thoughtcrime.securesms.loki.database.LokiThreadDatabase; import org.thoughtcrime.securesms.loki.database.LokiUserDatabase; +import org.thoughtcrime.securesms.loki.protocol.SessionMetaProtocol; import org.thoughtcrime.securesms.loki.utilities.GeneralUtilitiesKt; import org.thoughtcrime.securesms.loki.utilities.MentionManagerUtilities; import org.thoughtcrime.securesms.loki.utilities.OpenGroupUtilities; @@ -1661,7 +1662,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity Context context = ConversationActivity.this; List messageIds = DatabaseFactory.getThreadDatabase(context).setRead(params[0], false); - if (!org.thoughtcrime.securesms.loki.protocol.SessionMetaProtocol.shouldSendReadReceipt(recipient.getAddress())) { + if (!SessionMetaProtocol.shouldSendReadReceipt(recipient.getAddress())) { for (MarkedMessageInfo messageInfo : messageIds) { MarkReadReceiver.scheduleDeletion(context, messageInfo.getExpirationInfo()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java index fd2c2be969..042f106c55 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java @@ -11,13 +11,15 @@ import androidx.core.app.NotificationManagerCompat; import com.annimon.stream.Collectors; import com.annimon.stream.Stream; +import org.session.libsession.messaging.messages.control.ReadReceipt; +import org.session.libsession.messaging.sending_receiving.MessageSender; +import org.session.libsession.utilities.TextSecurePreferences; import org.thoughtcrime.securesms.ApplicationContext; import org.session.libsession.messaging.threads.Address; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.MessagingDatabase.ExpirationInfo; import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo; import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId; -import org.thoughtcrime.securesms.jobs.SendReadReceiptJob; import org.session.libsignal.utilities.logging.Log; import org.thoughtcrime.securesms.loki.protocol.SessionMetaProtocol; import org.thoughtcrime.securesms.service.ExpiringMessageManager; @@ -25,7 +27,6 @@ import org.thoughtcrime.securesms.service.ExpiringMessageManager; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Set; public class MarkReadReceiver extends BroadcastReceiver { @@ -68,8 +69,7 @@ public class MarkReadReceiver extends BroadcastReceiver { public static void process(@NonNull Context context, @NonNull List markedReadMessages) { if (markedReadMessages.isEmpty()) return; - - List syncMessageIds = new LinkedList<>(); + if (!TextSecurePreferences.isReadReceiptsEnabled(context)) return; for (MarkedMessageInfo messageInfo : markedReadMessages) { scheduleDeletion(context, messageInfo.getExpirationInfo()); @@ -83,10 +83,9 @@ public class MarkReadReceiver extends BroadcastReceiver { List timestamps = Stream.of(addressMap.get(address)).map(SyncMessageId::getTimetamp).toList(); // Loki - Check whether we want to send a read receipt to this user if (!SessionMetaProtocol.shouldSendReadReceipt(address)) { continue; } - // Loki - Take into account multi device - ApplicationContext.getInstance(context) - .getJobManager() - .add(new SendReadReceiptJob(address, timestamps)); + ReadReceipt readReceipt = new ReadReceipt(timestamps); + readReceipt.setSentTimestamp(System.currentTimeMillis()); + MessageSender.send(readReceipt, address); } } diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/control/ReadReceipt.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/control/ReadReceipt.kt index 0ee1f0acf9..96aee21ea4 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/control/ReadReceipt.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/control/ReadReceipt.kt @@ -5,7 +5,7 @@ import org.session.libsignal.service.internal.push.SignalServiceProtos class ReadReceipt() : ControlMessage() { - var timestamps: LongArray? = null + var timestamps: List? = null companion object { const val TAG = "ReadReceipt" @@ -15,12 +15,12 @@ class ReadReceipt() : ControlMessage() { if (receiptProto.type != SignalServiceProtos.ReceiptMessage.Type.READ) return null val timestamps = receiptProto.timestampList if (timestamps.isEmpty()) return null - return ReadReceipt(timestamps = timestamps.toLongArray()) + return ReadReceipt(timestamps = timestamps) } } //constructor - internal constructor(timestamps: LongArray?) : this() { + internal constructor(timestamps: List?) : this() { this.timestamps = timestamps } diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverHandler.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverHandler.kt index f12776acf6..fa94b00825 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverHandler.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverHandler.kt @@ -50,7 +50,7 @@ fun MessageReceiver.handle(message: Message, proto: SignalServiceProtos.Content, private fun MessageReceiver.handleReadReceipt(message: ReadReceipt) { val context = MessagingConfiguration.shared.context - SSKEnvironment.shared.readReceiptManager.processReadReceipts(context, message.sender!!, message.timestamps!!.asList(), message.receivedTimestamp!!) + SSKEnvironment.shared.readReceiptManager.processReadReceipts(context, message.sender!!, message.timestamps!!, message.receivedTimestamp!!) } private fun MessageReceiver.handleTypingIndicator(message: TypingIndicator) {