Change summary
src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java | 16
src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java | 24
src/main/java/eu/siacs/conversations/utils/UIHelper.java | 2
3 files changed, 27 insertions(+), 15 deletions(-)
Detailed changes
@@ -496,21 +496,7 @@ public class MessageAdapter extends ArrayAdapter<Message> {
if (highlightedTerm != null) {
StylingHelper.highlight(activity, body, highlightedTerm, StylingHelper.isDarkText(viewHolder.messageBody));
}
- MyLinkify.addLinks(body, true);
- Roster roster = message.getConversation().getAccount().getRoster();
- for (final URLSpan urlspan : body.getSpans(0, body.length() - 1, URLSpan.class)) {
- Uri uri = Uri.parse(urlspan.getURL());
- if ("xmpp".equals(uri.getScheme())) {
- try {
- Contact contact = roster.getContact(Jid.of(uri.getSchemeSpecificPart()));
- body.replace(
- body.getSpanStart(urlspan),
- body.getSpanEnd(urlspan),
- contact.getDisplayName()
- );
- } catch (final IllegalArgumentException e) { /* bad JID */ }
- }
- }
+ MyLinkify.addLinks(body, message.getConversation().getAccount());
viewHolder.messageBody.setAutoLinkMask(0);
viewHolder.messageBody.setText(body);
viewHolder.messageBody.setMovementMethod(ClickableMovementMethod.getInstance());
@@ -29,16 +29,22 @@
package eu.siacs.conversations.ui.util;
+import android.net.Uri;
import android.os.Build;
import android.text.Editable;
+import android.text.style.URLSpan;
import android.text.util.Linkify;
import java.util.Locale;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.entities.Contact;
+import eu.siacs.conversations.entities.Roster;
import eu.siacs.conversations.ui.text.FixedURLSpan;
import eu.siacs.conversations.utils.GeoHelper;
import eu.siacs.conversations.utils.Patterns;
import eu.siacs.conversations.utils.XmppUri;
+import eu.siacs.conversations.xmpp.Jid;
public class MyLinkify {
@@ -118,4 +124,22 @@ public class MyLinkify {
}
FixedURLSpan.fix(body);
}
+
+ public static void addLinks(Editable body, Account account) {
+ addLinks(body, true);
+ Roster roster = account.getRoster();
+ for (final URLSpan urlspan : body.getSpans(0, body.length() - 1, URLSpan.class)) {
+ Uri uri = Uri.parse(urlspan.getURL());
+ if ("xmpp".equals(uri.getScheme())) {
+ try {
+ Contact contact = roster.getContact(Jid.of(uri.getSchemeSpecificPart()));
+ body.replace(
+ body.getSpanStart(urlspan),
+ body.getSpanEnd(urlspan),
+ contact.getDisplayName()
+ );
+ } catch (final IllegalArgumentException e) { /* bad JID */ }
+ }
+ }
+ }
}
@@ -32,6 +32,7 @@ import eu.siacs.conversations.entities.Presence;
import eu.siacs.conversations.entities.RtpSessionStatus;
import eu.siacs.conversations.entities.Transferable;
import eu.siacs.conversations.services.ExportBackupService;
+import eu.siacs.conversations.ui.util.MyLinkify;
import eu.siacs.conversations.ui.util.QuoteHelper;
import eu.siacs.conversations.xmpp.Jid;
@@ -322,6 +323,7 @@ public class UIHelper {
if (textColor != 0) {
StylingHelper.format(styledBody, 0, styledBody.length() - 1, textColor);
}
+ MyLinkify.addLinks(styledBody, message.getConversation().getAccount());
SpannableStringBuilder builder = new SpannableStringBuilder();
for (CharSequence l : CharSequenceUtils.split(styledBody, '\n')) {
if (l.length() > 0) {