mirror of
https://codeberg.org/tom79/Fedilab.git
synced 2024-12-23 17:20:04 +02:00
Fix issue #503 - Wrong URL displayed when long pressing a link that has been transformed
This commit is contained in:
parent
9b45f57f87
commit
5160cd65c5
3 changed files with 33 additions and 30 deletions
|
@ -127,11 +127,7 @@ public class Status implements Serializable, Cloneable {
|
|||
public synchronized Spannable getSpanContent(Context context, WeakReference<View> viewWeakReference) {
|
||||
return SpannableHelper.convert(context, content, this, null, null, true, viewWeakReference);
|
||||
}
|
||||
//Some extra spannable element - They will be filled automatically when fetching the status
|
||||
|
||||
public Spannable getSpanContentNitter() {
|
||||
return SpannableHelper.convertNitter(content);
|
||||
}
|
||||
|
||||
public synchronized Spannable getSpanSpoiler(Context context, WeakReference<View> viewWeakReference) {
|
||||
return SpannableHelper.convert(context, spoiler_text, this, null, null, true, viewWeakReference);
|
||||
|
|
|
@ -745,39 +745,56 @@ public class Helper {
|
|||
*/
|
||||
public static String transformURL(Context context, String url) {
|
||||
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
Matcher matcher = Helper.nitterPattern.matcher(url);
|
||||
Matcher matcher;
|
||||
boolean nitter = Helper.getSharedValue(context, context.getString(R.string.SET_NITTER));
|
||||
if (nitter) {
|
||||
matcher = Helper.nitterPattern.matcher(url);
|
||||
if (matcher.find()) {
|
||||
final String nitter_directory = matcher.group(2);
|
||||
String nitterHost = sharedpreferences.getString(context.getString(R.string.SET_NITTER_HOST), context.getString(R.string.DEFAULT_NITTER_HOST)).toLowerCase();
|
||||
if (nitterHost.trim().isEmpty()) {
|
||||
nitterHost = context.getString(R.string.DEFAULT_NITTER_HOST);
|
||||
}
|
||||
return "https://" + nitterHost + nitter_directory;
|
||||
}
|
||||
}
|
||||
matcher = Helper.bibliogramPattern.matcher(url);
|
||||
|
||||
boolean bibliogram = Helper.getSharedValue(context, context.getString(R.string.SET_BIBLIOGRAM));
|
||||
|
||||
if (bibliogram) {
|
||||
matcher = Helper.bibliogramPattern.matcher(url);
|
||||
if (matcher.find()) {
|
||||
final String bibliogram_directory = matcher.group(2);
|
||||
String bibliogramHost = sharedpreferences.getString(context.getString(R.string.SET_BIBLIOGRAM_HOST), context.getString(R.string.DEFAULT_BIBLIOGRAM_HOST)).toLowerCase();
|
||||
if (bibliogramHost.trim().isEmpty()) {
|
||||
bibliogramHost = context.getString(R.string.DEFAULT_BIBLIOGRAM_HOST);
|
||||
}
|
||||
return "https://" + bibliogramHost + bibliogram_directory;
|
||||
}
|
||||
}
|
||||
matcher = Helper.libredditPattern.matcher(url);
|
||||
|
||||
boolean libreddit = Helper.getSharedValue(context, context.getString(R.string.SET_LIBREDDIT));
|
||||
if (libreddit) {
|
||||
matcher = Helper.libredditPattern.matcher(url);
|
||||
if (matcher.find()) {
|
||||
final String libreddit_directory = matcher.group(3);
|
||||
String libreddit_host = sharedpreferences.getString(context.getString(R.string.SET_LIBREDDIT_HOST), context.getString(R.string.DEFAULT_LIBREDDIT_HOST)).toLowerCase();
|
||||
if (libreddit_host.trim().isEmpty()) {
|
||||
libreddit_host = context.getString(R.string.DEFAULT_LIBREDDIT_HOST);
|
||||
}
|
||||
return "https://" + libreddit_host + "/" + libreddit_directory;
|
||||
}
|
||||
}
|
||||
matcher = Helper.youtubePattern.matcher(url);
|
||||
|
||||
boolean invidious = Helper.getSharedValue(context, context.getString(R.string.SET_INVIDIOUS));
|
||||
if (invidious) {
|
||||
matcher = Helper.youtubePattern.matcher(url);
|
||||
if (matcher.find()) {
|
||||
final String youtubeId = matcher.group(3);
|
||||
String invidiousHost = sharedpreferences.getString(context.getString(R.string.SET_INVIDIOUS_HOST), context.getString(R.string.DEFAULT_INVIDIOUS_HOST)).toLowerCase();
|
||||
if (invidiousHost.trim().isEmpty()) {
|
||||
invidiousHost = context.getString(R.string.DEFAULT_INVIDIOUS_HOST);
|
||||
}
|
||||
if (matcher.group(2) != null && Objects.equals(matcher.group(2), "youtu.be")) {
|
||||
return "https://" + invidiousHost + "/watch?v=" + youtubeId + "&local=true";
|
||||
} else {
|
||||
|
@ -785,9 +802,10 @@ public class Helper {
|
|||
}
|
||||
}
|
||||
}
|
||||
matcher = Helper.mediumPattern.matcher(url);
|
||||
|
||||
boolean medium = Helper.getSharedValue(context, context.getString(R.string.REPLACE_MEDIUM));
|
||||
if (medium) {
|
||||
matcher = Helper.mediumPattern.matcher(url);
|
||||
if (matcher.find()) {
|
||||
String path = matcher.group(2);
|
||||
String user = matcher.group(1);
|
||||
|
@ -795,12 +813,16 @@ public class Helper {
|
|||
path = user + "/" + path;
|
||||
}
|
||||
String mediumReplaceHost = sharedpreferences.getString(context.getString(R.string.REPLACE_MEDIUM_HOST), context.getString(R.string.DEFAULT_REPLACE_MEDIUM_HOST)).toLowerCase();
|
||||
if (mediumReplaceHost.trim().isEmpty()) {
|
||||
mediumReplaceHost = context.getString(R.string.DEFAULT_REPLACE_MEDIUM_HOST);
|
||||
}
|
||||
return "https://" + mediumReplaceHost + "/" + path;
|
||||
}
|
||||
}
|
||||
matcher = Helper.wikipediaPattern.matcher(url);
|
||||
|
||||
boolean wikipedia = Helper.getSharedValue(context, context.getString(R.string.REPLACE_WIKIPEDIA));
|
||||
if (wikipedia) {
|
||||
matcher = Helper.wikipediaPattern.matcher(url);
|
||||
if (matcher.find()) {
|
||||
String subdomain = matcher.group(1);
|
||||
String path = matcher.group(2);
|
||||
|
@ -810,6 +832,9 @@ public class Helper {
|
|||
lang = (path.contains("?")) ? TextUtils.htmlEncode("&") : "?";
|
||||
lang = lang + "lang=" + subdomain;
|
||||
}
|
||||
if (wikipediaReplaceHost.trim().isEmpty()) {
|
||||
wikipediaReplaceHost = context.getString(R.string.DEFAULT_REPLACE_WIKIPEDIA_HOST);
|
||||
}
|
||||
return "https://" + wikipediaReplaceHost + "/" + path + lang;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -249,8 +249,8 @@ public class SpannableHelper {
|
|||
dialogBuilder.setView(popupLinksBinding.getRoot());
|
||||
AlertDialog alertDialog = dialogBuilder.create();
|
||||
alertDialog.show();
|
||||
String finalURl = url;
|
||||
String uniqueUrl = url.endsWith("…") ? url : url + "…";
|
||||
String finalURl = newURL;
|
||||
String uniqueUrl = newURL.endsWith("…") ? newURL : newURL + "…";
|
||||
if (urlDetails.containsValue(uniqueUrl)) {
|
||||
finalURl = Helper.getKeyByValue(urlDetails, uniqueUrl);
|
||||
}
|
||||
|
@ -872,24 +872,6 @@ public class SpannableHelper {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert HTML content to text. Also, it handles click on link
|
||||
* This needs to be run asynchronously
|
||||
*
|
||||
* @param text String - text to convert, it can be content, spoiler, poll items, etc.
|
||||
* @return Spannable string
|
||||
*/
|
||||
public static Spannable convertNitter(String text) {
|
||||
SpannableString initialContent;
|
||||
if (text == null) {
|
||||
return null;
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||
initialContent = new SpannableString(Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY));
|
||||
else
|
||||
initialContent = new SpannableString(Html.fromHtml(text));
|
||||
return initialContent;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue