diff options
author | Christian Schneppe <christian@pix-art.de> | 2019-09-20 17:31:27 +0200 |
---|---|---|
committer | Christian Schneppe <christian@pix-art.de> | 2019-09-20 17:34:00 +0200 |
commit | e0989e7a82f65c32d655db266f67fcdc90dba77b (patch) | |
tree | b1b3ca8875f3c00eb1cd1af0b2921349c8166189 /src/main/java/de/pixart/messenger/ui/util | |
parent | 639f3c485bac93721db994339e4624b4e12e4f5f (diff) |
replace YouTube links with Invidious links
increases privacy and is configurable via preferences
Diffstat (limited to 'src/main/java/de/pixart/messenger/ui/util')
-rw-r--r-- | src/main/java/de/pixart/messenger/ui/util/MyLinkify.java | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/util/MyLinkify.java b/src/main/java/de/pixart/messenger/ui/util/MyLinkify.java index fb271cd7c..401c2cd40 100644 --- a/src/main/java/de/pixart/messenger/ui/util/MyLinkify.java +++ b/src/main/java/de/pixart/messenger/ui/util/MyLinkify.java @@ -29,13 +29,21 @@ package de.pixart.messenger.ui.util; +import android.content.Context; +import android.content.SharedPreferences; import android.os.Build; +import android.preference.PreferenceManager; import android.text.Editable; +import android.text.SpannableString; import android.text.util.Linkify; import java.util.Locale; +import java.util.regex.Matcher; import java.util.regex.Pattern; +import de.pixart.messenger.Config; +import de.pixart.messenger.R; +import de.pixart.messenger.ui.SettingsActivity; import de.pixart.messenger.ui.text.FixedURLSpan; import de.pixart.messenger.utils.GeoHelper; import de.pixart.messenger.utils.Patterns; @@ -43,6 +51,26 @@ import de.pixart.messenger.utils.XmppUri; public class MyLinkify { + private static final Pattern youtubePattern = Pattern.compile("(www\\.|m\\.)?(youtube\\.com|youtu\\.be|youtube-nocookie\\.com)\\/(((?!(\"|'|<)).)*)"); + + public static SpannableString replaceYoutube(Context context, String url) { + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); + boolean invidious = sharedPreferences.getBoolean(SettingsActivity.USE_INVIDIOUS, context.getResources().getBoolean(R.bool.use_invidious)); + if (invidious) { + Matcher matcher = youtubePattern.matcher(url); + while (matcher.find()) { + final String youtubeId = matcher.group(3); + String invidiousHost = Config.DEFAULT_INVIDIOUS_HOST.toLowerCase(); + if (matcher.group(2) != null && matcher.group(2).equals("youtu.be")) { + return new SpannableString(url.replaceAll("https://" + Pattern.quote(matcher.group()), Matcher.quoteReplacement("https://" + invidiousHost + "/watch?v=" + youtubeId + "&local=true"))); + } else { + return new SpannableString(url.replaceAll("https://" + Pattern.quote(matcher.group()), Matcher.quoteReplacement("https://" + invidiousHost + "/" + youtubeId + "&local=true"))); + } + } + } + return new SpannableString(url); + } + private static final Linkify.TransformFilter WEBURL_TRANSFORM_FILTER = (matcher, url) -> { if (url == null) { return null; |