From 58f821534ebde31baa45cef33724ad48e0c1c5d1 Mon Sep 17 00:00:00 2001 From: vfsfitvnm Date: Wed, 29 Jun 2022 22:38:00 +0200 Subject: [PATCH] Add Bundle extensions --- .../vimusic/service/PlayerService.kt | 2 +- .../vfsfitvnm/vimusic/ui/views/PlayerView.kt | 20 +++++++++++++++---- .../it/vfsfitvnm/vimusic/utils/Bundle.kt | 11 ++++++++++ .../it/vfsfitvnm/vimusic/utils/utils.kt | 4 ++-- 4 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Bundle.kt diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/service/PlayerService.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/service/PlayerService.kt index 45fe960..dc53a88 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/service/PlayerService.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/service/PlayerService.kt @@ -262,7 +262,7 @@ class PlayerService : Service(), Player.Listener, PlaybackStatsListener.Callback if (preferences.volumeNormalization) { player.volume = player.currentMediaItem?.let { mediaItem -> songPendingLoudnessDb.getOrElse(mediaItem.mediaId) { - mediaItem.mediaMetadata.extras?.getFloat("loudnessDb") + mediaItem.mediaMetadata.extras?.getFloatOrNull("loudnessDb") }?.takeIf { it > 0 }?.let { loudnessDb -> (1f - (0.01f + loudnessDb / 14)).coerceIn(0.1f, 1f) } diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/views/PlayerView.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/views/PlayerView.kt index 418a306..5ea360e 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/views/PlayerView.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/views/PlayerView.kt @@ -283,6 +283,18 @@ fun PlayerView( mutableStateOf(binder?.cache?.getCachedBytes(song?.id ?: "", 0, -1) ?: 0L) } + val loudnessDb by remember { + derivedStateOf { + song?.loudnessDb ?: playerState.mediaMetadata.extras?.getFloatOrNull("loudnessDb") + } + } + + val contentLength by remember { + derivedStateOf { + song?.contentLength ?: playerState.mediaMetadata.extras?.getLongOrNull("contentLength") + } + } + DisposableEffect(song?.id) { val listener = object : Cache.Listener { override fun onSpanAdded(cache: Cache, span: CacheSpan) { @@ -363,13 +375,13 @@ fun PlayerView( style = typography.xs.semiBold.color(BlackColorPalette.text) ) BasicText( - text = song?.loudnessDb?.let { loudnessDb -> + text = loudnessDb?.let { loudnessDb -> "%.2f dB".format(loudnessDb) } ?: "Unknown", style = typography.xs.semiBold.color(BlackColorPalette.text) ) BasicText( - text = song?.contentLength?.let { contentLength -> + text = contentLength?.let { contentLength -> Formatter.formatShortFileSize( context, contentLength @@ -381,7 +393,7 @@ fun PlayerView( text = buildString { append(Formatter.formatShortFileSize(context, cachedBytes)) - song?.contentLength?.let { contentLength -> + contentLength?.let { contentLength -> append(" (${(cachedBytes.toFloat() / contentLength * 100).roundToInt()}%)") } }, @@ -390,7 +402,7 @@ fun PlayerView( } } - if (song != null && (song?.contentLength == null || song?.loudnessDb == null)) { + if (song != null && (contentLength == null || loudnessDb == null)) { BasicText( text = "FILL MISSING DATA", style = typography.xxs.semiBold.color(BlackColorPalette.text), diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Bundle.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Bundle.kt new file mode 100644 index 0000000..5910601 --- /dev/null +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Bundle.kt @@ -0,0 +1,11 @@ +package it.vfsfitvnm.vimusic.utils + +import android.os.Bundle + + +fun Bundle.getFloatOrNull(key: String): Float? = + if (containsKey(key)) getFloat(key) else null + + +fun Bundle.getLongOrNull(key: String): Long? = + if (containsKey(key)) getLong(key) else null diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/utils.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/utils.kt index 3f6381f..4eeb68a 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/utils.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/utils.kt @@ -45,8 +45,8 @@ fun Database.insert(mediaItem: MediaItem): Song { albumId = album?.id, durationText = mediaItem.mediaMetadata.extras?.getString("durationText")!!, thumbnailUrl = mediaItem.mediaMetadata.artworkUri!!.toString(), - loudnessDb = mediaItem.mediaMetadata.extras?.getFloat("loudnessDb"), - contentLength = mediaItem.mediaMetadata.extras?.getLong("contentLength"), + loudnessDb = mediaItem.mediaMetadata.extras?.getFloatOrNull("loudnessDb"), + contentLength = mediaItem.mediaMetadata.extras?.getLongOrNull("contentLength"), ).also(::insert) mediaItem.mediaMetadata.extras?.getStringArrayList("artistNames")?.let { artistNames ->