From f215c93608d2651b46bb9ca537ad4569b3683bbf Mon Sep 17 00:00:00 2001 From: Barnabas Balogh Date: Tue, 17 Feb 2026 21:21:47 +0100 Subject: [PATCH] fix: restore subtitles after backward seek Switch seek parameters from CLOSEST_SYNC to PREVIOUS_SYNC so seeks always land at or before the requested position, preventing subtitle cues from being skipped. On backward seek discontinuity, briefly disable and re-enable the text track to flush TextRenderer state so the current cue is re-delivered. --- .../purefin/player/manager/PlayerManager.kt | 23 +++++++++++++++++++ .../player/module/VideoPlayerModule.kt | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/hu/bbara/purefin/player/manager/PlayerManager.kt b/app/src/main/java/hu/bbara/purefin/player/manager/PlayerManager.kt index e392482..73e0f4e 100644 --- a/app/src/main/java/hu/bbara/purefin/player/manager/PlayerManager.kt +++ b/app/src/main/java/hu/bbara/purefin/player/manager/PlayerManager.kt @@ -94,6 +94,18 @@ class PlayerManager @Inject constructor( refreshMetadata(mediaItem) refreshQueue() } + + override fun onPositionDiscontinuity( + oldPosition: Player.PositionInfo, + newPosition: Player.PositionInfo, + reason: Int + ) { + if (reason == Player.DISCONTINUITY_REASON_SEEK && + newPosition.positionMs < oldPosition.positionMs + ) { + refreshSubtitleRendererOnBackwardSeek() + } + } } init { @@ -270,6 +282,17 @@ class PlayerManager @Inject constructor( } } + private fun refreshSubtitleRendererOnBackwardSeek() { + val currentParams = player.trackSelectionParameters + if (C.TRACK_TYPE_TEXT in currentParams.disabledTrackTypes) return + scope.launch { + player.trackSelectionParameters = currentParams.buildUpon() + .setTrackTypeDisabled(C.TRACK_TYPE_TEXT, true) + .build() + player.trackSelectionParameters = currentParams + } + } + fun release() { scope.cancel() player.removeListener(listener) diff --git a/app/src/main/java/hu/bbara/purefin/player/module/VideoPlayerModule.kt b/app/src/main/java/hu/bbara/purefin/player/module/VideoPlayerModule.kt index 613d256..aa7b141 100644 --- a/app/src/main/java/hu/bbara/purefin/player/module/VideoPlayerModule.kt +++ b/app/src/main/java/hu/bbara/purefin/player/module/VideoPlayerModule.kt @@ -66,7 +66,7 @@ object VideoPlayerModule { .setTrackSelector(trackSelector) .setPauseAtEndOfMediaItems(true) .setLoadControl(loadControl) - .setSeekParameters(SeekParameters.CLOSEST_SYNC) + .setSeekParameters(SeekParameters.PREVIOUS_SYNC) .setAudioAttributes(audioAttributes, true) .build() .apply {