diff --git a/app/phone/src/main/AndroidManifest.xml b/app/phone/src/main/AndroidManifest.xml
index b3509ff5..57840a31 100644
--- a/app/phone/src/main/AndroidManifest.xml
+++ b/app/phone/src/main/AndroidManifest.xml
@@ -24,6 +24,7 @@
,
) {
+ // Skip initialization when there are already items
+ if (this.items.isNotEmpty()) {
+ return
+ }
this.items = items
player.addListener(this)
@@ -156,10 +162,16 @@ constructor(
Timber.e(e)
}
+ val startPosition = if (playbackPosition == 0L) {
+ items.getOrNull(currentMediaItemIndex)?.playbackPosition ?: C.TIME_UNSET
+ } else {
+ playbackPosition
+ }
+
player.setMediaItems(
mediaItems,
currentMediaItemIndex,
- items.getOrNull(currentMediaItemIndex)?.playbackPosition ?: C.TIME_UNSET,
+ startPosition,
)
if (appPreferences.playerMpv) { // For some reason, adding a 1ms delay between these two lines fixes a crash when playing with mpv from downloads
withContext(Dispatchers.IO) {
@@ -191,9 +203,9 @@ constructor(
}
_currentTrickPlay.value = null
- playWhenReady = player.playWhenReady
- playbackPosition = position
- currentMediaItemIndex = player.currentMediaItemIndex
+ playWhenReady = false
+ playbackPosition = 0L
+ currentMediaItemIndex = 0
player.removeListener(this)
player.release()
}
@@ -201,6 +213,7 @@ constructor(
private fun pollPosition(player: Player) {
val playbackProgressRunnable = object : Runnable {
override fun run() {
+ savedStateHandle["position"] = player.currentPosition
viewModelScope.launch {
if (player.currentMediaItem != null && player.currentMediaItem!!.mediaId.isNotEmpty()) {
val itemId = UUID.fromString(player.currentMediaItem!!.mediaId)
@@ -240,6 +253,7 @@ constructor(
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
Timber.d("Playing MediaItem: ${mediaItem?.mediaId}")
+ savedStateHandle["mediaItemIndex"] = player.currentMediaItemIndex
viewModelScope.launch {
try {
items.first { it.itemId.toString() == player.currentMediaItem?.mediaId }