@@ -2210,13 +2210,24 @@ public void useVideoAndSubtitles(final boolean videoAndSubtitlesEnabled) {
22102210
22112211 isAudioOnly = !videoAndSubtitlesEnabled ;
22122212
2213+ final var item = playQueue .getItem ();
2214+ final boolean hasPendingRecovery =
2215+ item != null && item .getRecoveryPosition () != PlayQueueItem .RECOVERY_UNSET ;
2216+ final boolean hasTimeline =
2217+ !exoPlayerIsNull () && !simpleExoPlayer .getCurrentTimeline ().isEmpty ();
2218+
2219+
22132220 getCurrentStreamInfo ().ifPresentOrElse (info -> {
22142221 // In case we don't know the source type, fall back to either video-with-audio, or
22152222 // audio-only source type
22162223 final SourceType sourceType = videoResolver .getStreamSourceType ()
22172224 .orElse (SourceType .VIDEO_WITH_AUDIO_OR_AUDIO_ONLY );
22182225
22192226 setRecovery (); // making sure to save playback position before reloadPlayQueueManager()
2227+ if (hasTimeline || !hasPendingRecovery ) {
2228+ // making sure to save playback position before reloadPlayQueueManager()
2229+ setRecovery ();
2230+ }
22202231
22212232 if (playQueueManagerReloadingNeeded (sourceType , info , getVideoRendererIndex ())) {
22222233 reloadPlayQueueManager ();
@@ -2230,6 +2241,10 @@ The current metadata may be null sometimes (for e.g. when using an unstable conn
22302241 index of the video renderer or playQueueManagerReloadingNeeded returns true
22312242 */
22322243 setRecovery (); // making sure to save playback position before reloadPlayQueueManager()
2244+ if (hasTimeline || !hasPendingRecovery ) {
2245+ // making sure to save playback position before reloadPlayQueueManager()
2246+ setRecovery ();
2247+ }
22332248 reloadPlayQueueManager ();
22342249 });
22352250
0 commit comments