diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt index b955fa949..0f2a2d5a8 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt @@ -8,6 +8,7 @@ import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.BaseModel import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.recycler.SortMode +import org.oxycblt.auxio.settings.SettingsManager /** * ViewModel that stores data for the [DetailFragment]s, such as what they're showing & what @@ -15,28 +16,35 @@ import org.oxycblt.auxio.recycler.SortMode * @author OxygenCobalt */ class DetailViewModel : ViewModel() { + private val settingsManager = SettingsManager.getInstance() + + // --- CURRENT VALUES --- + private val mCurrentGenre = MutableLiveData() val currentGenre: LiveData get() = mCurrentGenre - val mCurrentArtist = MutableLiveData() + private val mCurrentArtist = MutableLiveData() val currentArtist: LiveData get() = mCurrentArtist private val mCurrentAlbum = MutableLiveData() val currentAlbum: LiveData get() = mCurrentAlbum - private val mGenreSortMode = MutableLiveData(SortMode.ALPHA_DOWN) + // --- SORT MODES --- + + private val mGenreSortMode = MutableLiveData(settingsManager.genreSortMode) val genreSortMode: LiveData get() = mGenreSortMode - private val mArtistSortMode = MutableLiveData(SortMode.NUMERIC_DOWN) + private val mArtistSortMode = MutableLiveData(settingsManager.artistSortMode) val albumSortMode: LiveData get() = mAlbumSortMode - private val mAlbumSortMode = MutableLiveData(SortMode.NUMERIC_DOWN) + private val mAlbumSortMode = MutableLiveData(settingsManager.albumSortMode) val artistSortMode: LiveData get() = mArtistSortMode private var mIsNavigating = false val isNavigating: Boolean get() = mIsNavigating private val mNavToItem = MutableLiveData() + /** Flag for unified navigation. Observe this to coordinate navigation to an item's UI. */ val navToItem: LiveData get() = mNavToItem @@ -56,19 +64,22 @@ class DetailViewModel : ViewModel() { * Increment the sort mode of the genre artists */ fun incrementGenreSortMode() { - mGenreSortMode.value = when (mGenreSortMode.value) { + val mode = when (mGenreSortMode.value) { SortMode.ALPHA_DOWN -> SortMode.ALPHA_UP SortMode.ALPHA_UP -> SortMode.ALPHA_DOWN else -> SortMode.ALPHA_DOWN } + + mGenreSortMode.value = mode + settingsManager.genreSortMode = mode } /** * Increment the sort mode of the artist albums */ fun incrementArtistSortMode() { - mArtistSortMode.value = when (mArtistSortMode.value) { + val mode = when (mArtistSortMode.value) { SortMode.NUMERIC_DOWN -> SortMode.NUMERIC_UP SortMode.NUMERIC_UP -> SortMode.ALPHA_DOWN SortMode.ALPHA_DOWN -> SortMode.ALPHA_UP @@ -76,18 +87,24 @@ class DetailViewModel : ViewModel() { else -> SortMode.NUMERIC_DOWN } + + mArtistSortMode.value = mode + settingsManager.artistSortMode = mode } /** * Increment the sort mode of the album song */ fun incrementAlbumSortMode() { - mAlbumSortMode.value = when (mAlbumSortMode.value) { + val mode = when (mAlbumSortMode.value) { SortMode.NUMERIC_DOWN -> SortMode.NUMERIC_UP SortMode.NUMERIC_UP -> SortMode.NUMERIC_DOWN else -> SortMode.NUMERIC_DOWN } + + mAlbumSortMode.value = mode + settingsManager.albumSortMode = mAlbumSortMode.value!! } /** diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt index f08c00c2f..266668aa2 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt @@ -14,7 +14,6 @@ import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.MusicStore import org.oxycblt.auxio.music.Parent import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.recycler.SortMode import org.oxycblt.auxio.settings.SettingsManager /** @@ -25,8 +24,6 @@ import org.oxycblt.auxio.settings.SettingsManager * - If you want to use the playback state with the ExoPlayer instance or system-side things, use [org.oxycblt.auxio.playback.system.PlaybackService]. * * All access should be done with [PlaybackStateManager.getInstance]. - * - * TODO: Queues should reflect sort mode * @author OxygenCobalt */ class PlaybackStateManager private constructor() { @@ -719,21 +716,21 @@ class PlaybackStateManager private constructor() { * Create an ordered queue based on an [Album]. */ private fun orderSongsInAlbum(album: Album): MutableList { - return SortMode.NUMERIC_DOWN.getSortedSongList(album.songs).toMutableList() + return settingsManager.albumSortMode.getSortedSongList(album.songs).toMutableList() } /** * Create an ordered queue based on an [Artist]. */ private fun orderSongsInArtist(artist: Artist): MutableList { - return SortMode.NUMERIC_DOWN.getSortedArtistSongList(artist.songs).toMutableList() + return settingsManager.artistSortMode.getSortedArtistSongList(artist.songs).toMutableList() } /** * Create an ordered queue based on a [Genre]. */ private fun orderSongsInGenre(genre: Genre): MutableList { - return SortMode.ALPHA_DOWN.getSortedSongList(genre.songs).toMutableList() + return settingsManager.genreSortMode.getSortedSongList(genre.songs).toMutableList() } /** diff --git a/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt b/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt index c6bb94e53..d04c4e9a8 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt @@ -95,8 +95,7 @@ class SettingsManager private constructor(context: Context) : /** The current [SortMode] of the library. */ var librarySortMode: SortMode - get() = sharedPrefs.getData(KEY_LIB_SORT_MODE, SortMode::fromInt) - ?: SortMode.ALPHA_DOWN + get() = sharedPrefs.getData(KEY_LIB_SORT_MODE, SortMode::fromInt) ?: SortMode.ALPHA_DOWN set(value) { sharedPrefs.edit { @@ -105,6 +104,33 @@ class SettingsManager private constructor(context: Context) : } } + var albumSortMode: SortMode + get() = sharedPrefs.getData(KEY_ALBUM_SORT_MODE, SortMode::fromInt) ?: SortMode.NUMERIC_DOWN + set(value) { + sharedPrefs.edit { + putInt(KEY_ALBUM_SORT_MODE, value.toInt()) + apply() + } + } + + var artistSortMode: SortMode + get() = sharedPrefs.getData(KEY_ARTIST_SORT_MODE, SortMode::fromInt) ?: SortMode.NUMERIC_DOWN + set(value) { + sharedPrefs.edit { + putInt(KEY_ARTIST_SORT_MODE, value.toInt()) + apply() + } + } + + var genreSortMode: SortMode + get() = sharedPrefs.getData(KEY_GENRE_SORT_MODE, SortMode::fromInt) ?: SortMode.ALPHA_DOWN + set(value) { + sharedPrefs.edit { + putInt(KEY_GENRE_SORT_MODE, value.toInt()) + apply() + } + } + /** The current filter mode of the search tab */ var searchFilterMode: DisplayMode get() = handleSearchModeCompat(sharedPrefs) @@ -188,6 +214,10 @@ class SettingsManager private constructor(context: Context) : const val KEY_BLACKLIST = "KEY_BLACKLIST" const val KEY_LIB_SORT_MODE = "KEY_LIBRARY_SORT_MODE" + const val KEY_ALBUM_SORT_MODE = "KEY_ALBUM_SORT" + const val KEY_ARTIST_SORT_MODE = "KEY_ARTIST_SORT" + const val KEY_GENRE_SORT_MODE = "KEY_GENRE_SORT" + const val KEY_SEARCH_FILTER_MODE = "KEY_SEARCH_FILTER" @Volatile