diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentInfoItemHolder.java
index 839aa1813..a19831cc7 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentInfoItemHolder.java
@@ -101,14 +101,16 @@ public class CommentInfoItemHolder extends InfoItemHolder {
}
itemThumbnailView.setOnClickListener(view -> openCommentAuthor(item));
-
// setup the top row, with pinned icon, author name and comment date
itemPinnedView.setVisibility(item.isPinned() ? View.VISIBLE : View.GONE);
- itemTitleView.setText(Localization.concatenateStrings(item.getUploaderName(),
- Localization.relativeTimeOrTextual(itemBuilder.getContext(), item.getUploadDate(),
+ final String uploaderName = Localization.localizeUserName(item.getUploaderName());
+ itemTitleView.setText(Localization.concatenateStrings(
+ uploaderName,
+ Localization.relativeTimeOrTextual(
+ itemBuilder.getContext(),
+ item.getUploadDate(),
item.getTextualUploadDate())));
-
// setup bottom row, with likes, heart and replies button
itemLikesCountView.setText(
Localization.likeCount(itemBuilder.getContext(), item.getLikeCount()));
diff --git a/app/src/main/java/org/schabi/newpipe/util/Localization.java b/app/src/main/java/org/schabi/newpipe/util/Localization.java
index 2146cf8bc..e92ad0b1c 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Localization.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java
@@ -11,6 +11,7 @@ import android.icu.text.CompactDecimalFormat;
import android.os.Build;
import android.text.TextUtils;
import android.text.format.DateUtils;
+import android.text.BidiFormatter;
import android.util.DisplayMetrics;
import android.util.Log;
@@ -85,6 +86,25 @@ public final class Localization {
.collect(Collectors.joining(delimiter));
}
+ /**
+ * Localize a user name like @foobar
.
+ *
+ * Will correctly handle right-to-left usernames by using a {@link BidiFormatter}.
+ *
+ * @param plainName username, with an optional leading @
+ * @return a usernames that can include RTL-characters
+ */
+ @NonNull
+ public static String localizeUserName(final String plainName) {
+ final BidiFormatter bidi = BidiFormatter.getInstance();
+
+ if (plainName.startsWith("@")) {
+ return "@" + bidi.unicodeWrap(plainName.substring(1));
+ } else {
+ return bidi.unicodeWrap(plainName);
+ }
+ }
+
public static org.schabi.newpipe.extractor.localization.Localization getPreferredLocalization(
final Context context) {
return org.schabi.newpipe.extractor.localization.Localization