@@ -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