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