home: make sorting persisent
Re-add persistent sorting to the home lists.
This commit is contained in:
parent
d0835c3a0c
commit
f1db0a0162
5 changed files with 84 additions and 42 deletions
|
@ -106,6 +106,9 @@ class MosaicFetcher(private val context: Context) : Fetcher<Parent> {
|
|||
* https://github.com/kabouzeid/Phonograph
|
||||
*/
|
||||
private fun drawMosaic(streams: List<InputStream>): Bitmap {
|
||||
// Use a fixed 512x512 canvas for the mosaics. Preferably we would adapt this mosaic to
|
||||
// target ImageView size, but Coil seems to start image loading before we can even get
|
||||
// a width/height for the view, making that impractical.
|
||||
val mosaicBitmap = Bitmap.createBitmap(
|
||||
MOSAIC_BITMAP_SIZE, MOSAIC_BITMAP_SIZE, Bitmap.Config.ARGB_8888
|
||||
)
|
||||
|
|
|
@ -109,15 +109,15 @@ class DetailViewModel : ViewModel() {
|
|||
if (newMode != null) {
|
||||
when (currentMenuContext) {
|
||||
DisplayMode.SHOW_ALBUMS -> {
|
||||
settingsManager.albumSortMode = newMode
|
||||
settingsManager.detailAlbumSort = newMode
|
||||
refreshAlbumData(context)
|
||||
}
|
||||
DisplayMode.SHOW_ARTISTS -> {
|
||||
settingsManager.artistSortMode = newMode
|
||||
settingsManager.detailArtistSort = newMode
|
||||
refreshArtistData(context)
|
||||
}
|
||||
DisplayMode.SHOW_GENRES -> {
|
||||
settingsManager.genreSortMode = newMode
|
||||
settingsManager.detailGenreSort = newMode
|
||||
refreshGenreData(context)
|
||||
}
|
||||
else -> {}
|
||||
|
@ -159,12 +159,12 @@ class DetailViewModel : ViewModel() {
|
|||
desc = R.string.lbl_sort,
|
||||
onClick = { view ->
|
||||
currentMenuContext = DisplayMode.SHOW_GENRES
|
||||
mShowMenu.value = MenuConfig(view, settingsManager.genreSortMode)
|
||||
mShowMenu.value = MenuConfig(view, settingsManager.detailGenreSort)
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
data.addAll(settingsManager.genreSortMode.sortGenre(curGenre.value!!))
|
||||
data.addAll(settingsManager.detailGenreSort.sortGenre(curGenre.value!!))
|
||||
|
||||
mGenreData.value = data
|
||||
}
|
||||
|
@ -190,12 +190,12 @@ class DetailViewModel : ViewModel() {
|
|||
desc = R.string.lbl_sort,
|
||||
onClick = { view ->
|
||||
currentMenuContext = DisplayMode.SHOW_ARTISTS
|
||||
mShowMenu.value = MenuConfig(view, settingsManager.artistSortMode)
|
||||
mShowMenu.value = MenuConfig(view, settingsManager.detailArtistSort)
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
data.addAll(settingsManager.artistSortMode.sortArtist(artist))
|
||||
data.addAll(settingsManager.detailArtistSort.sortArtist(artist))
|
||||
|
||||
mArtistData.value = data.toList()
|
||||
}
|
||||
|
@ -211,12 +211,12 @@ class DetailViewModel : ViewModel() {
|
|||
desc = R.string.lbl_sort,
|
||||
onClick = { view ->
|
||||
currentMenuContext = DisplayMode.SHOW_ALBUMS
|
||||
mShowMenu.value = MenuConfig(view, settingsManager.albumSortMode)
|
||||
mShowMenu.value = MenuConfig(view, settingsManager.detailAlbumSort)
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
data.addAll(settingsManager.albumSortMode.sortAlbum(curAlbum.value!!))
|
||||
data.addAll(settingsManager.detailAlbumSort.sortAlbum(curAlbum.value!!))
|
||||
|
||||
mAlbumData.value = data
|
||||
}
|
||||
|
|
|
@ -38,7 +38,6 @@ import org.oxycblt.auxio.util.logD
|
|||
|
||||
/**
|
||||
* The [DetailFragment] for a genre.
|
||||
* TODO: Fix issue where ARTIST order defaults to ASCENDING for some reason.
|
||||
* @author OxygenCobalt
|
||||
*/
|
||||
class GenreDetailFragment : DetailFragment() {
|
||||
|
|
|
@ -32,6 +32,7 @@ import org.oxycblt.auxio.ui.SortMode
|
|||
|
||||
/**
|
||||
* The ViewModel for managing [HomeFragment]'s data and sorting modes.
|
||||
* TODO: Custom tabs
|
||||
*/
|
||||
class HomeViewModel : ViewModel() {
|
||||
private val mSongs = MutableLiveData(listOf<Song>())
|
||||
|
@ -57,36 +58,29 @@ class HomeViewModel : ViewModel() {
|
|||
private val mCurTab = MutableLiveData(mTabs.value!![0])
|
||||
val curTab: LiveData<DisplayMode> = mCurTab
|
||||
|
||||
private var genreSortMode = SortMode.ASCENDING
|
||||
private var artistSortMode = SortMode.ASCENDING
|
||||
private var albumSortMode = SortMode.ASCENDING
|
||||
private var songSortMode = SortMode.ASCENDING
|
||||
|
||||
private val musicStore = MusicStore.getInstance()
|
||||
private val settingsManager = SettingsManager.getInstance()
|
||||
|
||||
init {
|
||||
mSongs.value = songSortMode.sortSongs(musicStore.songs)
|
||||
mAlbums.value = albumSortMode.sortAlbums(musicStore.albums)
|
||||
mArtists.value = artistSortMode.sortModels(musicStore.artists)
|
||||
mGenres.value = genreSortMode.sortModels(musicStore.genres)
|
||||
mSongs.value = settingsManager.libSongSort.sortSongs(musicStore.songs)
|
||||
mAlbums.value = settingsManager.libAlbumSort.sortAlbums(musicStore.albums)
|
||||
mArtists.value = settingsManager.libArtistSort.sortModels(musicStore.artists)
|
||||
mGenres.value = settingsManager.libGenreSort.sortModels(musicStore.genres)
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the current tab based off of the new ViewPager position.
|
||||
*/
|
||||
fun updateCurrentTab(pos: Int) {
|
||||
val mode = mTabs.value!![pos]
|
||||
|
||||
mCurTab.value = mode
|
||||
mCurTab.value = mTabs.value!![pos]
|
||||
}
|
||||
|
||||
fun getSortForDisplay(displayMode: DisplayMode): SortMode {
|
||||
return when (displayMode) {
|
||||
DisplayMode.SHOW_GENRES -> genreSortMode
|
||||
DisplayMode.SHOW_ARTISTS -> artistSortMode
|
||||
DisplayMode.SHOW_ALBUMS -> albumSortMode
|
||||
DisplayMode.SHOW_SONGS -> songSortMode
|
||||
DisplayMode.SHOW_SONGS -> settingsManager.libSongSort
|
||||
DisplayMode.SHOW_ALBUMS -> settingsManager.libAlbumSort
|
||||
DisplayMode.SHOW_ARTISTS -> settingsManager.libArtistSort
|
||||
DisplayMode.SHOW_GENRES -> settingsManager.libGenreSort
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -96,20 +90,20 @@ class HomeViewModel : ViewModel() {
|
|||
fun updateCurrentSort(sort: SortMode) {
|
||||
when (mCurTab.value) {
|
||||
DisplayMode.SHOW_SONGS -> {
|
||||
songSortMode = sort
|
||||
settingsManager.libSongSort = sort
|
||||
mSongs.value = sort.sortSongs(mSongs.value!!)
|
||||
}
|
||||
|
||||
DisplayMode.SHOW_ALBUMS -> {
|
||||
albumSortMode = sort
|
||||
settingsManager.libAlbumSort = sort
|
||||
mAlbums.value = sort.sortAlbums(mAlbums.value!!)
|
||||
}
|
||||
DisplayMode.SHOW_ARTISTS -> {
|
||||
artistSortMode = sort
|
||||
settingsManager.libArtistSort = sort
|
||||
mArtists.value = sort.sortModels(mArtists.value!!)
|
||||
}
|
||||
DisplayMode.SHOW_GENRES -> {
|
||||
genreSortMode = sort
|
||||
settingsManager.libGenreSort = sort
|
||||
mGenres.value = sort.sortModels(mGenres.value!!)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -119,32 +119,72 @@ class SettingsManager private constructor(context: Context) :
|
|||
}
|
||||
}
|
||||
|
||||
var albumSortMode: SortMode
|
||||
get() = SortMode.fromInt(sharedPrefs.getInt(KEY_ALBUM_SORT, Int.MIN_VALUE))
|
||||
var libSongSort: SortMode
|
||||
get() = SortMode.fromInt(sharedPrefs.getInt(KEY_LIB_SONGS_SORT, Int.MIN_VALUE))
|
||||
?: SortMode.ASCENDING
|
||||
set(value) {
|
||||
sharedPrefs.edit {
|
||||
putInt(KEY_ALBUM_SORT, value.toInt())
|
||||
putInt(KEY_LIB_SONGS_SORT, value.toInt())
|
||||
apply()
|
||||
}
|
||||
}
|
||||
|
||||
var artistSortMode: SortMode
|
||||
get() = SortMode.fromInt(sharedPrefs.getInt(KEY_ARTIST_SORT, Int.MIN_VALUE))
|
||||
var libAlbumSort: SortMode
|
||||
get() = SortMode.fromInt(sharedPrefs.getInt(KEY_LIB_ALBUMS_SORT, Int.MIN_VALUE))
|
||||
?: SortMode.ASCENDING
|
||||
set(value) {
|
||||
sharedPrefs.edit {
|
||||
putInt(KEY_LIB_ALBUMS_SORT, value.toInt())
|
||||
apply()
|
||||
}
|
||||
}
|
||||
|
||||
var libArtistSort: SortMode
|
||||
get() = SortMode.fromInt(sharedPrefs.getInt(KEY_LIB_ARTISTS_SORT, Int.MIN_VALUE))
|
||||
?: SortMode.ASCENDING
|
||||
set(value) {
|
||||
sharedPrefs.edit {
|
||||
putInt(KEY_LIB_ARTISTS_SORT, value.toInt())
|
||||
apply()
|
||||
}
|
||||
}
|
||||
|
||||
var libGenreSort: SortMode
|
||||
get() = SortMode.fromInt(sharedPrefs.getInt(KEY_LIB_GENRE_SORT, Int.MIN_VALUE))
|
||||
?: SortMode.ASCENDING
|
||||
set(value) {
|
||||
sharedPrefs.edit {
|
||||
putInt(KEY_LIB_GENRE_SORT, value.toInt())
|
||||
apply()
|
||||
}
|
||||
}
|
||||
|
||||
var detailAlbumSort: SortMode
|
||||
get() = SortMode.fromInt(sharedPrefs.getInt(KEY_DETAIL_ALBUM_SORT, Int.MIN_VALUE))
|
||||
?: SortMode.ASCENDING
|
||||
set(value) {
|
||||
sharedPrefs.edit {
|
||||
putInt(KEY_DETAIL_ALBUM_SORT, value.toInt())
|
||||
apply()
|
||||
}
|
||||
}
|
||||
|
||||
var detailArtistSort: SortMode
|
||||
get() = SortMode.fromInt(sharedPrefs.getInt(KEY_DETAIL_ARTIST_SORT, Int.MIN_VALUE))
|
||||
?: SortMode.YEAR
|
||||
set(value) {
|
||||
sharedPrefs.edit {
|
||||
putInt(KEY_ARTIST_SORT, value.toInt())
|
||||
putInt(KEY_DETAIL_ARTIST_SORT, value.toInt())
|
||||
apply()
|
||||
}
|
||||
}
|
||||
|
||||
var genreSortMode: SortMode
|
||||
get() = SortMode.fromInt(sharedPrefs.getInt(KEY_GENRE_SORT, Int.MIN_VALUE))
|
||||
var detailGenreSort: SortMode
|
||||
get() = SortMode.fromInt(sharedPrefs.getInt(KEY_DETAIL_GENRE_SORT, Int.MIN_VALUE))
|
||||
?: SortMode.ASCENDING
|
||||
set(value) {
|
||||
sharedPrefs.edit {
|
||||
putInt(KEY_GENRE_SORT, value.toInt())
|
||||
putInt(KEY_DETAIL_GENRE_SORT, value.toInt())
|
||||
apply()
|
||||
}
|
||||
}
|
||||
|
@ -212,9 +252,15 @@ class SettingsManager private constructor(context: Context) :
|
|||
const val KEY_BLACKLIST = "KEY_BLACKLIST"
|
||||
|
||||
const val KEY_SEARCH_FILTER_MODE = "KEY_SEARCH_FILTER"
|
||||
const val KEY_ALBUM_SORT = "KEY_ALBUM_SORT"
|
||||
const val KEY_ARTIST_SORT = "KEY_ARTIST_SORT"
|
||||
const val KEY_GENRE_SORT = "KEY_GENRE_SORT"
|
||||
|
||||
const val KEY_LIB_SONGS_SORT = "KEY_SONGS_SORT"
|
||||
const val KEY_LIB_ALBUMS_SORT = "KEY_ALBUMS_SORT"
|
||||
const val KEY_LIB_ARTISTS_SORT = "KEY_ARTISTS_SORT"
|
||||
const val KEY_LIB_GENRE_SORT = "KEY_GENRE_SORT"
|
||||
|
||||
const val KEY_DETAIL_ALBUM_SORT = "KEY_ALBUM_SORT"
|
||||
const val KEY_DETAIL_ARTIST_SORT = "KEY_ARTIST_SORT"
|
||||
const val KEY_DETAIL_GENRE_SORT = "KEY_GENRE_SORT"
|
||||
|
||||
@Volatile
|
||||
private var INSTANCE: SettingsManager? = null
|
||||
|
|
Loading…
Reference in a new issue