diff --git a/app/src/main/java/org/oxycblt/auxio/coil/MosaicFetcher.kt b/app/src/main/java/org/oxycblt/auxio/coil/MosaicFetcher.kt index f5af35442..fb4108054 100644 --- a/app/src/main/java/org/oxycblt/auxio/coil/MosaicFetcher.kt +++ b/app/src/main/java/org/oxycblt/auxio/coil/MosaicFetcher.kt @@ -106,6 +106,9 @@ class MosaicFetcher(private val context: Context) : Fetcher { * https://github.com/kabouzeid/Phonograph */ private fun drawMosaic(streams: List): 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 ) diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt index 1f17f79b1..13b05e040 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt @@ -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 } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt index f6e75915d..3aab76b95 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -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() { diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt index 11f4df009..061083982 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt @@ -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()) @@ -57,36 +58,29 @@ class HomeViewModel : ViewModel() { private val mCurTab = MutableLiveData(mTabs.value!![0]) val curTab: LiveData = 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!!) } } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt b/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt index e1aadd187..fff229e8d 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt @@ -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