From e16b196668afe09edd3f821a8137350fb880dc20 Mon Sep 17 00:00:00 2001 From: Christian Schneppe <christian.schneppe@pix-art.de> Date: Tue, 17 Nov 2020 17:22:13 +0100 Subject: [PATCH] show link preview also for links in messages --- .../siacs/conversations/entities/Message.java | 18 +++++++++++++++++- .../ui/adapter/MessageAdapter.java | 10 ++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index d1e168881..a3958188d 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -19,6 +19,8 @@ import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import eu.siacs.conversations.Config; import eu.siacs.conversations.crypto.axolotl.FingerprintStatus; @@ -122,6 +124,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable private Boolean isGeoUri = null; private Boolean isXmppUri = null; private Boolean isWebUri = null; + private String WebUri = ""; private Boolean isEmojisOnly = null; private Boolean treatAsDownloadable = null; private FileParams fileParams = null; @@ -863,11 +866,24 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable public synchronized boolean isWebUri() { if (isWebUri == null) { - isWebUri = Patterns.WEB_URL.matcher(body).matches(); + Pattern pattern = Patterns.WEB_URL; + Matcher matcher = pattern.matcher(body); + isWebUri = matcher.find(); } return isWebUri; } + public synchronized String getWebUri() { + if (isWebUri) { + Pattern pattern = Patterns.WEB_URL; + Matcher matcher = pattern.matcher(body); + if (WebUri.equalsIgnoreCase("") && matcher.find()) { + WebUri = matcher.group(0); + }; + } + return WebUri; + } + public synchronized void resetFileParams() { this.fileParams = null; } diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java index 812273c3b..14e8388bf 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -651,6 +651,9 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie StylingHelper.highlight(activity, body, highlightedTerm, StylingHelper.isDarkText(viewHolder.messageBody)); } } + if (message.isWebUri() && (message.getWebUri() != null || message.getWebUri().equalsIgnoreCase(""))) { + displayRichLinkMessage(viewHolder, message, darkBackground); + } MyLinkify.addLinks(body, true); viewHolder.messageBody.setAutoLinkMask(0); viewHolder.messageBody.setText(EmojiWrapper.transform(body)); @@ -775,7 +778,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie viewHolder.gifImage.setVisibility(View.GONE); viewHolder.download_button.setVisibility(View.GONE); viewHolder.progressBar.setVisibility(View.GONE); - final SpannableStringBuilder body = new SpannableStringBuilder(replaceYoutube(activity.getApplicationContext(), message.getMergedBody().toString())); + final SpannableStringBuilder body = new SpannableStringBuilder(replaceYoutube(activity.getApplicationContext(), message.getWebUri())); final boolean dataSaverDisabled = activity.xmppConnectionService.isDataSaverDisabled(); viewHolder.richlinkview.setVisibility(View.VISIBLE); if (mShowLinksInside) { @@ -793,12 +796,13 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie viewHolder.richlinkview.setLayoutParams(layoutParams); final String url = body.toString(); final String weburl; - final String lcUrl = url.toLowerCase(Locale.US).trim(); + final String lcUrl = url.trim(); if (lcUrl.startsWith("http://") || lcUrl.startsWith("https://")) { weburl = removeTrailingBracket(url); } else { weburl = "http://" + removeTrailingBracket(url); } + Log.d(Config.LOGTAG, "Weburi: " + weburl); viewHolder.richlinkview.setLink(weburl, message.getUuid(), dataSaverDisabled, activity.xmppConnectionService, new RichPreview.ViewListener() { @Override @@ -1274,8 +1278,6 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie UIHelper.getFileDescriptionString(activity, message)), darkBackground); } - } else if (message.isWebUri()) { - displayRichLinkMessage(viewHolder, message, darkBackground); } else { displayTextMessage(viewHolder, message, darkBackground, type); }