From 12b008c61c3f87320b8e99b5a9d31bd2dd56ffdb Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Mon, 28 Jun 2021 13:29:17 +1000 Subject: [PATCH] Send quotes & link previews --- .../conversation/v2/ConversationActivityV2.kt | 23 +++++++++++++++---- .../conversation/v2/input_bar/InputBar.kt | 8 +++++++ 2 files changed, 26 insertions(+), 5 deletions(-) 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 5153d2309..e53ab9727 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 @@ -40,8 +40,9 @@ import org.session.libsession.messaging.messages.visible.VisibleMessage import org.session.libsession.messaging.open_groups.OpenGroupAPIV2 import org.session.libsession.messaging.sending_receiving.MessageSender import org.session.libsession.messaging.sending_receiving.attachments.Attachment +import org.session.libsession.messaging.sending_receiving.link_preview.LinkPreview +import org.session.libsession.messaging.sending_receiving.quotes.QuoteModel import org.session.libsession.utilities.MediaTypes -import org.session.libsession.utilities.ServiceUtil import org.session.libsession.utilities.TextSecurePreferences import org.session.libsignal.utilities.ListenableFuture import org.thoughtcrime.securesms.ApplicationContext @@ -61,6 +62,7 @@ import org.thoughtcrime.securesms.database.DatabaseFactory import org.thoughtcrime.securesms.database.DraftDatabase import org.thoughtcrime.securesms.database.DraftDatabase.Drafts import org.thoughtcrime.securesms.database.model.MessageRecord +import org.thoughtcrime.securesms.database.model.MmsMessageRecord import org.thoughtcrime.securesms.giph.ui.GiphyActivity import org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository import org.thoughtcrime.securesms.linkpreview.LinkPreviewViewModel @@ -670,6 +672,14 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe } override fun sendMessage() { + if (inputBar.linkPreview != null || inputBar.quote != null) { + sendAttachments(listOf(), getMessageBody(), inputBar.quote, inputBar.linkPreview) + } else { + sendTextOnlyMessage() + } + } + + private fun sendTextOnlyMessage() { // Create the message val message = VisibleMessage() message.sentTimestamp = System.currentTimeMillis() @@ -689,13 +699,16 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe ApplicationContext.getInstance(this).typingStatusSender.onTypingStopped(threadID) } - private fun sendAttachments(attachments: List, body: String?) { - // TODO: Quotes & link previews + private fun sendAttachments(attachments: List, body: String?, quotedMessage: MessageRecord? = null, linkPreview: LinkPreview? = null) { // Create the message val message = VisibleMessage() message.sentTimestamp = System.currentTimeMillis() message.text = body - val outgoingTextMessage = OutgoingMediaMessage.from(message, thread, attachments, null, null) + val quote = quotedMessage?.let { + val quotedAttachments = (it as? MmsMessageRecord)?.slideDeck?.asAttachments() ?: listOf() + QuoteModel(it.dateSent, it.individualRecipient.address, it.body, false, quotedAttachments) + } + val outgoingTextMessage = OutgoingMediaMessage.from(message, thread, attachments, quote, linkPreview) // Clear the input bar inputBar.text = "" // Clear mentions @@ -709,7 +722,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe // Put the message in the database message.id = DatabaseFactory.getMmsDatabase(this).insertMessageOutbox(outgoingTextMessage, threadID, false) { } // Send it - MessageSender.send(message, thread.address, attachments, null, null) + MessageSender.send(message, thread.address, attachments, quote, linkPreview) // Send a typing stopped message ApplicationContext.getInstance(this).typingStatusSender.onTypingStopped(threadID) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBar.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBar.kt index d00dc10f1..1cb12f418 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBar.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBar.kt @@ -29,6 +29,8 @@ class InputBar : RelativeLayout, InputBarEditTextDelegate, QuoteViewDelegate, Li private var linkPreviewDraftView: LinkPreviewDraftView? = null var delegate: InputBarDelegate? = null var additionalContentHeight = 0 + var quote: MessageRecord? = null + var linkPreview: LinkPreview? = null var text: String get() { return inputBarEditText.text.toString() } @@ -100,6 +102,8 @@ class InputBar : RelativeLayout, InputBarEditTextDelegate, QuoteViewDelegate, Li // a quote and a link preview at the same time. fun draftQuote(message: MessageRecord) { + quote = message + linkPreview = null linkPreviewDraftView = null inputBarAdditionalContentContainer.removeAllViews() val quoteView = QuoteView(context, QuoteView.Mode.Draft) @@ -121,6 +125,7 @@ class InputBar : RelativeLayout, InputBarEditTextDelegate, QuoteViewDelegate, Li } override fun cancelQuoteDraft() { + quote = null inputBarAdditionalContentContainer.removeAllViews() val newHeight = max(inputBarEditText.height + 2 * vMargin, minHeight) additionalContentHeight = 0 @@ -128,6 +133,7 @@ class InputBar : RelativeLayout, InputBarEditTextDelegate, QuoteViewDelegate, Li } fun draftLinkPreview() { + quote = null val linkPreviewDraftHeight = toPx(88, resources) inputBarAdditionalContentContainer.removeAllViews() val linkPreviewDraftView = LinkPreviewDraftView(context) @@ -140,11 +146,13 @@ class InputBar : RelativeLayout, InputBarEditTextDelegate, QuoteViewDelegate, Li } fun updateLinkPreviewDraft(glide: GlideRequests, linkPreview: LinkPreview) { + this.linkPreview = linkPreview val linkPreviewDraftView = this.linkPreviewDraftView ?: return linkPreviewDraftView.update(glide, linkPreview) } override fun cancelLinkPreviewDraft() { + linkPreview = null inputBarAdditionalContentContainer.removeAllViews() val newHeight = max(inputBarEditText.height + 2 * vMargin, minHeight) additionalContentHeight = 0