fix(android): keep service alive when UPnP is playing -- override playWhenReady
android / Build + lint + test (push) Successful in 3m53s
android / Build + lint + test (push) Successful in 3m53s
This commit is contained in:
@@ -218,6 +218,14 @@ class MinstrelForwardingPlayer(
|
|||||||
override fun getPlaybackState(): Int =
|
override fun getPlaybackState(): Int =
|
||||||
if (isRemote()) Player.STATE_READY else super.getPlaybackState()
|
if (isRemote()) Player.STATE_READY else super.getPlaybackState()
|
||||||
|
|
||||||
|
// Mirror remote state so any consumer that gates on playWhenReady --
|
||||||
|
// notably MediaSessionService's foreground-keepalive checks and our own
|
||||||
|
// onTaskRemoved -- sees the remote renderer as the source of truth.
|
||||||
|
// Without this, swiping the app away with Sonos playing would stop the
|
||||||
|
// service, kill the poll loop, and leave Sonos orphaned.
|
||||||
|
override fun getPlayWhenReady(): Boolean =
|
||||||
|
if (isRemote()) remoteState.isPlaying else super.getPlayWhenReady()
|
||||||
|
|
||||||
override fun release() {
|
override fun release() {
|
||||||
pollJob?.cancel()
|
pollJob?.cancel()
|
||||||
scope.cancel()
|
scope.cancel()
|
||||||
|
|||||||
@@ -176,7 +176,11 @@ class MinstrelPlayerService : MediaSessionService() {
|
|||||||
|
|
||||||
override fun onTaskRemoved(rootIntent: Intent?) {
|
override fun onTaskRemoved(rootIntent: Intent?) {
|
||||||
val player = mediaSession?.player ?: return super.onTaskRemoved(rootIntent)
|
val player = mediaSession?.player ?: return super.onTaskRemoved(rootIntent)
|
||||||
val activelyPlaying = player.playWhenReady && player.playbackState != Player.STATE_ENDED
|
// player.isPlaying is overridden on MinstrelForwardingPlayer to return
|
||||||
|
// remoteState.isPlaying while UPnP is active, so a swipe-away with
|
||||||
|
// Sonos playing keeps the service (and its UPnP poll loop) alive.
|
||||||
|
val activelyPlaying = player.isPlaying ||
|
||||||
|
(player.playWhenReady && player.playbackState != Player.STATE_ENDED)
|
||||||
if (!activelyPlaying) {
|
if (!activelyPlaying) {
|
||||||
stopSelf()
|
stopSelf()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user