From 5a6d101bdf06d0daadcae7d1cf525178f5ffb686 Mon Sep 17 00:00:00 2001 From: eddyizm Date: Tue, 23 Sep 2025 09:34:59 -0700 Subject: [PATCH 1/2] fix: playlist selection working now --- .../tempo/service/MediaManager.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/tempo/service/MediaManager.java b/app/src/main/java/com/cappielloantonio/tempo/service/MediaManager.java index b8a6008f..6c99c2b7 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/service/MediaManager.java +++ b/app/src/main/java/com/cappielloantonio/tempo/service/MediaManager.java @@ -11,6 +11,7 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; import androidx.media3.common.MediaItem; import androidx.media3.common.Player; +import androidx.media3.common.Timeline; import androidx.media3.common.util.UnstableApi; import androidx.media3.session.MediaBrowser; import androidx.media3.session.SessionToken; @@ -177,11 +178,24 @@ public class MediaManager { mediaBrowserListenableFuture.addListener(() -> { try { if (mediaBrowserListenableFuture.isDone()) { - mediaBrowserListenableFuture.get().clearMediaItems(); - mediaBrowserListenableFuture.get().setMediaItems(MappingUtil.mapMediaItems(media)); - mediaBrowserListenableFuture.get().prepare(); - mediaBrowserListenableFuture.get().seekTo(startIndex, 0); - mediaBrowserListenableFuture.get().play(); + MediaBrowser browser = mediaBrowserListenableFuture.get(); + browser.clearMediaItems(); + browser.setMediaItems(MappingUtil.mapMediaItems(media)); + browser.prepare(); + + Player.Listener timelineListener = new Player.Listener() { + @Override + public void onTimelineChanged(Timeline timeline, int reason) { + int itemCount = browser.getMediaItemCount(); + if (itemCount > 0 && startIndex >= 0 && startIndex < itemCount) { + browser.seekTo(startIndex, 0); + browser.play(); + browser.removeListener(this); + } + } + }; + browser.addListener(timelineListener); + enqueueDatabase(media, true, 0); } } catch (ExecutionException | InterruptedException e) { From b7d56c2d702e330b92306220730c2faa58980f38 Mon Sep 17 00:00:00 2001 From: eddyizm Date: Tue, 23 Sep 2025 12:03:04 -0700 Subject: [PATCH 2/2] fix: null check for scrobble when disconnecting from chromecast, which was crashing app --- .../java/com/cappielloantonio/tempo/service/MediaService.kt | 5 ++++- .../java/com/cappielloantonio/tempo/service/MediaService.kt | 5 ++++- .../java/com/cappielloantonio/tempo/service/MediaService.kt | 6 +++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/notquitemy/java/com/cappielloantonio/tempo/service/MediaService.kt b/app/src/notquitemy/java/com/cappielloantonio/tempo/service/MediaService.kt index 66b12ae5..4549e27e 100644 --- a/app/src/notquitemy/java/com/cappielloantonio/tempo/service/MediaService.kt +++ b/app/src/notquitemy/java/com/cappielloantonio/tempo/service/MediaService.kt @@ -264,7 +264,10 @@ class MediaService : MediaLibraryService() { override fun onTracksChanged(tracks: Tracks) { ReplayGainUtil.setReplayGain(player, tracks) - MediaManager.scrobble(player.currentMediaItem, false) + val currentMediaItem = player.currentMediaItem + if (currentMediaItem != null && currentMediaItem.mediaMetadata.extras != null) { + MediaManager.scrobble(currentMediaItem, false) + } if (player.currentMediaItemIndex + 1 == player.mediaItemCount) MediaManager.continuousPlay(player.currentMediaItem) diff --git a/app/src/play/java/com/cappielloantonio/tempo/service/MediaService.kt b/app/src/play/java/com/cappielloantonio/tempo/service/MediaService.kt index 99d6dc22..780d56a0 100644 --- a/app/src/play/java/com/cappielloantonio/tempo/service/MediaService.kt +++ b/app/src/play/java/com/cappielloantonio/tempo/service/MediaService.kt @@ -165,7 +165,10 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener { override fun onTracksChanged(tracks: Tracks) { ReplayGainUtil.setReplayGain(player, tracks) - MediaManager.scrobble(player.currentMediaItem, false) + val currentMediaItem = player.currentMediaItem + if (currentMediaItem != null && currentMediaItem.mediaMetadata.extras != null) { + MediaManager.scrobble(currentMediaItem, false) + } if (player.currentMediaItemIndex + 1 == player.mediaItemCount) MediaManager.continuousPlay(player.currentMediaItem) diff --git a/app/src/tempo/java/com/cappielloantonio/tempo/service/MediaService.kt b/app/src/tempo/java/com/cappielloantonio/tempo/service/MediaService.kt index 486d2352..a8b17ef6 100644 --- a/app/src/tempo/java/com/cappielloantonio/tempo/service/MediaService.kt +++ b/app/src/tempo/java/com/cappielloantonio/tempo/service/MediaService.kt @@ -165,7 +165,11 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener { override fun onTracksChanged(tracks: Tracks) { ReplayGainUtil.setReplayGain(player, tracks) - MediaManager.scrobble(player.currentMediaItem, false) + + val currentMediaItem = player.currentMediaItem + if (currentMediaItem != null && currentMediaItem.mediaMetadata.extras != null) { + MediaManager.scrobble(currentMediaItem, false) + } if (player.currentMediaItemIndex + 1 == player.mediaItemCount) MediaManager.continuousPlay(player.currentMediaItem)