Merge pull request #7 from le-firehawk/feature-persistent-play-prefs

397-feat: Store and retrieve replay and shuffle states in preferences
This commit is contained in:
eddyizm 2025-08-02 19:51:33 -07:00 committed by GitHub
commit ea509b749b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 48 additions and 0 deletions

View file

@ -112,6 +112,9 @@ public class PlayerBottomSheetFragment extends Fragment {
try { try {
MediaBrowser mediaBrowser = mediaBrowserListenableFuture.get(); MediaBrowser mediaBrowser = mediaBrowserListenableFuture.get();
mediaBrowser.setShuffleModeEnabled(Preferences.isShuffleModeEnabled());
mediaBrowser.setRepeatMode(Preferences.getRepeatMode());
setMediaControllerListener(mediaBrowser); setMediaControllerListener(mediaBrowser);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -150,6 +153,16 @@ public class PlayerBottomSheetFragment extends Fragment {
public void onEvents(Player player, Player.Events events) { public void onEvents(Player player, Player.Events events) {
setHeaderNextButtonState(mediaBrowser.hasNextMediaItem()); setHeaderNextButtonState(mediaBrowser.hasNextMediaItem());
} }
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
Preferences.setShuffleModeEnabled(shuffleModeEnabled);
}
@Override
public void onRepeatModeChanged(int repeatMode) {
Preferences.setRepeatMode(repeatMode);
}
}); });
} }

View file

@ -140,6 +140,8 @@ public class PlayerControllerFragment extends Fragment {
MediaBrowser mediaBrowser = mediaBrowserListenableFuture.get(); MediaBrowser mediaBrowser = mediaBrowserListenableFuture.get();
bind.nowPlayingMediaControllerView.setPlayer(mediaBrowser); bind.nowPlayingMediaControllerView.setPlayer(mediaBrowser);
mediaBrowser.setShuffleModeEnabled(Preferences.isShuffleModeEnabled());
mediaBrowser.setRepeatMode(Preferences.getRepeatMode());
setMediaControllerListener(mediaBrowser); setMediaControllerListener(mediaBrowser);
} catch (Exception e) { } catch (Exception e) {
@ -160,6 +162,16 @@ public class PlayerControllerFragment extends Fragment {
setMetadata(mediaMetadata); setMetadata(mediaMetadata);
setMediaInfo(mediaMetadata); setMediaInfo(mediaMetadata);
} }
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
Preferences.setShuffleModeEnabled(shuffleModeEnabled);
}
@Override
public void onRepeatModeChanged(int repeatMode) {
Preferences.setRepeatMode(repeatMode);
}
}); });
} }

View file

@ -1,6 +1,7 @@
package com.cappielloantonio.tempo.util package com.cappielloantonio.tempo.util
import android.util.Log import android.util.Log
import androidx.media3.common.Player
import com.cappielloantonio.tempo.App import com.cappielloantonio.tempo.App
import com.cappielloantonio.tempo.model.HomeSector import com.cappielloantonio.tempo.model.HomeSector
import com.cappielloantonio.tempo.subsonic.models.OpenSubsonicExtension import com.cappielloantonio.tempo.subsonic.models.OpenSubsonicExtension
@ -24,6 +25,8 @@ object Preferences {
private const val NEXT_SERVER_SWITCH = "next_server_switch" private const val NEXT_SERVER_SWITCH = "next_server_switch"
private const val PLAYBACK_SPEED = "playback_speed" private const val PLAYBACK_SPEED = "playback_speed"
private const val SKIP_SILENCE = "skip_silence" private const val SKIP_SILENCE = "skip_silence"
private const val SHUFFLE_MODE = "shuffle_mode"
private const val REPEAT_MODE = "repeat_mode"
private const val IMAGE_CACHE_SIZE = "image_cache_size" private const val IMAGE_CACHE_SIZE = "image_cache_size"
private const val STREAMING_CACHE_SIZE = "streaming_cache_size" private const val STREAMING_CACHE_SIZE = "streaming_cache_size"
private const val IMAGE_SIZE = "image_size" private const val IMAGE_SIZE = "image_size"
@ -226,6 +229,26 @@ object Preferences {
App.getInstance().preferences.edit().putBoolean(SKIP_SILENCE, isSkipSilenceMode).apply() App.getInstance().preferences.edit().putBoolean(SKIP_SILENCE, isSkipSilenceMode).apply()
} }
@JvmStatic
fun isShuffleModeEnabled(): Boolean {
return App.getInstance().preferences.getBoolean(SHUFFLE_MODE, false)
}
@JvmStatic
fun setShuffleModeEnabled(shuffleModeEnabled: Boolean) {
App.getInstance().preferences.edit().putBoolean(SHUFFLE_MODE, shuffleModeEnabled).apply()
}
@JvmStatic
fun getRepeatMode(): Int {
return App.getInstance().preferences.getInt(REPEAT_MODE, Player.REPEAT_MODE_OFF)
}
@JvmStatic
fun setRepeatMode(repeatMode: Int) {
App.getInstance().preferences.edit().putInt(REPEAT_MODE, repeatMode).apply()
}
@JvmStatic @JvmStatic
fun getImageCacheSize(): Int { fun getImageCacheSize(): Int {
return App.getInstance().preferences.getString(IMAGE_CACHE_SIZE, "500")!!.toInt() return App.getInstance().preferences.getString(IMAGE_CACHE_SIZE, "500")!!.toInt()