From 16147e0c08635be688d603076ccaace7c89c284e Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 18 Aug 2020 18:34:18 -0400 Subject: [PATCH] Ensure link preview fetches are canceled on message send. --- .../conversation/ConversationActivity.java | 1 + .../linkpreview/LinkPreviewViewModel.java | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) 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 2c2e01461..6431a797a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -2366,6 +2366,7 @@ public class ConversationActivity extends PassphraseRequiredActivity attachmentManager.cleanup(); updateLinkPreviewState(); + linkPreviewViewModel.onSend(); } private void sendMessage() { 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 4fbaec51a..2ea159635 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewViewModel.java @@ -90,7 +90,11 @@ public class LinkPreviewViewModel extends ViewModel { Util.runOnMain(() -> { if (!userCanceled) { if (lp.isPresent()) { - linkPreviewState.setValue(LinkPreviewState.forPreview(lp.get())); + if (activeUrl != null && activeUrl.equals(lp.get().getUrl())) { + linkPreviewState.setValue(LinkPreviewState.forPreview(lp.get())); + } else { + linkPreviewState.setValue(LinkPreviewState.forNoLinks()); + } } else { linkPreviewState.setValue(LinkPreviewState.forLinksWithNoPreview()); } @@ -114,6 +118,19 @@ public class LinkPreviewViewModel extends ViewModel { linkPreviewState.setValue(LinkPreviewState.forNoLinks()); } + 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; }