From d192d42b8ecfe4db26b4c09270a847a2201529cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Sat, 28 Mar 2026 17:03:30 +0100 Subject: [PATCH 1/2] Fix playback tracking during casting - Add startUpdateTimeJob implementation to StateCasting to update time periodically - Assign the job to _updateTimeJob in CastView so it continues updating - Call updatePlaybackTracking in VideoDetailView when time changes during casting --- .../futo/platformplayer/casting/StateCasting.kt | 15 ++++++++++++++- .../fragment/mainactivity/main/VideoDetailView.kt | 8 ++++++-- .../futo/platformplayer/views/casting/CastView.kt | 2 +- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt b/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt index ddcb5d4a2..ce55d21d0 100644 --- a/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt +++ b/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt @@ -58,6 +58,7 @@ import com.futo.platformplayer.views.casting.CastView.Companion import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job +import kotlinx.coroutines.isActive import kotlinx.coroutines.cancel import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -234,7 +235,19 @@ class StateCasting { fun startUpdateTimeJob( onTimeJobTimeChanged_s: Event1, setTime: (Long) -> Unit - ): Job? = null + ): Job? { + return CoroutineScope(Dispatchers.Main).launch { + while (isActive) { + val t_s = activeDevice?.expectedCurrentTime + if (t_s != null) { + val t_ms = (t_s * 1000.0).toLong() + setTime(t_ms) + onTimeJobTimeChanged_s.emit(t_s.toLong()) + } + kotlinx.coroutines.delay(1000) + } + } + } fun deviceFromInfo(deviceInfo: CastingDeviceInfo): CastingDevice? { try { diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt index 76435cf0e..e0f76f29f 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt @@ -745,20 +745,24 @@ class VideoDetailView : ConstraintLayout { StateCasting.instance.onActiveDeviceTimeChanged.subscribe(this) { if (_isCasting) { - setLastPositionMilliseconds((it * 1000.0).toLong(), true); + val posMs = (it * 1000.0).toLong(); + setLastPositionMilliseconds(posMs, true); _cast.setTime(lastPositionMilliseconds); _timeBar.setPosition(it.toLong()); _timeBar.setBufferedPosition(0); _timeBar.setDuration(video?.duration ?: 0); + updatePlaybackTracking(posMs); } }; _cast.onTimeJobTimeChanged_s.subscribe { if (_isCasting) { - setLastPositionMilliseconds((it * 1000.0).toLong(), true); + val posMs = (it * 1000.0).toLong(); + setLastPositionMilliseconds(posMs, true); _timeBar.setPosition(it); _timeBar.setBufferedPosition(0); _timeBar.setDuration(video?.duration ?: 0); + updatePlaybackTracking(posMs); } } } diff --git a/app/src/main/java/com/futo/platformplayer/views/casting/CastView.kt b/app/src/main/java/com/futo/platformplayer/views/casting/CastView.kt index 7095eca2c..39af47f4b 100644 --- a/app/src/main/java/com/futo/platformplayer/views/casting/CastView.kt +++ b/app/src/main/java/com/futo/platformplayer/views/casting/CastView.kt @@ -256,7 +256,7 @@ class CastView : ConstraintLayout { stopTimeJob() if(isPlaying) { - StateCasting.instance.startUpdateTimeJob( + _updateTimeJob = StateCasting.instance.startUpdateTimeJob( onTimeJobTimeChanged_s ) { setTime(it) } From 3fb378a3a68804506186604d5c6798a8c55d6219 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Sat, 28 Mar 2026 20:29:35 +0100 Subject: [PATCH 2/2] Make playback tracker assignment more robust to reference changes --- .../fragment/mainactivity/main/VideoDetailView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt index e0f76f29f..0222659f1 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt @@ -1587,7 +1587,7 @@ class VideoDetailView : ConstraintLayout { ) } - if (me.video == video) + if (me.video == video || (me.video?.url == video.url && !video.url.isNullOrBlank())) me._playbackTracker = tracker; } else if (me.video == video) me._playbackTracker = null;