From 2027b6dbc7a4da13c1c310bc41f5efe9debf0ac4 Mon Sep 17 00:00:00 2001 From: AbsurdlyLongUsername <22662897+absurdlylongusername@users.noreply.github.com> Date: Thu, 5 Feb 2026 04:36:53 +0000 Subject: [PATCH] Add conditional guard to prevent useVideoAndSubtitles overwriting recovery position that was set in Player.handleIntent for RESUME_PLAYBACK when resuming playback (cherry picked from commit 118def08b4a583de6569c54ae43853bbf81024ff) --- .../java/org/schabi/newpipe/player/Player.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/src/main/java/org/schabi/newpipe/player/Player.java b/app/src/main/java/org/schabi/newpipe/player/Player.java index 078e4b344..fa1aaa2b6 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -2210,6 +2210,13 @@ public final class Player implements PlaybackListener, Listener { isAudioOnly = !videoAndSubtitlesEnabled; + final var item = playQueue.getItem(); + final boolean hasPendingRecovery = + item != null && item.getRecoveryPosition() != PlayQueueItem.RECOVERY_UNSET; + final boolean hasTimeline = + !exoPlayerIsNull() && !simpleExoPlayer.getCurrentTimeline().isEmpty(); + + getCurrentStreamInfo().ifPresentOrElse(info -> { // In case we don't know the source type, fall back to either video-with-audio, or // audio-only source type @@ -2217,6 +2224,10 @@ public final class Player implements PlaybackListener, Listener { .orElse(SourceType.VIDEO_WITH_AUDIO_OR_AUDIO_ONLY); setRecovery(); // making sure to save playback position before reloadPlayQueueManager() + if (hasTimeline || !hasPendingRecovery) { + // making sure to save playback position before reloadPlayQueueManager() + setRecovery(); + } if (playQueueManagerReloadingNeeded(sourceType, info, getVideoRendererIndex())) { reloadPlayQueueManager(); @@ -2230,6 +2241,10 @@ public final class Player implements PlaybackListener, Listener { index of the video renderer or playQueueManagerReloadingNeeded returns true */ setRecovery(); // making sure to save playback position before reloadPlayQueueManager() + if (hasTimeline || !hasPendingRecovery) { + // making sure to save playback position before reloadPlayQueueManager() + setRecovery(); + } reloadPlayQueueManager(); });