From ff0e4c6a99265f73339d067ed2310742772d5101 Mon Sep 17 00:00:00 2001 From: arjun Date: Mon, 30 Mar 2026 14:32:39 +0530 Subject: [PATCH 1/3] feat: Persisted the repeat mode flag using shared preferences --- app/src/main/java/org/schabi/newpipe/player/Player.java | 9 +++++++++ app/src/main/res/values/settings_keys.xml | 1 + 2 files changed, 10 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 159ecbd6efc..feeddb45a27 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -634,6 +634,11 @@ private void initPlayer(final boolean playOnReady) { simpleExoPlayer.setWakeMode(C.WAKE_MODE_NETWORK); simpleExoPlayer.setHandleAudioBecomingNoisy(true); + int repeatMode = prefs.getInt( + context.getString(R.string.repeat_mode_key), REPEAT_MODE_OFF + ); + simpleExoPlayer.setRepeatMode(repeatMode); + audioReactor = new AudioReactor(context, simpleExoPlayer); registerBroadcastReceiver(); @@ -1275,6 +1280,10 @@ public void cycleNextRepeatMode() { break; } simpleExoPlayer.setRepeatMode(repeatMode); + prefs + .edit() + .putInt(context.getString(R.string.repeat_mode_key), repeatMode) + .apply(); } } diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index d01709d27ba..bacc5ed8cc5 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -1514,4 +1514,5 @@ @string/image_quality_medium_key @string/image_quality_high_key + repeat_mode_key From 3ccb552a991d3015f9c270c6ebecebe87476cf20 Mon Sep 17 00:00:00 2001 From: arjun Date: Thu, 2 Apr 2026 06:01:49 +0530 Subject: [PATCH 2/3] fix: lint --- app/src/main/java/org/schabi/newpipe/player/Player.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 feeddb45a27..ba7aae745f5 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -634,7 +634,7 @@ private void initPlayer(final boolean playOnReady) { simpleExoPlayer.setWakeMode(C.WAKE_MODE_NETWORK); simpleExoPlayer.setHandleAudioBecomingNoisy(true); - int repeatMode = prefs.getInt( + final int repeatMode = prefs.getInt( context.getString(R.string.repeat_mode_key), REPEAT_MODE_OFF ); simpleExoPlayer.setRepeatMode(repeatMode); From 417c4dccc4acdcc5ca23c901859c9a60563d3bca Mon Sep 17 00:00:00 2001 From: arjun Date: Mon, 13 Apr 2026 23:08:06 +0530 Subject: [PATCH 3/3] feat: resolved review comments --- .../org/schabi/newpipe/player/Player.java | 8 +++--- .../newpipe/player/ui/VideoPlayerUi.java | 26 ++++++++++++------- 2 files changed, 20 insertions(+), 14 deletions(-) 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 ba7aae745f5..c5a5f7a0266 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -1280,10 +1280,6 @@ public void cycleNextRepeatMode() { break; } simpleExoPlayer.setRepeatMode(repeatMode); - prefs - .edit() - .putInt(context.getString(R.string.repeat_mode_key), repeatMode) - .apply(); } } @@ -1295,6 +1291,10 @@ public void onRepeatModeChanged(@RepeatMode final int repeatMode) { } UIs.call(playerUi -> playerUi.onRepeatModeChanged(repeatMode)); notifyPlaybackUpdateToListeners(); + prefs + .edit() + .putInt(context.getString(R.string.repeat_mode_key), repeatMode) + .apply(); } @Override diff --git a/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java b/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java index b68d3d94dbd..1eb140c4d32 100644 --- a/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java +++ b/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java @@ -400,6 +400,8 @@ public void initPlayback() { // #6825 - Ensure that the shuffle-button is in the correct state on the UI setShuffleButton(player.getExoPlayer().getShuffleModeEnabled()); + // Ensure that the repeat-button is in the correct state on the UI + setRepeatButton(player.getRepeatMode()); } public abstract void removeViewFromParent(); @@ -951,16 +953,7 @@ public void onShuffleClicked() { public void onRepeatModeChanged(@RepeatMode final int repeatMode) { super.onRepeatModeChanged(repeatMode); - if (repeatMode == REPEAT_MODE_ALL) { - binding.repeatButton.setImageResource( - com.google.android.exoplayer2.ui.R.drawable.exo_controls_repeat_all); - } else if (repeatMode == REPEAT_MODE_ONE) { - binding.repeatButton.setImageResource( - com.google.android.exoplayer2.ui.R.drawable.exo_controls_repeat_one); - } else /* repeatMode == REPEAT_MODE_OFF */ { - binding.repeatButton.setImageResource( - com.google.android.exoplayer2.ui.R.drawable.exo_controls_repeat_off); - } + setRepeatButton(repeatMode); } @Override @@ -980,6 +973,19 @@ private void setMuteButton(final boolean isMuted) { ? R.drawable.ic_volume_off : R.drawable.ic_volume_up)); } + private void setRepeatButton(@RepeatMode final int repeatMode) { + if (repeatMode == REPEAT_MODE_ALL) { + binding.repeatButton.setImageResource( + com.google.android.exoplayer2.ui.R.drawable.exo_controls_repeat_all); + } else if (repeatMode == REPEAT_MODE_ONE) { + binding.repeatButton.setImageResource( + com.google.android.exoplayer2.ui.R.drawable.exo_controls_repeat_one); + } else /* repeatMode == REPEAT_MODE_OFF */ { + binding.repeatButton.setImageResource( + com.google.android.exoplayer2.ui.R.drawable.exo_controls_repeat_off); + } + } + private void setShuffleButton(final boolean shuffled) { binding.shuffleButton.setImageAlpha(shuffled ? 255 : 77); }