Upgrade detail sorting
Upgrade the detail sorting system to: - Persist beyond the app lifecycle [as other sort modes do] - Be used when creating a queue for a genre/artist/album
This commit is contained in:
parent
e72f448a89
commit
e7d36311dd
3 changed files with 59 additions and 15 deletions
|
@ -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<Genre?>()
|
||||
val currentGenre: LiveData<Genre?> get() = mCurrentGenre
|
||||
|
||||
val mCurrentArtist = MutableLiveData<Artist?>()
|
||||
private val mCurrentArtist = MutableLiveData<Artist?>()
|
||||
val currentArtist: LiveData<Artist?> get() = mCurrentArtist
|
||||
|
||||
private val mCurrentAlbum = MutableLiveData<Album?>()
|
||||
val currentAlbum: LiveData<Album?> get() = mCurrentAlbum
|
||||
|
||||
private val mGenreSortMode = MutableLiveData(SortMode.ALPHA_DOWN)
|
||||
// --- SORT MODES ---
|
||||
|
||||
private val mGenreSortMode = MutableLiveData(settingsManager.genreSortMode)
|
||||
val genreSortMode: LiveData<SortMode> get() = mGenreSortMode
|
||||
|
||||
private val mArtistSortMode = MutableLiveData(SortMode.NUMERIC_DOWN)
|
||||
private val mArtistSortMode = MutableLiveData(settingsManager.artistSortMode)
|
||||
val albumSortMode: LiveData<SortMode> get() = mAlbumSortMode
|
||||
|
||||
private val mAlbumSortMode = MutableLiveData(SortMode.NUMERIC_DOWN)
|
||||
private val mAlbumSortMode = MutableLiveData(settingsManager.albumSortMode)
|
||||
val artistSortMode: LiveData<SortMode> get() = mArtistSortMode
|
||||
|
||||
private var mIsNavigating = false
|
||||
val isNavigating: Boolean get() = mIsNavigating
|
||||
|
||||
private val mNavToItem = MutableLiveData<BaseModel?>()
|
||||
|
||||
/** Flag for unified navigation. Observe this to coordinate navigation to an item's UI. */
|
||||
val navToItem: LiveData<BaseModel?> 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!!
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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<Song> {
|
||||
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<Song> {
|
||||
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<Song> {
|
||||
return SortMode.ALPHA_DOWN.getSortedSongList(genre.songs).toMutableList()
|
||||
return settingsManager.genreSortMode.getSortedSongList(genre.songs).toMutableList()
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue