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 * https://github.com/kabouzeid/Phonograph
*/ */
private fun drawMosaic(streams: List<InputStream>): Bitmap { 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( val mosaicBitmap = Bitmap.createBitmap(
MOSAIC_BITMAP_SIZE, MOSAIC_BITMAP_SIZE, Bitmap.Config.ARGB_8888 MOSAIC_BITMAP_SIZE, MOSAIC_BITMAP_SIZE, Bitmap.Config.ARGB_8888
) )

View file

@ -109,15 +109,15 @@ class DetailViewModel : ViewModel() {
if (newMode != null) { if (newMode != null) {
when (currentMenuContext) { when (currentMenuContext) {
DisplayMode.SHOW_ALBUMS -> { DisplayMode.SHOW_ALBUMS -> {
settingsManager.albumSortMode = newMode settingsManager.detailAlbumSort = newMode
refreshAlbumData(context) refreshAlbumData(context)
} }
DisplayMode.SHOW_ARTISTS -> { DisplayMode.SHOW_ARTISTS -> {
settingsManager.artistSortMode = newMode settingsManager.detailArtistSort = newMode
refreshArtistData(context) refreshArtistData(context)
} }
DisplayMode.SHOW_GENRES -> { DisplayMode.SHOW_GENRES -> {
settingsManager.genreSortMode = newMode settingsManager.detailGenreSort = newMode
refreshGenreData(context) refreshGenreData(context)
} }
else -> {} else -> {}
@ -159,12 +159,12 @@ class DetailViewModel : ViewModel() {
desc = R.string.lbl_sort, desc = R.string.lbl_sort,
onClick = { view -> onClick = { view ->
currentMenuContext = DisplayMode.SHOW_GENRES 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 mGenreData.value = data
} }
@ -190,12 +190,12 @@ class DetailViewModel : ViewModel() {
desc = R.string.lbl_sort, desc = R.string.lbl_sort,
onClick = { view -> onClick = { view ->
currentMenuContext = DisplayMode.SHOW_ARTISTS 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() mArtistData.value = data.toList()
} }
@ -211,12 +211,12 @@ class DetailViewModel : ViewModel() {
desc = R.string.lbl_sort, desc = R.string.lbl_sort,
onClick = { view -> onClick = { view ->
currentMenuContext = DisplayMode.SHOW_ALBUMS 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 mAlbumData.value = data
} }

View file

@ -38,7 +38,6 @@ import org.oxycblt.auxio.util.logD
/** /**
* The [DetailFragment] for a genre. * The [DetailFragment] for a genre.
* TODO: Fix issue where ARTIST order defaults to ASCENDING for some reason.
* @author OxygenCobalt * @author OxygenCobalt
*/ */
class GenreDetailFragment : DetailFragment() { 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. * The ViewModel for managing [HomeFragment]'s data and sorting modes.
* TODO: Custom tabs
*/ */
class HomeViewModel : ViewModel() { class HomeViewModel : ViewModel() {
private val mSongs = MutableLiveData(listOf<Song>()) private val mSongs = MutableLiveData(listOf<Song>())
@ -57,36 +58,29 @@ class HomeViewModel : ViewModel() {
private val mCurTab = MutableLiveData(mTabs.value!![0]) private val mCurTab = MutableLiveData(mTabs.value!![0])
val curTab: LiveData<DisplayMode> = mCurTab 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 musicStore = MusicStore.getInstance()
private val settingsManager = SettingsManager.getInstance() private val settingsManager = SettingsManager.getInstance()
init { init {
mSongs.value = songSortMode.sortSongs(musicStore.songs) mSongs.value = settingsManager.libSongSort.sortSongs(musicStore.songs)
mAlbums.value = albumSortMode.sortAlbums(musicStore.albums) mAlbums.value = settingsManager.libAlbumSort.sortAlbums(musicStore.albums)
mArtists.value = artistSortMode.sortModels(musicStore.artists) mArtists.value = settingsManager.libArtistSort.sortModels(musicStore.artists)
mGenres.value = genreSortMode.sortModels(musicStore.genres) mGenres.value = settingsManager.libGenreSort.sortModels(musicStore.genres)
} }
/** /**
* Update the current tab based off of the new ViewPager position. * Update the current tab based off of the new ViewPager position.
*/ */
fun updateCurrentTab(pos: Int) { fun updateCurrentTab(pos: Int) {
val mode = mTabs.value!![pos] mCurTab.value = mTabs.value!![pos]
mCurTab.value = mode
} }
fun getSortForDisplay(displayMode: DisplayMode): SortMode { fun getSortForDisplay(displayMode: DisplayMode): SortMode {
return when (displayMode) { return when (displayMode) {
DisplayMode.SHOW_GENRES -> genreSortMode DisplayMode.SHOW_SONGS -> settingsManager.libSongSort
DisplayMode.SHOW_ARTISTS -> artistSortMode DisplayMode.SHOW_ALBUMS -> settingsManager.libAlbumSort
DisplayMode.SHOW_ALBUMS -> albumSortMode DisplayMode.SHOW_ARTISTS -> settingsManager.libArtistSort
DisplayMode.SHOW_SONGS -> songSortMode DisplayMode.SHOW_GENRES -> settingsManager.libGenreSort
} }
} }
@ -96,20 +90,20 @@ class HomeViewModel : ViewModel() {
fun updateCurrentSort(sort: SortMode) { fun updateCurrentSort(sort: SortMode) {
when (mCurTab.value) { when (mCurTab.value) {
DisplayMode.SHOW_SONGS -> { DisplayMode.SHOW_SONGS -> {
songSortMode = sort settingsManager.libSongSort = sort
mSongs.value = sort.sortSongs(mSongs.value!!) mSongs.value = sort.sortSongs(mSongs.value!!)
} }
DisplayMode.SHOW_ALBUMS -> { DisplayMode.SHOW_ALBUMS -> {
albumSortMode = sort settingsManager.libAlbumSort = sort
mAlbums.value = sort.sortAlbums(mAlbums.value!!) mAlbums.value = sort.sortAlbums(mAlbums.value!!)
} }
DisplayMode.SHOW_ARTISTS -> { DisplayMode.SHOW_ARTISTS -> {
artistSortMode = sort settingsManager.libArtistSort = sort
mArtists.value = sort.sortModels(mArtists.value!!) mArtists.value = sort.sortModels(mArtists.value!!)
} }
DisplayMode.SHOW_GENRES -> { DisplayMode.SHOW_GENRES -> {
genreSortMode = sort settingsManager.libGenreSort = sort
mGenres.value = sort.sortModels(mGenres.value!!) mGenres.value = sort.sortModels(mGenres.value!!)
} }
} }

View file

@ -119,32 +119,72 @@ class SettingsManager private constructor(context: Context) :
} }
} }
var albumSortMode: SortMode var libSongSort: SortMode
get() = SortMode.fromInt(sharedPrefs.getInt(KEY_ALBUM_SORT, Int.MIN_VALUE)) get() = SortMode.fromInt(sharedPrefs.getInt(KEY_LIB_SONGS_SORT, Int.MIN_VALUE))
?: SortMode.ASCENDING ?: SortMode.ASCENDING
set(value) { set(value) {
sharedPrefs.edit { sharedPrefs.edit {
putInt(KEY_ALBUM_SORT, value.toInt()) putInt(KEY_LIB_SONGS_SORT, value.toInt())
apply() apply()
} }
} }
var artistSortMode: SortMode var libAlbumSort: SortMode
get() = SortMode.fromInt(sharedPrefs.getInt(KEY_ARTIST_SORT, Int.MIN_VALUE)) 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 ?: SortMode.YEAR
set(value) { set(value) {
sharedPrefs.edit { sharedPrefs.edit {
putInt(KEY_ARTIST_SORT, value.toInt()) putInt(KEY_DETAIL_ARTIST_SORT, value.toInt())
apply() apply()
} }
} }
var genreSortMode: SortMode var detailGenreSort: SortMode
get() = SortMode.fromInt(sharedPrefs.getInt(KEY_GENRE_SORT, Int.MIN_VALUE)) get() = SortMode.fromInt(sharedPrefs.getInt(KEY_DETAIL_GENRE_SORT, Int.MIN_VALUE))
?: SortMode.ASCENDING ?: SortMode.ASCENDING
set(value) { set(value) {
sharedPrefs.edit { sharedPrefs.edit {
putInt(KEY_GENRE_SORT, value.toInt()) putInt(KEY_DETAIL_GENRE_SORT, value.toInt())
apply() apply()
} }
} }
@ -212,9 +252,15 @@ class SettingsManager private constructor(context: Context) :
const val KEY_BLACKLIST = "KEY_BLACKLIST" const val KEY_BLACKLIST = "KEY_BLACKLIST"
const val KEY_SEARCH_FILTER_MODE = "KEY_SEARCH_FILTER" 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_LIB_SONGS_SORT = "KEY_SONGS_SORT"
const val KEY_GENRE_SORT = "KEY_GENRE_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 @Volatile
private var INSTANCE: SettingsManager? = null private var INSTANCE: SettingsManager? = null