home: make sorting persisent

Re-add persistent sorting to the home lists.
This commit is contained in:
OxygenCobalt 2021-10-03 18:57:21 -06:00
parent d0835c3a0c
commit f1db0a0162
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
5 changed files with 84 additions and 42 deletions

View file

@ -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
)

View file

@ -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
}

View file

@ -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() {

View file

@ -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!!)
}
}

View file

@ -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