From c6608eaa90a409057d5a43f931642e4fb2ee9dc9 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Sun, 12 Feb 2023 23:31:56 +0100 Subject: [PATCH] MusicService: add seeking ability --- .../de/mm20/launcher2/music/MusicService.kt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/services/music/src/main/java/de/mm20/launcher2/music/MusicService.kt b/services/music/src/main/java/de/mm20/launcher2/music/MusicService.kt index 1a6db605..dd23eaf9 100644 --- a/services/music/src/main/java/de/mm20/launcher2/music/MusicService.kt +++ b/services/music/src/main/java/de/mm20/launcher2/music/MusicService.kt @@ -50,6 +50,7 @@ interface MusicService { val artist: Flow val album: Flow val albumArt: Flow + val duration: Flow val lastPlayerPackage: String? @@ -58,6 +59,7 @@ interface MusicService { fun pause() fun play() fun togglePause() + fun seekTo(position: Long) fun openPlayer(): PendingIntent? fun openPlayerChooser(context: Context) @@ -310,6 +312,18 @@ internal class MusicServiceImpl( } }.shareIn(scope, SharingStarted.WhileSubscribed(), 1) + override val duration: Flow = channelFlow { + currentMetadata.collectLatest { metadata -> + if (metadata == null) { + send(null) + return@collectLatest + } + val duration = metadata.getLong(MediaMetadata.METADATA_KEY_DURATION) + send(duration.takeIf { it > 0 }) + } + }.shareIn(scope, SharingStarted.WhileSubscribed(), 1) + + private suspend fun loadBitmapFromUri(uri: Uri, size: Int): Bitmap? { try { val request = ImageRequest.Builder(context) @@ -419,6 +433,13 @@ internal class MusicServiceImpl( } } + override fun seekTo(position: Long) { + scope.launch { + val controller = currentMediaController.firstOrNull() + controller?.transportControls?.seekTo(position) + } + } + override fun openPlayer(): PendingIntent? { val controller = currentMediaController.replayCache.firstOrNull()