diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt index 6e2ad27d6..289532ad3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt @@ -93,6 +93,7 @@ import org.thoughtcrime.securesms.conversation.v2.search.SearchViewModel import org.thoughtcrime.securesms.conversation.v2.utilities.AttachmentManager import org.thoughtcrime.securesms.conversation.v2.utilities.BaseDialog import org.thoughtcrime.securesms.conversation.v2.utilities.MentionUtilities +import org.thoughtcrime.securesms.conversation.v2.utilities.ResendMessageUtilities import org.thoughtcrime.securesms.database.DatabaseFactory import org.thoughtcrime.securesms.database.DraftDatabase import org.thoughtcrime.securesms.database.DraftDatabase.Drafts @@ -1212,45 +1213,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe override fun resendMessage(messages: Set) { messages.forEach { messageRecord -> - val recipient: Recipient = messageRecord.recipient - val message = VisibleMessage() - message.id = messageRecord.getId() - if (messageRecord.isOpenGroupInvitation) { - val openGroupInvitation = OpenGroupInvitation() - fromJSON(messageRecord.body)?.let { updateMessageData -> - val kind = updateMessageData.kind - if (kind is UpdateMessageData.Kind.OpenGroupInvitation) { - openGroupInvitation.name = kind.groupName - openGroupInvitation.url = kind.groupUrl - } - } - message.openGroupInvitation = openGroupInvitation - } else { - message.text = messageRecord.body - } - message.sentTimestamp = messageRecord.timestamp - if (recipient.isGroupRecipient) { - message.groupPublicKey = recipient.address.toGroupString() - } else { - message.recipient = messageRecord.recipient.address.serialize() - } - message.threadID = messageRecord.threadId - if (messageRecord.isMms) { - val mmsMessageRecord = messageRecord as MmsMessageRecord - if (mmsMessageRecord.linkPreviews.isNotEmpty()) { - message.linkPreview = from(mmsMessageRecord.linkPreviews[0]) - } - if (mmsMessageRecord.quote != null) { - message.quote = from(mmsMessageRecord.quote!!.quoteModel) - } - message.addSignalAttachments(mmsMessageRecord.slideDeck.asAttachments()) - } - val sentTimestamp = message.sentTimestamp - val sender = MessagingModuleConfiguration.shared.storage.getUserPublicKey() - if (sentTimestamp != null && sender != null) { - MessagingModuleConfiguration.shared.storage.markAsSending(sentTimestamp, sender) - } - MessageSender.send(message, recipient.address) + ResendMessageUtilities.resend(messageRecord) } endActionMode() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt index 66ae1bc58..8c870d7b0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt @@ -19,6 +19,7 @@ import org.session.libsession.utilities.ExpirationUtil import org.session.libsession.utilities.TextSecurePreferences import org.session.libsession.utilities.recipients.Recipient import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity +import org.thoughtcrime.securesms.conversation.v2.utilities.ResendMessageUtilities import org.thoughtcrime.securesms.database.DatabaseFactory import org.thoughtcrime.securesms.database.model.MessageRecord import org.thoughtcrime.securesms.database.model.MmsMessageRecord @@ -44,11 +45,13 @@ class MessageDetailActivity: PassphraseRequiredActionBarActivity() { setContentView(R.layout.activity_message_detail) title = resources.getString(R.string.conversation_context__menu_message_details) val timestamp = intent.getLongExtra(MESSAGE_TIMESTAMP, -1L) + // We only show this screen for messages fail to send, + // so the author of the messages must be the current user. val author = Address.fromSerialized(TextSecurePreferences.getLocalNumber(this)!!) messageRecord = DatabaseFactory.getMmsSmsDatabase (this).getMessageFor(timestamp, author) updateContent() resend_button.setOnClickListener { - resend() + ResendMessageUtilities.resend(messageRecord!!) finish() } } @@ -72,47 +75,4 @@ class MessageDetailActivity: PassphraseRequiredActionBarActivity() { expires_in.text = duration } } - - fun resend() { - val messageRecord = messageRecord!! - val recipient: Recipient = messageRecord.recipient - val message = VisibleMessage() - message.id = messageRecord.getId() - if (messageRecord.isOpenGroupInvitation) { - val openGroupInvitation = OpenGroupInvitation() - UpdateMessageData.fromJSON(messageRecord.body)?.let { updateMessageData -> - val kind = updateMessageData.kind - if (kind is UpdateMessageData.Kind.OpenGroupInvitation) { - openGroupInvitation.name = kind.groupName - openGroupInvitation.url = kind.groupUrl - } - } - message.openGroupInvitation = openGroupInvitation - } else { - message.text = messageRecord.body - } - message.sentTimestamp = messageRecord.timestamp - if (recipient.isGroupRecipient) { - message.groupPublicKey = recipient.address.toGroupString() - } else { - message.recipient = messageRecord.recipient.address.serialize() - } - message.threadID = messageRecord.threadId - if (messageRecord.isMms) { - val mmsMessageRecord = messageRecord as MmsMessageRecord - if (mmsMessageRecord.linkPreviews.isNotEmpty()) { - message.linkPreview = LinkPreview.from(mmsMessageRecord.linkPreviews[0]) - } - if (mmsMessageRecord.quote != null) { - message.quote = Quote.from(mmsMessageRecord.quote!!.quoteModel) - } - message.addSignalAttachments(mmsMessageRecord.slideDeck.asAttachments()) - } - val sentTimestamp = message.sentTimestamp - val sender = MessagingModuleConfiguration.shared.storage.getUserPublicKey() - if (sentTimestamp != null && sender != null) { - MessagingModuleConfiguration.shared.storage.markAsSending(sentTimestamp, sender) - } - MessageSender.send(message, recipient.address) - } } \ No newline at end of file diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/ResendMessageUtilities.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/ResendMessageUtilities.kt new file mode 100644 index 000000000..62004808a --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/ResendMessageUtilities.kt @@ -0,0 +1,57 @@ +package org.thoughtcrime.securesms.conversation.v2.utilities + +import org.session.libsession.messaging.MessagingModuleConfiguration +import org.session.libsession.messaging.messages.visible.LinkPreview +import org.session.libsession.messaging.messages.visible.OpenGroupInvitation +import org.session.libsession.messaging.messages.visible.Quote +import org.session.libsession.messaging.messages.visible.VisibleMessage +import org.session.libsession.messaging.sending_receiving.MessageSender +import org.session.libsession.messaging.utilities.UpdateMessageData +import org.session.libsession.utilities.recipients.Recipient +import org.thoughtcrime.securesms.database.model.MessageRecord +import org.thoughtcrime.securesms.database.model.MmsMessageRecord + +object ResendMessageUtilities { + + fun resend(messageRecord: MessageRecord) { + val recipient: Recipient = messageRecord.recipient + val message = VisibleMessage() + message.id = messageRecord.getId() + if (messageRecord.isOpenGroupInvitation) { + val openGroupInvitation = OpenGroupInvitation() + UpdateMessageData.fromJSON(messageRecord.body)?.let { updateMessageData -> + val kind = updateMessageData.kind + if (kind is UpdateMessageData.Kind.OpenGroupInvitation) { + openGroupInvitation.name = kind.groupName + openGroupInvitation.url = kind.groupUrl + } + } + message.openGroupInvitation = openGroupInvitation + } else { + message.text = messageRecord.body + } + message.sentTimestamp = messageRecord.timestamp + if (recipient.isGroupRecipient) { + message.groupPublicKey = recipient.address.toGroupString() + } else { + message.recipient = messageRecord.recipient.address.serialize() + } + message.threadID = messageRecord.threadId + if (messageRecord.isMms) { + val mmsMessageRecord = messageRecord as MmsMessageRecord + if (mmsMessageRecord.linkPreviews.isNotEmpty()) { + message.linkPreview = LinkPreview.from(mmsMessageRecord.linkPreviews[0]) + } + if (mmsMessageRecord.quote != null) { + message.quote = Quote.from(mmsMessageRecord.quote!!.quoteModel) + } + message.addSignalAttachments(mmsMessageRecord.slideDeck.asAttachments()) + } + val sentTimestamp = message.sentTimestamp + val sender = MessagingModuleConfiguration.shared.storage.getUserPublicKey() + if (sentTimestamp != null && sender != null) { + MessagingModuleConfiguration.shared.storage.markAsSending(sentTimestamp, sender) + } + MessageSender.send(message, recipient.address) + } +} \ No newline at end of file