forked from mirrors/Fedilab
Fix issue #621 - Mentions in bio does not open the correct account
This commit is contained in:
parent
6da23a9da3
commit
34a1ae16d8
1 changed files with 31 additions and 4 deletions
|
@ -53,6 +53,11 @@ import androidx.preference.PreferenceManager;
|
||||||
|
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
|
|
||||||
|
import org.jsoup.Jsoup;
|
||||||
|
import org.jsoup.nodes.Document;
|
||||||
|
import org.jsoup.nodes.Element;
|
||||||
|
import org.jsoup.select.Elements;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
|
@ -127,6 +132,19 @@ public class SpannableHelper {
|
||||||
if (text == null) {
|
if (text == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
Document htmlContent = Jsoup.parse(text);
|
||||||
|
Elements mentionElements = htmlContent.select("a.mention");
|
||||||
|
//We keep a reference to mentions
|
||||||
|
HashMap<String, String> mentionsMap = new HashMap<>();
|
||||||
|
if (mentionElements.size() > 0) {
|
||||||
|
for (int i = 0; i < mentionElements.size(); i++) {
|
||||||
|
Element mentionElement = mentionElements.get(i);
|
||||||
|
String href = mentionElement.attr("href");
|
||||||
|
String mention = mentionElement.text();
|
||||||
|
mentionsMap.put(mention, href);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
text = text.replaceAll("((<\\s?p\\s?>|<\\s?br\\s?\\/?>)>(((?!([<])).)*))", "$2<blockquote>$3</blockquote>");
|
text = text.replaceAll("((<\\s?p\\s?>|<\\s?br\\s?\\/?>)>(((?!([<])).)*))", "$2<blockquote>$3</blockquote>");
|
||||||
Pattern imgPattern = Pattern.compile("<img [^>]*src=\"([^\"]+)\"[^>]*>");
|
Pattern imgPattern = Pattern.compile("<img [^>]*src=\"([^\"]+)\"[^>]*>");
|
||||||
Matcher matcherImg = imgPattern.matcher(text);
|
Matcher matcherImg = imgPattern.matcher(text);
|
||||||
|
@ -178,7 +196,7 @@ public class SpannableHelper {
|
||||||
content.removeSpan(span);
|
content.removeSpan(span);
|
||||||
}
|
}
|
||||||
//Make tags, mentions, groups
|
//Make tags, mentions, groups
|
||||||
interaction(context, content, status, mentionList, forceMentions);
|
interaction(context, content, status, mentionList, forceMentions, mentionsMap);
|
||||||
//Make all links
|
//Make all links
|
||||||
linkify(context, content, urlDetails);
|
linkify(context, content, urlDetails);
|
||||||
linkifyURL(context, content, urlDetails);
|
linkifyURL(context, content, urlDetails);
|
||||||
|
@ -759,7 +777,7 @@ public class SpannableHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void interaction(Context context, Spannable content, Status status, List<Mention> mentions, boolean forceMentions) {
|
private static void interaction(Context context, Spannable content, Status status, List<Mention> mentions, boolean forceMentions, HashMap<String, String> mentionsMap) {
|
||||||
// --- For all patterns defined in Helper class ---
|
// --- For all patterns defined in Helper class ---
|
||||||
for (Map.Entry<Helper.PatternType, Pattern> entry : Helper.patternHashMap.entrySet()) {
|
for (Map.Entry<Helper.PatternType, Pattern> entry : Helper.patternHashMap.entrySet()) {
|
||||||
Helper.PatternType patternType = entry.getKey();
|
Helper.PatternType patternType = entry.getKey();
|
||||||
|
@ -837,8 +855,9 @@ public class SpannableHelper {
|
||||||
intent = new Intent(context, ProfileActivity.class);
|
intent = new Intent(context, ProfileActivity.class);
|
||||||
b = new Bundle();
|
b = new Bundle();
|
||||||
Mention targetedMention = null;
|
Mention targetedMention = null;
|
||||||
|
String acct = null;
|
||||||
HashMap<String, Integer> countUsername = new HashMap<>();
|
HashMap<String, Integer> countUsername = new HashMap<>();
|
||||||
|
//Mentions is retrieved with associated Mentions array
|
||||||
if (mentions != null) {
|
if (mentions != null) {
|
||||||
for (Mention mention : mentions) {
|
for (Mention mention : mentions) {
|
||||||
Integer count = countUsername.get(mention.username);
|
Integer count = countUsername.get(mention.username);
|
||||||
|
@ -861,11 +880,19 @@ public class SpannableHelper {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (mentionsMap.containsKey(word.trim())) {//Mentions will be find through its URL
|
||||||
|
URL url;
|
||||||
|
try {
|
||||||
|
url = new URL(mentionsMap.get(word.trim()));
|
||||||
|
acct = word.trim() + "@" + url.getHost();
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (targetedMention != null) {
|
if (targetedMention != null) {
|
||||||
b.putString(Helper.ARG_USER_ID, targetedMention.id);
|
b.putString(Helper.ARG_USER_ID, targetedMention.id);
|
||||||
} else {
|
} else {
|
||||||
b.putString(Helper.ARG_MENTION, word.trim());
|
b.putString(Helper.ARG_MENTION, acct != null ? acct : word.trim());
|
||||||
}
|
}
|
||||||
|
|
||||||
intent.putExtras(b);
|
intent.putExtras(b);
|
||||||
|
|
Loading…
Reference in a new issue