From e0989e7a82f65c32d655db266f67fcdc90dba77b Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Fri, 20 Sep 2019 17:31:27 +0200 Subject: replace YouTube links with Invidious links increases privacy and is configurable via preferences --- .../de/pixart/messenger/ui/util/MyLinkify.java | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/main/java/de/pixart/messenger/ui/util/MyLinkify.java') 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; -- cgit v1.2.3