Pause playback when swiping away...
This commit is contained in:
parent
f790e29add
commit
6e1478d896
|
@ -40,6 +40,7 @@ import org.moire.ultrasonic.service.RxBus
|
||||||
import org.moire.ultrasonic.service.plusAssign
|
import org.moire.ultrasonic.service.plusAssign
|
||||||
import org.moire.ultrasonic.util.Constants
|
import org.moire.ultrasonic.util.Constants
|
||||||
import org.moire.ultrasonic.util.Settings
|
import org.moire.ultrasonic.util.Settings
|
||||||
|
import timber.log.Timber
|
||||||
|
|
||||||
class PlaybackService : MediaLibraryService(), KoinComponent {
|
class PlaybackService : MediaLibraryService(), KoinComponent {
|
||||||
private lateinit var player: ExoPlayer
|
private lateinit var player: ExoPlayer
|
||||||
|
@ -50,6 +51,8 @@ class PlaybackService : MediaLibraryService(), KoinComponent {
|
||||||
|
|
||||||
private var rxBusSubscription = CompositeDisposable()
|
private var rxBusSubscription = CompositeDisposable()
|
||||||
|
|
||||||
|
private var isStarted = false
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For some reason the LocalConfiguration of MediaItem are stripped somewhere in ExoPlayer,
|
* For some reason the LocalConfiguration of MediaItem are stripped somewhere in ExoPlayer,
|
||||||
* and thereby customarily it is required to rebuild it..
|
* and thereby customarily it is required to rebuild it..
|
||||||
|
@ -70,15 +73,6 @@ class PlaybackService : MediaLibraryService(), KoinComponent {
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
initializeSessionAndPlayer()
|
initializeSessionAndPlayer()
|
||||||
|
|
||||||
rxBusSubscription += RxBus.activeServerChangeObservable.subscribe {
|
|
||||||
// Update the API endpoint when the active server has changed
|
|
||||||
val newClient: SubsonicAPIClient by inject()
|
|
||||||
apiDataSource.setAPIClient(newClient)
|
|
||||||
|
|
||||||
// Set the player wake mode
|
|
||||||
player.setWakeMode(getWakeModeFlag())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getWakeModeFlag(): Int {
|
private fun getWakeModeFlag(): Int {
|
||||||
|
@ -86,9 +80,8 @@ class PlaybackService : MediaLibraryService(), KoinComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
player.release()
|
Timber.i("onDestroy called")
|
||||||
mediaLibrarySession.release()
|
releasePlayerAndSession()
|
||||||
rxBusSubscription.dispose()
|
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,8 +89,22 @@ class PlaybackService : MediaLibraryService(), KoinComponent {
|
||||||
return mediaLibrarySession
|
return mediaLibrarySession
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onTaskRemoved(rootIntent: Intent?) {
|
||||||
|
Timber.i("Pausing the playback because we were swiped away")
|
||||||
|
player.pause()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun releasePlayerAndSession() {
|
||||||
|
player.release()
|
||||||
|
mediaLibrarySession.release()
|
||||||
|
rxBusSubscription.dispose()
|
||||||
|
isStarted = false
|
||||||
|
stopSelf()
|
||||||
|
}
|
||||||
|
|
||||||
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
|
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
|
||||||
private fun initializeSessionAndPlayer() {
|
private fun initializeSessionAndPlayer() {
|
||||||
|
if (isStarted) return
|
||||||
|
|
||||||
setMediaNotificationProvider(MediaNotificationProvider(UApp.applicationContext()))
|
setMediaNotificationProvider(MediaNotificationProvider(UApp.applicationContext()))
|
||||||
|
|
||||||
|
@ -134,6 +141,17 @@ class PlaybackService : MediaLibraryService(), KoinComponent {
|
||||||
.setMediaItemFiller(CustomMediaItemFiller())
|
.setMediaItemFiller(CustomMediaItemFiller())
|
||||||
.setSessionActivity(getPendingIntentForContent())
|
.setSessionActivity(getPendingIntentForContent())
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
|
// Set a listener to update the API client when the active server has changed
|
||||||
|
rxBusSubscription += RxBus.activeServerChangeObservable.subscribe {
|
||||||
|
val newClient: SubsonicAPIClient by inject()
|
||||||
|
apiDataSource.setAPIClient(newClient)
|
||||||
|
|
||||||
|
// Set the player wake mode
|
||||||
|
player.setWakeMode(getWakeModeFlag())
|
||||||
|
}
|
||||||
|
|
||||||
|
isStarted = true
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getPendingIntentForContent(): PendingIntent {
|
private fun getPendingIntentForContent(): PendingIntent {
|
||||||
|
|
Loading…
Reference in New Issue