From bf07874ef9743361448d80c98591ce3c5b7a604e Mon Sep 17 00:00:00 2001 From: Bnyro Date: Tue, 1 Apr 2025 10:55:04 +0200 Subject: [PATCH] fix: background shuffle mode doesn't builder a proper queue --- app/src/main/AndroidManifest.xml | 24 ----------------- .../github/libretube/db/dao/DownloadDao.kt | 3 --- .../libretube/helpers/BackgroundHelper.kt | 27 +++++-------------- .../services/OfflinePlayerService.kt | 8 +++--- .../libretube/ui/fragments/PlayerFragment.kt | 3 +-- 5 files changed, 12 insertions(+), 53 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8fb1424bf..8c391d613 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -434,30 +434,6 @@ - - - - - - - - - - - - - - - - (context).supportFragmentManager - fragmentManager.fragments.firstOrNull { it is PlayerFragment }?.let { - fragmentManager.commit { remove(it) } - } + val fragmentManager = + ContextHelper.unwrapActivity(context).supportFragmentManager + fragmentManager.fragments.firstOrNull { it is PlayerFragment }?.let { + fragmentManager.commit { remove(it) } } val playerData = PlayerData(videoId, playlistId, channelId, keepQueue, position) + stopBackgroundPlay(context) startMediaService( context, OnlinePlayerService::class.java, @@ -71,18 +67,6 @@ object BackgroundHelper { } } - /** - * Check if the [OnlinePlayerService] service is currently running. - */ - fun isBackgroundServiceRunning( - context: Context, - serviceClass: Class<*> = OnlinePlayerService::class.java - ): Boolean { - @Suppress("DEPRECATION") - return context.getSystemService()!!.getRunningServices(Int.MAX_VALUE) - .any { serviceClass.name == it.service.className } - } - /** * Start the offline background player * @@ -106,6 +90,7 @@ object BackgroundHelper { IntentData.audioOnly to true ) + stopBackgroundPlay(context) startMediaService(context, OfflinePlayerService::class.java, arguments) } diff --git a/app/src/main/java/com/github/libretube/services/OfflinePlayerService.kt b/app/src/main/java/com/github/libretube/services/OfflinePlayerService.kt index 64cedc107..3b6afd50a 100644 --- a/app/src/main/java/com/github/libretube/services/OfflinePlayerService.kt +++ b/app/src/main/java/com/github/libretube/services/OfflinePlayerService.kt @@ -75,10 +75,12 @@ open class OfflinePlayerService : AbstractPlayerService() { noInternetService = args.getBoolean(IntentData.noInternet, false) isAudioOnlyPlayer = args.getBoolean(IntentData.audioOnly, false) + PlayingQueue.clear() + val videoId = if (shuffle) { runBlocking(Dispatchers.IO) { - Database.downloadDao().getRandomVideoIdByFileType(FileType.AUDIO) - } + Database.downloadDao().getAll().filterByTab(downloadTab).randomOrNull() + }?.download?.videoId } else { args.getString(IntentData.videoId) } ?: return @@ -89,7 +91,6 @@ open class OfflinePlayerService : AbstractPlayerService() { setTrackTypeDisabled(C.TRACK_TYPE_VIDEO, isAudioOnlyPlayer) } - PlayingQueue.clear() fillQueue() } @@ -203,6 +204,7 @@ open class OfflinePlayerService : AbstractPlayerService() { Database.downloadDao().getAll() } .filterByTab(downloadTab) + .filter { it.download.videoId != videoId } .toMutableList() if (shuffle) downloads.shuffle() diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index 93f38ce3e..448f7debd 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -1481,8 +1481,7 @@ class PlayerFragment : Fragment(R.layout.fragment_player), OnlinePlayerOptions { } private fun shouldStartPiP(): Boolean { - return shouldUsePip() && ::playerController.isInitialized && playerController.isPlaying && - !BackgroundHelper.isBackgroundServiceRunning(requireContext()) + return shouldUsePip() && ::playerController.isInitialized && playerController.isPlaying } /**