aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/ui
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/java/de/pixart/messenger/ui/SettingsActivity.java1
-rw-r--r--src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java6
-rw-r--r--src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java10
-rw-r--r--src/main/java/de/pixart/messenger/ui/util/MyLinkify.java28
4 files changed, 39 insertions, 6 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/SettingsActivity.java b/src/main/java/de/pixart/messenger/ui/SettingsActivity.java
index fae741587..3c70ee089 100644
--- a/src/main/java/de/pixart/messenger/ui/SettingsActivity.java
+++ b/src/main/java/de/pixart/messenger/ui/SettingsActivity.java
@@ -69,6 +69,7 @@ public class SettingsActivity extends XmppActivity implements
public static final String FORBID_SCREENSHOTS = "screen_security";
public static final String CONFIRM_MESSAGES = "confirm_messages";
public static final String INDICATE_RECEIVED = "indicate_received";
+ public static final String USE_INVIDIOUS = "use_invidious";
public static final int REQUEST_CREATE_BACKUP = 0xbf8701;
Preference multiAccountPreference;
diff --git a/src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java b/src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java
index f7be6a365..fe4218dd4 100644
--- a/src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java
+++ b/src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java
@@ -29,6 +29,8 @@ import de.pixart.messenger.utils.UIHelper;
import de.pixart.messenger.xmpp.chatstate.ChatState;
import rocks.xmpp.addr.Jid;
+import static de.pixart.messenger.ui.util.MyLinkify.replaceYoutube;
+
public class ConversationAdapter extends RecyclerView.Adapter<ConversationAdapter.ConversationViewHolder> {
private XmppActivity activity;
@@ -104,7 +106,7 @@ public class ConversationAdapter extends RecyclerView.Adapter<ConversationAdapte
if (draft != null) {
viewHolder.binding.conversationLastmsgImg.setVisibility(View.GONE);
- viewHolder.binding.conversationLastmsg.setText(EmojiWrapper.transform(draft.getMessage()));
+ viewHolder.binding.conversationLastmsg.setText(EmojiWrapper.transform(replaceYoutube(activity.getApplicationContext(), draft.getMessage())));
viewHolder.binding.senderName.setText(R.string.draft);
viewHolder.binding.senderName.setVisibility(View.VISIBLE);
viewHolder.binding.conversationLastmsg.setTypeface(null, Typeface.NORMAL);
@@ -147,7 +149,7 @@ public class ConversationAdapter extends RecyclerView.Adapter<ConversationAdapte
}
final Pair<CharSequence, Boolean> preview = UIHelper.getMessagePreview(activity, message, viewHolder.binding.conversationLastmsg.getCurrentTextColor());
if (showPreviewText) {
- viewHolder.binding.conversationLastmsg.setText(EmojiWrapper.transform(UIHelper.shorten(preview.first)));
+ viewHolder.binding.conversationLastmsg.setText(EmojiWrapper.transform(UIHelper.shorten(replaceYoutube(activity.getApplicationContext(), preview.first.toString()))));
} else {
viewHolder.binding.conversationLastmsgImg.setContentDescription(preview.first);
}
diff --git a/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java b/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java
index 1dd98b5bf..e3719d205 100644
--- a/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java
+++ b/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java
@@ -90,6 +90,7 @@ import static de.pixart.messenger.ui.SettingsActivity.PLAY_GIF_INSIDE;
import static de.pixart.messenger.ui.SettingsActivity.SHOW_LINKS_INSIDE;
import static de.pixart.messenger.ui.SettingsActivity.SHOW_MAPS_INSIDE;
import static de.pixart.messenger.ui.util.MyLinkify.removeTrailingBracket;
+import static de.pixart.messenger.ui.util.MyLinkify.replaceYoutube;
public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextView.CopyHandler {
@@ -536,7 +537,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
viewHolder.messageBody.setTypeface(null, Typeface.NORMAL);
if (message.getBody() != null) {
final String nick = UIHelper.getMessageDisplayName(message);
- SpannableStringBuilder body = message.getMergedBody();
+ SpannableStringBuilder body = new SpannableStringBuilder(replaceYoutube(activity.getApplicationContext(), message.getMergedBody().toString()));
boolean hasMeCommand = message.hasMeCommand();
if (hasMeCommand) {
body = body.replace(0, Message.ME_COMMAND.length(), nick);
@@ -695,7 +696,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
viewHolder.image.setVisibility(View.GONE);
viewHolder.gifImage.setVisibility(View.GONE);
viewHolder.download_button.setVisibility(View.GONE);
- Editable body = new SpannableStringBuilder(message.getBody());
+ SpannableStringBuilder body = new SpannableStringBuilder(replaceYoutube(activity.getApplicationContext(), message.getMergedBody().toString()));
final boolean dataSaverDisabled = activity.xmppConnectionService.isDataSaverDisabled();
viewHolder.richlinkview.setVisibility(View.VISIBLE);
if (mShowLinksInside) {
@@ -857,6 +858,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
}
private void toggleWhisperInfo(ViewHolder viewHolder, final Message message, final boolean includeBody, final boolean darkBackground) {
+ SpannableStringBuilder messageBody = new SpannableStringBuilder(replaceYoutube(activity.getApplicationContext(), message.getBody()));
Editable body;
if (message.isPrivateMessage()) {
final String privateMarker;
@@ -870,7 +872,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
viewHolder.messageBody.setVisibility(View.VISIBLE);
if (includeBody) {
body.append("\n");
- body.append(message.getBody());
+ body.append(messageBody);
}
body.setSpan(new ForegroundColorSpan(getMessageTextColor(darkBackground, false)), 0, privateMarker.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
body.setSpan(new StyleSpan(Typeface.BOLD), 0, privateMarker.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
@@ -883,7 +885,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
} else {
if (includeBody) {
viewHolder.messageBody.setVisibility(View.VISIBLE);
- body = new SpannableStringBuilder(message.getBody());
+ body = new SpannableStringBuilder(messageBody);
MyLinkify.addLinks(body, false);
viewHolder.messageBody.setAutoLinkMask(0);
viewHolder.messageBody.setText(body);
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;