Better link replacement logic
Stephen Paul Weber
created
Don't change if already custom label by XHTML-IM or similar
If link is for current conversation JID, then don't show display name
Change summary
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 2
src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java | 2
src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java | 21
src/main/java/eu/siacs/conversations/utils/UIHelper.java | 2
4 files changed, 20 insertions(+), 7 deletions(-)
Detailed changes
@@ -4403,7 +4403,7 @@ public class XmppConnectionService extends Service {
public Conversation findUniqueConversationByJid(XmppUri xmppUri) {
List<Conversation> findings = new ArrayList<>();
for (Conversation c : getConversations()) {
- if (c.getAccount().isEnabled() && c.getJid().asBareJid().equals(xmppUri.getJid()) && ((c.getMode() == Conversational.MODE_MULTI) == xmppUri.isAction(XmppUri.ACTION_JOIN))) {
+ if (c.getAccount().isEnabled() && c.getJid().asBareJid().equals(xmppUri.getJid().asBareJid()) && ((c.getMode() == Conversational.MODE_MULTI) == xmppUri.isAction(XmppUri.ACTION_JOIN))) {
findings.add(c);
}
}
@@ -581,7 +581,7 @@ public class MessageAdapter extends ArrayAdapter<Message> {
if (highlightedTerm != null) {
StylingHelper.highlight(activity, body, highlightedTerm, StylingHelper.isDarkText(viewHolder.messageBody));
}
- MyLinkify.addLinks(body, message.getConversation().getAccount());
+ MyLinkify.addLinks(body, message.getConversation().getAccount(), message.getConversation().getJid());
viewHolder.messageBody.setAutoLinkMask(0);
viewHolder.messageBody.setText(body);
BetterLinkMovementMethod method = new BetterLinkMovementMethod() {
@@ -133,21 +133,34 @@ public class MyLinkify {
FixedURLSpan.fix(body);
}
- public static void addLinks(Editable body, Account account) {
+ public static void addLinks(Editable body, Account account, Jid context) {
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())) {
+ if (!body.subSequence(body.getSpanStart(urlspan), body.getSpanEnd(urlspan)).toString().startsWith("xmpp:")) {
+ // Already customized
+ continue;
+ }
+
try {
XmppUri xmppUri = new XmppUri(uri);
Jid jid = xmppUri.getJid();
- ListItem item = account.getBookmark(jid);
- if (item == null) item = roster.getContact(jid);
+ String display = xmppUri.toString();
+ if (jid.asBareJid().equals(context) && xmppUri.isAction("message") && xmppUri.getBody() != null) {
+ display = xmppUri.getBody();
+ } else if (jid.asBareJid().equals(context)) {
+ display = xmppUri.parameterString();
+ } else {
+ ListItem item = account.getBookmark(jid);
+ if (item == null) item = roster.getContact(jid);
+ display = item.getDisplayName() + xmppUri.parameterString();
+ }
body.replace(
body.getSpanStart(urlspan),
body.getSpanEnd(urlspan),
- item.getDisplayName() + xmppUri.parameterString()
+ display
);
} catch (final IllegalArgumentException e) { /* bad JID */ }
}
@@ -339,7 +339,7 @@ public class UIHelper {
if (textColor != 0) {
StylingHelper.format(styledBody, 0, styledBody.length() - 1, textColor);
}
- MyLinkify.addLinks(styledBody, message.getConversation().getAccount());
+ MyLinkify.addLinks(styledBody, message.getConversation().getAccount(), message.getConversation().getJid());
SpannableStringBuilder builder = new SpannableStringBuilder();
for (CharSequence l : CharSequenceUtils.split(styledBody, '\n')) {
if (l.length() > 0) {