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 b8fd145f7c..61dad90d24 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -2846,7 +2846,6 @@ public class ConversationActivity extends PassphraseRequiredActivity attachmentManager.cleanup(); updateLinkPreviewState(); - linkPreviewViewModel.onSend(); } private void sendMessage() { @@ -2939,13 +2938,14 @@ public class ConversationActivity extends PassphraseRequiredActivity throws InvalidMessageException { Log.i(TAG, "Sending media message..."); + List linkPreviews = linkPreviewViewModel.onSend(); sendMediaMessage(recipient.getId(), forceSms, getMessage(), attachmentManager.buildSlideDeck(), inputPanel.getQuote().orNull(), Collections.emptyList(), - linkPreviewViewModel.getActiveLinkPreviews(), + linkPreviews, composeText.getMentions(), expiresIn, viewOnce, diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewViewModel.java index 8fe9560e94..c1462d1db4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewViewModel.java @@ -53,13 +53,27 @@ public class LinkPreviewViewModel extends ViewModel { return linkPreviewSafeState.getValue() != null && linkPreviewSafeState.getValue().hasContent(); } - public @NonNull List getActiveLinkPreviews() { - final LinkPreviewState state = linkPreviewSafeState.getValue(); + /** + * Gets the current state for use in the UI, then resets local state to prepare for the next message send. + */ + public @NonNull List onSend() { + final LinkPreviewState currentState = linkPreviewSafeState.getValue(); - if (state == null || !state.getLinkPreview().isPresent()) { + if (activeRequest != null) { + activeRequest.cancel(); + activeRequest = null; + } + + userCanceled = false; + activeUrl = null; + + debouncer.clear(); + linkPreviewState.setValue(LinkPreviewState.forNoLinks()); + + if (currentState == null || !currentState.getLinkPreview().isPresent()) { return Collections.emptyList(); } else { - return Collections.singletonList(state.getLinkPreview().get()); + return Collections.singletonList(currentState.getLinkPreview().get()); } } @@ -115,7 +129,11 @@ public class LinkPreviewViewModel extends ViewModel { public void onError(@NonNull LinkPreviewRepository.Error error) { ThreadUtil.runOnMain(() -> { if (!userCanceled) { - linkPreviewState.setValue(LinkPreviewState.forLinksWithNoPreview(error)); + if (activeUrl != null) { + linkPreviewState.setValue(LinkPreviewState.forLinksWithNoPreview(error)); + } else { + linkPreviewState.setValue(LinkPreviewState.forNoLinks()); + } } activeRequest = null; }); @@ -145,19 +163,6 @@ public class LinkPreviewViewModel extends ViewModel { } } - public void onSend() { - if (activeRequest != null) { - activeRequest.cancel(); - activeRequest = null; - } - - userCanceled = false; - activeUrl = null; - - debouncer.clear(); - linkPreviewState.setValue(LinkPreviewState.forNoLinks()); - } - public void onEnabled() { userCanceled = false; enabled = SignalStore.settings().isLinkPreviewsEnabled();