Browse Source

Use dash separator

Fixes #2605
merge-requests/1454/head
Robert Stone 4 years ago
parent
commit
4f5d833f27
  1. 17
      application/vlc-android/src/org/videolan/vlc/PlaybackService.kt
  2. 6
      application/vlc-android/src/org/videolan/vlc/gui/helpers/NotificationHelper.kt
  3. 6
      application/vlc-android/src/org/videolan/vlc/media/MediaSessionBrowser.kt
  4. 61
      application/vlc-android/src/org/videolan/vlc/media/MediaUtils.kt
  5. 2
      medialibrary/src/org/videolan/medialibrary/Tools.java

17
application/vlc-android/src/org/videolan/vlc/PlaybackService.kt

@ -429,15 +429,14 @@ class PlaybackService : MediaBrowserServiceCompat(), LifecycleOwner, CoroutineSc
return if (tracks.size == 1) tracks.first().formatTrackInfoString(this) else null
}
fun IMedia.AudioTrack.formatTrackInfoString(context: Context) = buildString {
if (bitrate > 0) {
append(context.getString(R.string.track_bitrate_info, bitrate.toLong().readableSize()))
append("")
}
append(context.getString(R.string.track_codec_info, codec))
append("")
append(context.getString(R.string.track_samplerate_info, rate))
}.replace("\n", "")
fun IMedia.AudioTrack.formatTrackInfoString(context: Context): String {
val trackInfo = mutableListOf<String>()
if (bitrate > 0)
trackInfo.add(context.getString(R.string.track_bitrate_info, bitrate.toLong().readableSize()))
trackInfo.add(context.getString(R.string.track_codec_info, codec))
trackInfo.add(context.getString(R.string.track_samplerate_info, rate))
return TextUtils.separatedString(trackInfo.toTypedArray()).replace("\n", "")
}
fun IMedia.getAudioTracks(): List<IMedia.AudioTrack> {
val tracks = ArrayList<IMedia.AudioTrack>()

6
application/vlc-android/src/org/videolan/vlc/gui/helpers/NotificationHelper.kt

@ -42,7 +42,7 @@ import org.videolan.tools.Settings
import org.videolan.tools.getContextWithLocale
import org.videolan.tools.hasFlag
import org.videolan.vlc.R
import org.videolan.vlc.media.MediaUtils.getMediaDescription
import org.videolan.vlc.util.TextUtils
import kotlin.math.abs
private const val MEDIALIBRRARY_CHANNEL_ID = "vlc_medialibrary"
@ -68,9 +68,9 @@ object NotificationHelper {
builder.setSmallIcon(if (video) R.drawable.ic_notif_video else R.drawable.ic_notif_audio)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setContentTitle(title)
.setContentText(getMediaDescription(artist, album))
.setContentText(TextUtils.separatedString('-', artist, album))
.setLargeIcon(cover)
.setTicker("$title - $artist")
.setTicker(TextUtils.separatedString('-', title, artist))
.setAutoCancel(!playing)
.setOngoing(playing)
.setCategory(NotificationCompat.CATEGORY_TRANSPORT)

6
application/vlc-android/src/org/videolan/vlc/media/MediaSessionBrowser.kt

@ -58,8 +58,8 @@ import org.videolan.vlc.gui.helpers.getBitmapFromDrawable
import org.videolan.vlc.isPathValid
import org.videolan.vlc.media.MediaUtils.getMediaAlbum
import org.videolan.vlc.media.MediaUtils.getMediaArtist
import org.videolan.vlc.media.MediaUtils.getMediaDescription
import org.videolan.vlc.media.MediaUtils.getMediaSubtitle
import org.videolan.vlc.util.TextUtils
import org.videolan.vlc.util.ThumbnailsProvider
import org.videolan.vlc.util.isSchemeStreaming
import java.util.concurrent.Semaphore
@ -581,7 +581,7 @@ class MediaSessionBrowser : ExtensionManagerActivity {
when {
media.type == MediaWrapper.TYPE_STREAM -> media.uri.toString()
parentId.startsWith(ID_ALBUM) -> getMediaSubtitle(media)
else -> getMediaDescription(getMediaArtist(context, media), getMediaAlbum(context, media))
else -> TextUtils.separatedString(getMediaArtist(context, media), getMediaAlbum(context, media))
}
}
MediaLibraryItem.TYPE_PLAYLIST -> res.getString(R.string.track_number, libraryItem.tracksCount)
@ -743,7 +743,7 @@ class MediaSessionBrowser : ExtensionManagerActivity {
} else if (endTitleSize > halfLabelSize) {
endTitleSize = (maxLabelSize - beginTitleSize).coerceAtMost(endTitleSize)
}
return "${beginTitle.abbreviate(beginTitleSize).markBidi()}${endTitle.abbreviate(endTitleSize).markBidi()}"
return TextUtils.separatedString(beginTitle.abbreviate(beginTitleSize).markBidi(), endTitle.abbreviate(endTitleSize).markBidi())
}
private fun getPlayAllBuilder(ctx: Context, mediaId: String, @StringRes title: Int, trackCount: Int, uri: Uri? = null): MediaDescriptionCompat.Builder {

61
application/vlc-android/src/org/videolan/vlc/media/MediaUtils.kt

@ -29,7 +29,10 @@ import org.videolan.resources.*
import org.videolan.resources.interfaces.IMediaContentResolver
import org.videolan.resources.interfaces.ResumableList
import org.videolan.resources.util.getFromMl
import org.videolan.tools.*
import org.videolan.tools.AppScope
import org.videolan.tools.Settings
import org.videolan.tools.localBroadcastManager
import org.videolan.tools.markBidi
import org.videolan.vlc.PlaybackService
import org.videolan.vlc.R
import org.videolan.vlc.gui.AudioPlayerContainerActivity
@ -38,14 +41,10 @@ import org.videolan.vlc.gui.dialogs.SubtitleDownloaderDialogFragment
import org.videolan.vlc.providers.medialibrary.FoldersProvider
import org.videolan.vlc.providers.medialibrary.MedialibraryProvider
import org.videolan.vlc.providers.medialibrary.VideoGroupsProvider
import org.videolan.vlc.util.FileUtils
import org.videolan.vlc.util.Permissions
import org.videolan.vlc.util.generateResolutionClass
import org.videolan.vlc.util.isSchemeStreaming
import org.videolan.vlc.util.*
import java.io.File
import java.security.SecureRandom
import java.util.*
import kotlin.collections.ArrayList
import kotlin.math.min
private const val TAG = "VLC/MediaUtils"
@ -318,7 +317,7 @@ object MediaUtils {
@JvmOverloads
fun openList(context: Context?, list: List<MediaWrapper>, position: Int, shuffle: Boolean = false) {
if (list.isNullOrEmpty() || context == null) return
if (list.isEmpty() || context == null) return
SuspendDialogCallback(context) { service ->
service.load(list, position)
if (shuffle && !service.isShuffling) service.shuffle()
@ -374,46 +373,30 @@ object MediaUtils {
fun getMediaGenre(ctx: Context, media: MediaWrapper?) = media?.genre
?: getMediaString(ctx, R.string.unknown_genre)
fun getMediaSubtitle(media: MediaWrapper): String? {
var subtitle = when {
media.type == MediaWrapper.TYPE_VIDEO -> ""
fun getMediaSubtitle(media: MediaWrapper): String {
val prefix = when {
media.length <= 0L -> null
media.type == MediaWrapper.TYPE_VIDEO -> Tools.millisToText(media.length)
else -> Tools.millisToString(media.length)
}
val suffix = when {
media.type == MediaWrapper.TYPE_VIDEO -> generateResolutionClass(media.width, media.height)
media.length > 0L -> media.artist
isSchemeStreaming(media.uri.scheme) -> media.uri.toString()
else -> media.artist
}
if (media.length > 0L) {
if (media.type == MediaWrapper.TYPE_VIDEO) {
subtitle = Tools.millisToText(media.length)
val resolution = generateResolutionClass(media.width, media.height)
if (resolution != null) subtitle = "$subtitle$resolution"
} else {
subtitle = if (subtitle.isNullOrEmpty()) Tools.millisToString(media.length)
else "$subtitle${Tools.millisToString(media.length)}"
}
}
return subtitle
}
fun getMediaDescription(artist: String?, album: String?): String {
val hasArtist = !artist.isNullOrEmpty()
val hasAlbum = !album.isNullOrEmpty()
if (!hasAlbum && !hasArtist) return ""
val contentBuilder = StringBuilder(artist ?: "")
if (hasArtist && hasAlbum) contentBuilder.append(" - ")
if (hasAlbum) contentBuilder.append(album)
return contentBuilder.toString()
return TextUtils.separatedString(prefix, suffix)
}
fun getDisplaySubtitle(ctx: Context, media: MediaWrapper, mediaPosition: Int, mediaSize: Int): String {
val sb = StringBuilder()
if (mediaSize > 1) sb.append("${mediaPosition + 1} / $mediaSize")
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.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")
val artist = getMediaArtist(ctx, media)
val isAlbumUnknown = album == getMediaString(ctx, R.string.unknown_album)
val isArtistUnknown = artist == getMediaString(ctx, R.string.unknown_artist)
val prefix = if (mediaSize > 1) "${mediaPosition + 1} / $mediaSize" else null
val suffix = if (!isArtistUnknown && !isAlbumUnknown) TextUtils.separatedString('-', artist.markBidi(), album.markBidi()) else null
//Replace full-spaces with thin-spaces (Unicode 2009)}
return TextUtils.separatedString(prefix, suffix).replace(" ", "\u2009")
}
fun getMediaTitle(mediaWrapper: MediaWrapper) = mediaWrapper.title

2
medialibrary/src/org/videolan/medialibrary/Tools.java

@ -96,7 +96,7 @@ public class Tools {
final String artist = mw.getReferenceArtist(), album = mw.getAlbum();
final StringBuilder sb = new StringBuilder();
boolean hasArtist = !TextUtils.isEmpty(artist), hasAlbum = !TextUtils.isEmpty(album);
if (hasArtist && hasAlbum) sb.append(artist).append(" · ").append(album);
if (hasArtist && hasAlbum) sb.append(artist).append(" - ").append(album);
else if (hasArtist) sb.append(artist);
else sb.append(album);
item.setDescription(sb.toString());

Loading…
Cancel
Save