Skip to content
Snippets Groups Projects
Commit ac3c41f9 authored by Robert Stone's avatar Robert Stone Committed by Nicolas Pomepuy
Browse files

Add bidirectional text marking to handle RTL languages

parent 26bfa3e9
No related branches found
No related tags found
1 merge request!1020Android Auto: Update play-from-here and library pagination
......@@ -96,4 +96,30 @@ fun String.firstLetterUppercase(): String {
return if (length == 1) {
toUpperCase(Locale.getDefault())
} else Character.toUpperCase(this[0]) + substring(1).toLowerCase(Locale.getDefault())
}
fun String.abbreviate(maxLen: Int): String {
val ellipsis = "\u2026"
val trimmed = this.trim()
return if (trimmed.length > maxLen) trimmed.take(maxLen - 1).trim().plus(ellipsis)
else trimmed
}
fun String.markBidi(): String {
//right-to-left isolate
val rli = "\u2067"
//pop directional isolate
val pdi = "\u2069"
for (ch in this) {
when (Character.getDirectionality(ch)) {
Character.DIRECTIONALITY_RIGHT_TO_LEFT,
Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC,
Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING,
Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE -> return rli + this + pdi
Character.DIRECTIONALITY_LEFT_TO_RIGHT,
Character.DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING,
Character.DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE -> return this
}
}
return this
}
\ No newline at end of file
......@@ -31,13 +31,13 @@ import org.videolan.resources.util.getFromMl
import org.videolan.tools.AppScope
import org.videolan.tools.Settings
import org.videolan.tools.localBroadcastManager
import org.videolan.tools.markBidi
import org.videolan.tools.safeOffer
import org.videolan.vlc.PlaybackService
import org.videolan.vlc.R
import org.videolan.vlc.gui.AudioPlayerContainerActivity
import org.videolan.vlc.gui.DialogActivity
import org.videolan.vlc.gui.dialogs.SubtitleDownloaderDialogFragment
import org.videolan.vlc.gui.helpers.UiTools
import org.videolan.vlc.providers.medialibrary.FoldersProvider
import org.videolan.vlc.providers.medialibrary.MedialibraryProvider
import org.videolan.vlc.providers.medialibrary.VideoGroupsProvider
......@@ -390,7 +390,7 @@ object MediaUtils {
val artist = getMediaArtist(ctx, media)
val album = getMediaAlbum(ctx, media)
val desc = if (artist != getMediaString(ctx, R.string.unknown_artist) && album != getMediaString(ctx, R.string.unknown_album))
getMediaDescription(artist, album) else ""
getMediaDescription(artist.markBidi(), album.markBidi()) else ""
sb.append(if (desc.isNotEmpty()) (if (sb.isNotEmpty()) " • $desc" else desc) else "")
//Replace full-spaces with thin-spaces (Unicode 2009)
return sb.toString().replace(" ", "\u2009")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment