Fix #1795: Persist shuffle and repeat mode across sessions

This commit is contained in:
FuAndTuan 2025-10-13 22:43:27 +11:00
parent eee1172e8a
commit 00d05cc6fc

View File

@ -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 @@ public final class Player implements PlaybackListener, Listener {
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 @@ public final class Player implements PlaybackListener, Listener {
//////////////////////////////////////////////////////////////////////////*/
//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 final class Player implements PlaybackListener, Listener {
Log.d(TAG, "ExoPlayer - onRepeatModeChanged() called with: "
+ "repeatMode = [" + repeatMode + "]");
}
saveRepeatToPrefs(repeatMode);
UIs.call(playerUi -> playerUi.onRepeatModeChanged(repeatMode));
notifyPlaybackUpdateToListeners();
}
@ -1304,6 +1342,8 @@ public final class Player implements PlaybackListener, Listener {
+ "mode = [" + shuffleModeEnabled + "]");
}
saveShuffleToPrefs(shuffleModeEnabled);
if (playQueue != null) {
if (shuffleModeEnabled) {
playQueue.shuffle();