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.BaseModel
|
||||||
import org.oxycblt.auxio.music.Genre
|
import org.oxycblt.auxio.music.Genre
|
||||||
import org.oxycblt.auxio.recycler.SortMode
|
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
|
* 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
|
* @author OxygenCobalt
|
||||||
*/
|
*/
|
||||||
class DetailViewModel : ViewModel() {
|
class DetailViewModel : ViewModel() {
|
||||||
|
private val settingsManager = SettingsManager.getInstance()
|
||||||
|
|
||||||
|
// --- CURRENT VALUES ---
|
||||||
|
|
||||||
private val mCurrentGenre = MutableLiveData<Genre?>()
|
private val mCurrentGenre = MutableLiveData<Genre?>()
|
||||||
val currentGenre: LiveData<Genre?> get() = mCurrentGenre
|
val currentGenre: LiveData<Genre?> get() = mCurrentGenre
|
||||||
|
|
||||||
val mCurrentArtist = MutableLiveData<Artist?>()
|
private val mCurrentArtist = MutableLiveData<Artist?>()
|
||||||
val currentArtist: LiveData<Artist?> get() = mCurrentArtist
|
val currentArtist: LiveData<Artist?> get() = mCurrentArtist
|
||||||
|
|
||||||
private val mCurrentAlbum = MutableLiveData<Album?>()
|
private val mCurrentAlbum = MutableLiveData<Album?>()
|
||||||
val currentAlbum: LiveData<Album?> get() = mCurrentAlbum
|
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
|
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
|
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
|
val artistSortMode: LiveData<SortMode> get() = mArtistSortMode
|
||||||
|
|
||||||
private var mIsNavigating = false
|
private var mIsNavigating = false
|
||||||
val isNavigating: Boolean get() = mIsNavigating
|
val isNavigating: Boolean get() = mIsNavigating
|
||||||
|
|
||||||
private val mNavToItem = MutableLiveData<BaseModel?>()
|
private val mNavToItem = MutableLiveData<BaseModel?>()
|
||||||
|
|
||||||
/** Flag for unified navigation. Observe this to coordinate navigation to an item's UI. */
|
/** Flag for unified navigation. Observe this to coordinate navigation to an item's UI. */
|
||||||
val navToItem: LiveData<BaseModel?> get() = mNavToItem
|
val navToItem: LiveData<BaseModel?> get() = mNavToItem
|
||||||
|
|
||||||
|
@ -56,19 +64,22 @@ class DetailViewModel : ViewModel() {
|
||||||
* Increment the sort mode of the genre artists
|
* Increment the sort mode of the genre artists
|
||||||
*/
|
*/
|
||||||
fun incrementGenreSortMode() {
|
fun incrementGenreSortMode() {
|
||||||
mGenreSortMode.value = when (mGenreSortMode.value) {
|
val mode = when (mGenreSortMode.value) {
|
||||||
SortMode.ALPHA_DOWN -> SortMode.ALPHA_UP
|
SortMode.ALPHA_DOWN -> SortMode.ALPHA_UP
|
||||||
SortMode.ALPHA_UP -> SortMode.ALPHA_DOWN
|
SortMode.ALPHA_UP -> SortMode.ALPHA_DOWN
|
||||||
|
|
||||||
else -> SortMode.ALPHA_DOWN
|
else -> SortMode.ALPHA_DOWN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mGenreSortMode.value = mode
|
||||||
|
settingsManager.genreSortMode = mode
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Increment the sort mode of the artist albums
|
* Increment the sort mode of the artist albums
|
||||||
*/
|
*/
|
||||||
fun incrementArtistSortMode() {
|
fun incrementArtistSortMode() {
|
||||||
mArtistSortMode.value = when (mArtistSortMode.value) {
|
val mode = when (mArtistSortMode.value) {
|
||||||
SortMode.NUMERIC_DOWN -> SortMode.NUMERIC_UP
|
SortMode.NUMERIC_DOWN -> SortMode.NUMERIC_UP
|
||||||
SortMode.NUMERIC_UP -> SortMode.ALPHA_DOWN
|
SortMode.NUMERIC_UP -> SortMode.ALPHA_DOWN
|
||||||
SortMode.ALPHA_DOWN -> SortMode.ALPHA_UP
|
SortMode.ALPHA_DOWN -> SortMode.ALPHA_UP
|
||||||
|
@ -76,18 +87,24 @@ class DetailViewModel : ViewModel() {
|
||||||
|
|
||||||
else -> SortMode.NUMERIC_DOWN
|
else -> SortMode.NUMERIC_DOWN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mArtistSortMode.value = mode
|
||||||
|
settingsManager.artistSortMode = mode
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Increment the sort mode of the album song
|
* Increment the sort mode of the album song
|
||||||
*/
|
*/
|
||||||
fun incrementAlbumSortMode() {
|
fun incrementAlbumSortMode() {
|
||||||
mAlbumSortMode.value = when (mAlbumSortMode.value) {
|
val mode = when (mAlbumSortMode.value) {
|
||||||
SortMode.NUMERIC_DOWN -> SortMode.NUMERIC_UP
|
SortMode.NUMERIC_DOWN -> SortMode.NUMERIC_UP
|
||||||
SortMode.NUMERIC_UP -> SortMode.NUMERIC_DOWN
|
SortMode.NUMERIC_UP -> SortMode.NUMERIC_DOWN
|
||||||
|
|
||||||
else -> 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.MusicStore
|
||||||
import org.oxycblt.auxio.music.Parent
|
import org.oxycblt.auxio.music.Parent
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.recycler.SortMode
|
|
||||||
import org.oxycblt.auxio.settings.SettingsManager
|
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].
|
* - 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].
|
* All access should be done with [PlaybackStateManager.getInstance].
|
||||||
*
|
|
||||||
* TODO: Queues should reflect sort mode
|
|
||||||
* @author OxygenCobalt
|
* @author OxygenCobalt
|
||||||
*/
|
*/
|
||||||
class PlaybackStateManager private constructor() {
|
class PlaybackStateManager private constructor() {
|
||||||
|
@ -719,21 +716,21 @@ class PlaybackStateManager private constructor() {
|
||||||
* Create an ordered queue based on an [Album].
|
* Create an ordered queue based on an [Album].
|
||||||
*/
|
*/
|
||||||
private fun orderSongsInAlbum(album: Album): MutableList<Song> {
|
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].
|
* Create an ordered queue based on an [Artist].
|
||||||
*/
|
*/
|
||||||
private fun orderSongsInArtist(artist: Artist): MutableList<Song> {
|
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].
|
* Create an ordered queue based on a [Genre].
|
||||||
*/
|
*/
|
||||||
private fun orderSongsInGenre(genre: Genre): MutableList<Song> {
|
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. */
|
/** The current [SortMode] of the library. */
|
||||||
var librarySortMode: SortMode
|
var librarySortMode: SortMode
|
||||||
get() = sharedPrefs.getData(KEY_LIB_SORT_MODE, SortMode::fromInt)
|
get() = sharedPrefs.getData(KEY_LIB_SORT_MODE, SortMode::fromInt) ?: SortMode.ALPHA_DOWN
|
||||||
?: SortMode.ALPHA_DOWN
|
|
||||||
|
|
||||||
set(value) {
|
set(value) {
|
||||||
sharedPrefs.edit {
|
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 */
|
/** The current filter mode of the search tab */
|
||||||
var searchFilterMode: DisplayMode
|
var searchFilterMode: DisplayMode
|
||||||
get() = handleSearchModeCompat(sharedPrefs)
|
get() = handleSearchModeCompat(sharedPrefs)
|
||||||
|
@ -188,6 +214,10 @@ class SettingsManager private constructor(context: Context) :
|
||||||
const val KEY_BLACKLIST = "KEY_BLACKLIST"
|
const val KEY_BLACKLIST = "KEY_BLACKLIST"
|
||||||
|
|
||||||
const val KEY_LIB_SORT_MODE = "KEY_LIBRARY_SORT_MODE"
|
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"
|
const val KEY_SEARCH_FILTER_MODE = "KEY_SEARCH_FILTER"
|
||||||
|
|
||||||
@Volatile
|
@Volatile
|
||||||
|
|
Loading…
Reference in a new issue