From dbd7bf6f88ee8253ad0b8b0165b4af5c0c4b3995 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 6 Jun 2020 14:04:31 +0200 Subject: [PATCH] Fix URL issue --- .../fedilab/android/client/Entities/Status.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Status.java b/app/src/main/java/app/fedilab/android/client/Entities/Status.java index edd0862c5..e431a69e0 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Status.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Status.java @@ -423,6 +423,7 @@ public class Status implements Parcelable { HashMap targetedURL = new HashMap<>(); HashMap accountsMentionUnknown = new HashMap<>(); String liveInstance = Helper.getLiveInstance(context); + int i = 1; while (matcher.find()) { String key; @@ -433,14 +434,14 @@ public class Status implements Parcelable { key = key.substring(1); if (!key.startsWith("#") && !key.startsWith("@") && !key.trim().equals("") && !Objects.requireNonNull(matcher.group(2)).contains("search?tag=") && !Objects.requireNonNull(matcher.group(2)).contains(liveInstance + "/users/")) { - String url; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { url = Html.fromHtml(matcher.group(2), Html.FROM_HTML_MODE_LEGACY).toString(); } else { url = Html.fromHtml(matcher.group(2)).toString(); } - targetedURL.put(key, url); + targetedURL.put(key + "|" + i, url); + i++; } else if (key.startsWith("@") || Objects.requireNonNull(matcher.group(2)).contains(liveInstance + "/users/")) { String acct; String url; @@ -603,14 +604,19 @@ public class Status implements Parcelable { } if (targetedURL.size() > 0) { Iterator it = targetedURL.entrySet().iterator(); + int endPosition = 0; while (it.hasNext()) { Map.Entry pair = (Map.Entry) it.next(); - String key = (String) pair.getKey(); + String key = ((String) pair.getKey()).split("\\|")[0]; + String url = (String) pair.getValue(); if (spannableStringT.toString().toLowerCase().contains(key.toLowerCase())) { //Accounts can be mentioned several times so we have to loop - int startPosition = spannableStringT.toString().toLowerCase().indexOf(key.toLowerCase()); - int endPosition = startPosition + key.length(); + int startPosition = spannableStringT.toString().toLowerCase().indexOf(key.toLowerCase(), endPosition); + if (startPosition < 0) { + startPosition = 0; + } + endPosition = startPosition + key.length(); if (key.contains("…") && !key.endsWith("…")) { key = key.split("…")[0] + "…"; SpannableStringBuilder ssb = new SpannableStringBuilder();