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
}
/**