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 39f9416934f..29429e28040 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -181,6 +181,8 @@ public final class Player implements PlaybackListener, Listener { public static final int RENDERER_UNAVAILABLE = -1; private static final String PICASSO_PLAYER_THUMBNAIL_TAG = "PICASSO_PLAYER_THUMBNAIL_TAG"; + private static final String PREF_KEY_SHUFFLE_ENABLED = "player_shuffle_enabled"; + private static final String PREF_KEY_REPEAT_MODE = "player_repeat_mode"; /*////////////////////////////////////////////////////////////////////////// // Playback @@ -617,6 +619,22 @@ private void initPlayback(@NonNull final PlayQueue queue, playQueue.init(); reloadPlayQueueManager(); + final int persistedRepeat = loadRepeatFromPrefs(); + final boolean persistedShuffle = loadShuffleFromPrefs(); + + simpleExoPlayer.setRepeatMode(persistedRepeat); + simpleExoPlayer.setShuffleModeEnabled(persistedShuffle); + + if (persistedShuffle && !playQueue.isShuffled()) { + playQueue.shuffle(); + } else if (!persistedShuffle && playQueue.isShuffled()) { + playQueue.unshuffle(); + } + + UIs.call(ui -> ui.onRepeatModeChanged(persistedRepeat)); + UIs.call(ui -> ui.onShuffleModeEnabledChanged(persistedShuffle)); + notifyPlaybackUpdateToListeners(); + UIs.call(PlayerUi::initPlayback); simpleExoPlayer.setVolume(isMuted() ? 0 : 1); @@ -1263,6 +1281,23 @@ private void onCompleted() { //////////////////////////////////////////////////////////////////////////*/ //region Repeat and shuffle + private void saveShuffleToPrefs(final boolean enabled) { + prefs.edit().putBoolean(PREF_KEY_SHUFFLE_ENABLED, enabled).apply(); + } + + private void saveRepeatToPrefs(@RepeatMode final int repeatMode) { + prefs.edit().putInt(PREF_KEY_REPEAT_MODE, repeatMode).apply(); + } + + private boolean loadShuffleFromPrefs() { + return prefs.getBoolean(PREF_KEY_SHUFFLE_ENABLED, false); + } + + @RepeatMode + private int loadRepeatFromPrefs() { + return prefs.getInt(PREF_KEY_REPEAT_MODE, REPEAT_MODE_OFF); + } + @RepeatMode public int getRepeatMode() { return exoPlayerIsNull() ? REPEAT_MODE_OFF : simpleExoPlayer.getRepeatMode(); @@ -1293,6 +1328,9 @@ public void onRepeatModeChanged(@RepeatMode final int repeatMode) { Log.d(TAG, "ExoPlayer - onRepeatModeChanged() called with: " + "repeatMode = [" + repeatMode + "]"); } + + saveRepeatToPrefs(repeatMode); + UIs.call(playerUi -> playerUi.onRepeatModeChanged(repeatMode)); notifyPlaybackUpdateToListeners(); } @@ -1304,6 +1342,8 @@ public void onShuffleModeEnabledChanged(final boolean shuffleModeEnabled) { + "mode = [" + shuffleModeEnabled + "]"); } + saveShuffleToPrefs(shuffleModeEnabled); + if (playQueue != null) { if (shuffleModeEnabled) { playQueue.shuffle();