diff --git a/app/src/main/java/com/github/libretube/services/AbstractPlayerService.kt b/app/src/main/java/com/github/libretube/services/AbstractPlayerService.kt index f938e9eb2..cba1fd41b 100644 --- a/app/src/main/java/com/github/libretube/services/AbstractPlayerService.kt +++ b/app/src/main/java/com/github/libretube/services/AbstractPlayerService.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.os.Handler import android.os.Looper import android.view.KeyEvent +import androidx.annotation.CallSuper import androidx.annotation.OptIn import androidx.core.app.ServiceCompat import androidx.core.os.bundleOf @@ -51,7 +52,8 @@ abstract class AbstractPlayerService : MediaLibraryService(), MediaLibrarySessio lateinit var videoId: String private set - var isTransitioning = true + var isTransitioning = false + private set val handler = Handler(Looper.getMainLooper()) @@ -88,6 +90,14 @@ abstract class AbstractPlayerService : MediaLibraryService(), MediaLibrarySessio ) } } + + override fun onPlaybackStateChanged(playbackState: Int) { + super.onPlaybackStateChanged(playbackState) + + if (playbackState == Player.STATE_READY) { + isTransitioning = false + } + } } override fun onCustomCommand( @@ -311,7 +321,10 @@ abstract class AbstractPlayerService : MediaLibraryService(), MediaLibrarySessio * * This function should base its actions on the videoId variable. */ - abstract suspend fun startPlayback() + @CallSuper + open suspend fun startPlayback() { + isTransitioning = true + } private fun saveWatchPosition() { if (isTransitioning || !watchPositionsEnabled) return 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 62a18d260..ecfe2fccc 100644 --- a/app/src/main/java/com/github/libretube/services/OfflinePlayerService.kt +++ b/app/src/main/java/com/github/libretube/services/OfflinePlayerService.kt @@ -90,6 +90,8 @@ open class OfflinePlayerService : AbstractPlayerService() { * Attempt to start an audio player with the given download items */ override suspend fun startPlayback() { + super.startPlayback() + val downloadWithItems = withContext(Dispatchers.IO) { Database.downloadDao().findById(videoId) }!! diff --git a/app/src/main/java/com/github/libretube/services/OnlinePlayerService.kt b/app/src/main/java/com/github/libretube/services/OnlinePlayerService.kt index 08671037b..099895a1c 100644 --- a/app/src/main/java/com/github/libretube/services/OnlinePlayerService.kt +++ b/app/src/main/java/com/github/libretube/services/OnlinePlayerService.kt @@ -77,8 +77,6 @@ open class OnlinePlayerService : AbstractPlayerService() { Player.STATE_BUFFERING -> {} Player.STATE_READY -> { - isTransitioning = false - // save video to watch history when the video starts playing or is being resumed // waiting for the player to be ready since the video can't be claimed to be watched // while it did not yet start actually, but did buffer only so far @@ -113,11 +111,11 @@ open class OnlinePlayerService : AbstractPlayerService() { } override suspend fun startPlayback() { + super.startPlayback() + val timestamp = startTimestamp ?: 0L startTimestamp = null - isTransitioning = true - streams = withContext(Dispatchers.IO) { try { StreamsExtractor.extractStreams(videoId)