Fix issue #503 - Wrong URL displayed when long pressing a link that has been transformed
This commit is contained in:
parent
9b45f57f87
commit
5160cd65c5
|
@ -127,11 +127,7 @@ public class Status implements Serializable, Cloneable {
|
||||||
public synchronized Spannable getSpanContent(Context context, WeakReference<View> viewWeakReference) {
|
public synchronized Spannable getSpanContent(Context context, WeakReference<View> viewWeakReference) {
|
||||||
return SpannableHelper.convert(context, content, this, null, null, true, 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) {
|
public synchronized Spannable getSpanSpoiler(Context context, WeakReference<View> viewWeakReference) {
|
||||||
return SpannableHelper.convert(context, spoiler_text, this, null, null, true, 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) {
|
public static String transformURL(Context context, String url) {
|
||||||
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
Matcher matcher = Helper.nitterPattern.matcher(url);
|
Matcher matcher;
|
||||||
boolean nitter = Helper.getSharedValue(context, context.getString(R.string.SET_NITTER));
|
boolean nitter = Helper.getSharedValue(context, context.getString(R.string.SET_NITTER));
|
||||||
if (nitter) {
|
if (nitter) {
|
||||||
|
matcher = Helper.nitterPattern.matcher(url);
|
||||||
if (matcher.find()) {
|
if (matcher.find()) {
|
||||||
final String nitter_directory = matcher.group(2);
|
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();
|
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;
|
return "https://" + nitterHost + nitter_directory;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
matcher = Helper.bibliogramPattern.matcher(url);
|
|
||||||
boolean bibliogram = Helper.getSharedValue(context, context.getString(R.string.SET_BIBLIOGRAM));
|
boolean bibliogram = Helper.getSharedValue(context, context.getString(R.string.SET_BIBLIOGRAM));
|
||||||
|
|
||||||
if (bibliogram) {
|
if (bibliogram) {
|
||||||
|
matcher = Helper.bibliogramPattern.matcher(url);
|
||||||
if (matcher.find()) {
|
if (matcher.find()) {
|
||||||
final String bibliogram_directory = matcher.group(2);
|
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();
|
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;
|
return "https://" + bibliogramHost + bibliogram_directory;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
matcher = Helper.libredditPattern.matcher(url);
|
|
||||||
boolean libreddit = Helper.getSharedValue(context, context.getString(R.string.SET_LIBREDDIT));
|
boolean libreddit = Helper.getSharedValue(context, context.getString(R.string.SET_LIBREDDIT));
|
||||||
if (libreddit) {
|
if (libreddit) {
|
||||||
|
matcher = Helper.libredditPattern.matcher(url);
|
||||||
if (matcher.find()) {
|
if (matcher.find()) {
|
||||||
final String libreddit_directory = matcher.group(3);
|
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();
|
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;
|
return "https://" + libreddit_host + "/" + libreddit_directory;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
matcher = Helper.youtubePattern.matcher(url);
|
|
||||||
boolean invidious = Helper.getSharedValue(context, context.getString(R.string.SET_INVIDIOUS));
|
boolean invidious = Helper.getSharedValue(context, context.getString(R.string.SET_INVIDIOUS));
|
||||||
if (invidious) {
|
if (invidious) {
|
||||||
|
matcher = Helper.youtubePattern.matcher(url);
|
||||||
if (matcher.find()) {
|
if (matcher.find()) {
|
||||||
final String youtubeId = matcher.group(3);
|
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();
|
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")) {
|
if (matcher.group(2) != null && Objects.equals(matcher.group(2), "youtu.be")) {
|
||||||
return "https://" + invidiousHost + "/watch?v=" + youtubeId + "&local=true";
|
return "https://" + invidiousHost + "/watch?v=" + youtubeId + "&local=true";
|
||||||
} else {
|
} else {
|
||||||
|
@ -785,9 +802,10 @@ public class Helper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
matcher = Helper.mediumPattern.matcher(url);
|
|
||||||
boolean medium = Helper.getSharedValue(context, context.getString(R.string.REPLACE_MEDIUM));
|
boolean medium = Helper.getSharedValue(context, context.getString(R.string.REPLACE_MEDIUM));
|
||||||
if (medium) {
|
if (medium) {
|
||||||
|
matcher = Helper.mediumPattern.matcher(url);
|
||||||
if (matcher.find()) {
|
if (matcher.find()) {
|
||||||
String path = matcher.group(2);
|
String path = matcher.group(2);
|
||||||
String user = matcher.group(1);
|
String user = matcher.group(1);
|
||||||
|
@ -795,12 +813,16 @@ public class Helper {
|
||||||
path = user + "/" + path;
|
path = user + "/" + path;
|
||||||
}
|
}
|
||||||
String mediumReplaceHost = sharedpreferences.getString(context.getString(R.string.REPLACE_MEDIUM_HOST), context.getString(R.string.DEFAULT_REPLACE_MEDIUM_HOST)).toLowerCase();
|
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;
|
return "https://" + mediumReplaceHost + "/" + path;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
matcher = Helper.wikipediaPattern.matcher(url);
|
|
||||||
boolean wikipedia = Helper.getSharedValue(context, context.getString(R.string.REPLACE_WIKIPEDIA));
|
boolean wikipedia = Helper.getSharedValue(context, context.getString(R.string.REPLACE_WIKIPEDIA));
|
||||||
if (wikipedia) {
|
if (wikipedia) {
|
||||||
|
matcher = Helper.wikipediaPattern.matcher(url);
|
||||||
if (matcher.find()) {
|
if (matcher.find()) {
|
||||||
String subdomain = matcher.group(1);
|
String subdomain = matcher.group(1);
|
||||||
String path = matcher.group(2);
|
String path = matcher.group(2);
|
||||||
|
@ -810,6 +832,9 @@ public class Helper {
|
||||||
lang = (path.contains("?")) ? TextUtils.htmlEncode("&") : "?";
|
lang = (path.contains("?")) ? TextUtils.htmlEncode("&") : "?";
|
||||||
lang = lang + "lang=" + subdomain;
|
lang = lang + "lang=" + subdomain;
|
||||||
}
|
}
|
||||||
|
if (wikipediaReplaceHost.trim().isEmpty()) {
|
||||||
|
wikipediaReplaceHost = context.getString(R.string.DEFAULT_REPLACE_WIKIPEDIA_HOST);
|
||||||
|
}
|
||||||
return "https://" + wikipediaReplaceHost + "/" + path + lang;
|
return "https://" + wikipediaReplaceHost + "/" + path + lang;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -249,8 +249,8 @@ public class SpannableHelper {
|
||||||
dialogBuilder.setView(popupLinksBinding.getRoot());
|
dialogBuilder.setView(popupLinksBinding.getRoot());
|
||||||
AlertDialog alertDialog = dialogBuilder.create();
|
AlertDialog alertDialog = dialogBuilder.create();
|
||||||
alertDialog.show();
|
alertDialog.show();
|
||||||
String finalURl = url;
|
String finalURl = newURL;
|
||||||
String uniqueUrl = url.endsWith("…") ? url : url + "…";
|
String uniqueUrl = newURL.endsWith("…") ? newURL : newURL + "…";
|
||||||
if (urlDetails.containsValue(uniqueUrl)) {
|
if (urlDetails.containsValue(uniqueUrl)) {
|
||||||
finalURl = Helper.getKeyByValue(urlDetails, 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 New Issue