Skip to content

Commit 00d05cc

Browse files
committed
Fix #1795: Persist shuffle and repeat mode across sessions
1 parent eee1172 commit 00d05cc

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

app/src/main/java/org/schabi/newpipe/player/Player.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,8 @@ public final class Player implements PlaybackListener, Listener {
181181

182182
public static final int RENDERER_UNAVAILABLE = -1;
183183
private static final String PICASSO_PLAYER_THUMBNAIL_TAG = "PICASSO_PLAYER_THUMBNAIL_TAG";
184+
private static final String PREF_KEY_SHUFFLE_ENABLED = "player_shuffle_enabled";
185+
private static final String PREF_KEY_REPEAT_MODE = "player_repeat_mode";
184186

185187
/*//////////////////////////////////////////////////////////////////////////
186188
// Playback
@@ -617,6 +619,22 @@ private void initPlayback(@NonNull final PlayQueue queue,
617619
playQueue.init();
618620
reloadPlayQueueManager();
619621

622+
final int persistedRepeat = loadRepeatFromPrefs();
623+
final boolean persistedShuffle = loadShuffleFromPrefs();
624+
625+
simpleExoPlayer.setRepeatMode(persistedRepeat);
626+
simpleExoPlayer.setShuffleModeEnabled(persistedShuffle);
627+
628+
if (persistedShuffle && !playQueue.isShuffled()) {
629+
playQueue.shuffle();
630+
} else if (!persistedShuffle && playQueue.isShuffled()) {
631+
playQueue.unshuffle();
632+
}
633+
634+
UIs.call(ui -> ui.onRepeatModeChanged(persistedRepeat));
635+
UIs.call(ui -> ui.onShuffleModeEnabledChanged(persistedShuffle));
636+
notifyPlaybackUpdateToListeners();
637+
620638
UIs.call(PlayerUi::initPlayback);
621639

622640
simpleExoPlayer.setVolume(isMuted() ? 0 : 1);
@@ -1263,6 +1281,23 @@ private void onCompleted() {
12631281
//////////////////////////////////////////////////////////////////////////*/
12641282
//region Repeat and shuffle
12651283

1284+
private void saveShuffleToPrefs(final boolean enabled) {
1285+
prefs.edit().putBoolean(PREF_KEY_SHUFFLE_ENABLED, enabled).apply();
1286+
}
1287+
1288+
private void saveRepeatToPrefs(@RepeatMode final int repeatMode) {
1289+
prefs.edit().putInt(PREF_KEY_REPEAT_MODE, repeatMode).apply();
1290+
}
1291+
1292+
private boolean loadShuffleFromPrefs() {
1293+
return prefs.getBoolean(PREF_KEY_SHUFFLE_ENABLED, false);
1294+
}
1295+
1296+
@RepeatMode
1297+
private int loadRepeatFromPrefs() {
1298+
return prefs.getInt(PREF_KEY_REPEAT_MODE, REPEAT_MODE_OFF);
1299+
}
1300+
12661301
@RepeatMode
12671302
public int getRepeatMode() {
12681303
return exoPlayerIsNull() ? REPEAT_MODE_OFF : simpleExoPlayer.getRepeatMode();
@@ -1293,6 +1328,9 @@ public void onRepeatModeChanged(@RepeatMode final int repeatMode) {
12931328
Log.d(TAG, "ExoPlayer - onRepeatModeChanged() called with: "
12941329
+ "repeatMode = [" + repeatMode + "]");
12951330
}
1331+
1332+
saveRepeatToPrefs(repeatMode);
1333+
12961334
UIs.call(playerUi -> playerUi.onRepeatModeChanged(repeatMode));
12971335
notifyPlaybackUpdateToListeners();
12981336
}
@@ -1304,6 +1342,8 @@ public void onShuffleModeEnabledChanged(final boolean shuffleModeEnabled) {
13041342
+ "mode = [" + shuffleModeEnabled + "]");
13051343
}
13061344

1345+
saveShuffleToPrefs(shuffleModeEnabled);
1346+
13071347
if (playQueue != null) {
13081348
if (shuffleModeEnabled) {
13091349
playQueue.shuffle();

0 commit comments

Comments
 (0)