feat: sort preference for playlists (#370)

This commit is contained in:
eddyizm 2026-01-18 16:39:28 -08:00 committed by GitHub
parent 75513d3bd4
commit 3cd5843c4b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 42 additions and 3 deletions

View file

@ -74,6 +74,8 @@ object Preferences {
private const val CONTINUOUS_PLAY = "continuous_play"
private const val LAST_INSTANT_MIX = "last_instant_mix"
private const val ALLOW_PLAYLIST_DUPLICATES = "allow_playlist_duplicates"
private const val HOME_SORT_PLAYLISTS = "home_sort_playlists"
private const val DEFAULT_HOME_SORT_PLAYLISTS_SORT_ORDER = Constants.PLAYLIST_ORDER_BY_RANDOM
private const val EQUALIZER_ENABLED = "equalizer_enabled"
private const val EQUALIZER_BAND_LEVELS = "equalizer_band_levels"
private const val MINI_SHUFFLE_BUTTON_VISIBILITY = "mini_shuffle_button_visibility"
@ -625,6 +627,16 @@ object Preferences {
return App.getInstance().preferences.getBoolean(ALLOW_PLAYLIST_DUPLICATES, false)
}
@JvmStatic
fun getHomeSortPlaylists(): String {
return App.getInstance().preferences.getString(HOME_SORT_PLAYLISTS, DEFAULT_HOME_SORT_PLAYLISTS_SORT_ORDER) ?: DEFAULT_HOME_SORT_PLAYLISTS_SORT_ORDER
}
@JvmStatic
fun getHomeSortPlaylists(sortOrder: String) {
App.getInstance().preferences.edit().putString(HOME_SORT_PLAYLISTS, sortOrder).apply()
}
@JvmStatic
fun setEqualizerEnabled(enabled: Boolean) {
App.getInstance().preferences.edit().putBoolean(EQUALIZER_ENABLED, enabled).apply()

View file

@ -24,6 +24,7 @@ import com.cappielloantonio.tempo.subsonic.models.ArtistID3;
import com.cappielloantonio.tempo.subsonic.models.Child;
import com.cappielloantonio.tempo.subsonic.models.Playlist;
import com.cappielloantonio.tempo.subsonic.models.Share;
import com.cappielloantonio.tempo.util.Constants;
import com.cappielloantonio.tempo.util.Constants.SeedType;
import com.cappielloantonio.tempo.util.Preferences;
import com.google.common.reflect.TypeToken;
@ -250,12 +251,19 @@ public class HomeViewModel extends AndroidViewModel {
playlistRepository.getPlaylists(false, -1).observe(owner, remotes -> {
if (remotes != null && !remotes.isEmpty()) {
List<Playlist> playlists = new ArrayList<>(remotes);
String result = Preferences.getHomeSortPlaylists();
if (Preferences.getHomeSortPlaylists().equals(Constants.PLAYLIST_ORDER_BY_RANDOM))
{
Collections.shuffle(playlists);
List<Playlist> randomPlaylists = playlists.size() > 5
}
else {
playlists.sort(Comparator.comparing(Playlist::getName));
}
List<Playlist> subsetPlaylists = playlists.size() > 5
? playlists.subList(0, 5)
: playlists;
pinnedPlaylists.setValue(randomPlaylists);
pinnedPlaylists.setValue(subsetPlaylists);
}
});

View file

@ -240,6 +240,16 @@
<item>8</item>
</string-array>
<string-array name="playlist_sort_option_titles">
<item>Name</item>
<item>Random</item>
</string-array>
<string-array name="playlist_sort_option_values">
<item>ORDER_BY_NAME</item>
<item>ORDER_BY_RANDOM</item>
</string-array>
<string-array name="skip_min_star_rating_titles">
<item>0 star minimum</item>
<item>1 star minimum</item>

View file

@ -361,6 +361,7 @@
<string name="settings_music_directory_summary">If enabled, show the music directory section. Please note that for folder navigation to work properly, the server must support this feature.</string>
<string name="settings_podcast">Show podcast</string>
<string name="settings_podcast_summary">If enabled, show the podcast section. Restart the app for it to take full effect.</string>
<string name="settings_playlist_sort">Playlist sorting</string>
<string name="settings_audio_quality">Show audio quality</string>
<string name="settings_audio_quality_summary">The bitrate and audio format will be shown for each audio track.</string>
<string name="settings_song_rating">Show song star rating</string>

View file

@ -136,6 +136,14 @@
android:defaultValue="false"
android:summary="@string/settings_allow_playlist_duplicates_summary"
android:key="allow_playlist_duplicates" />
<ListPreference
app:defaultValue="ORDER_BY_NAME"
app:dialogTitle="@string/settings_playlist_sort"
app:entries="@array/playlist_sort_option_titles"
app:entryValues="@array/playlist_sort_option_values"
app:key="home_sort_playlists"
app:title="@string/settings_playlist_sort"
app:useSimpleSummaryProvider="true" />
</PreferenceCategory>