From 3a236bdaf4251edda225756b6bf0ba1eed36e8fa Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Sun, 13 Nov 2022 18:42:11 -0700 Subject: [PATCH] detail: show list of artists in genre UI Show a list of artists that contain songs from a particular genre in the genre UI. This used to be in really early Auxio versions, but was intertwined with some really stupid genre functionality that would include songs from an entire artist for some reason. Since now albums can be shown in several artist entires, it makes no sense now what artists can't be given the same treatment. --- CHANGELOG.md | 1 + .../main/java/org/oxycblt/auxio/detail/DetailViewModel.kt | 2 ++ .../java/org/oxycblt/auxio/detail/recycler/DetailAdapter.kt | 1 + .../org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt | 6 ++++++ 4 files changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00c2bfb19..40b39161f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - Upgraded music ID management: - Added support for MusicBrainz IDs (MBIDs) - Use the more unique MD5 hash of metadata when MBIDs can't be used +- Genres now display a list of artists - Added toggle to load non-music (Such as podcasts) - Music loader now caches parsed metadata for faster load times - Redesigned icon 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 e4de4a462..ac3787331 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt @@ -277,6 +277,8 @@ class DetailViewModel(application: Application) : private fun refreshGenreData(genre: Genre) { logD("Refreshing genre data") val data = mutableListOf(genre) + data.add(Header(R.string.lbl_artists)) + data.addAll(genre.artists) data.add(SortHeader(R.string.lbl_songs)) data.addAll(genreSort.songs(genre.songs)) _genreData.value = data diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/DetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/DetailAdapter.kt index ba2257865..780261460 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/DetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/DetailAdapter.kt @@ -35,6 +35,7 @@ import org.oxycblt.auxio.ui.recycler.MenuItemListener import org.oxycblt.auxio.ui.recycler.SimpleItemCallback import org.oxycblt.auxio.util.context import org.oxycblt.auxio.util.inflater +import org.oxycblt.auxio.util.logD abstract class DetailAdapter( private val listener: L, diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt index c82b8115e..75074a82d 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt @@ -24,9 +24,12 @@ import androidx.recyclerview.widget.RecyclerView import org.oxycblt.auxio.IntegerTable import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.ItemDetailBinding +import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.playback.formatDurationMs +import org.oxycblt.auxio.ui.recycler.ArtistViewHolder +import org.oxycblt.auxio.ui.recycler.Header import org.oxycblt.auxio.ui.recycler.Item import org.oxycblt.auxio.ui.recycler.SimpleItemCallback import org.oxycblt.auxio.ui.recycler.SongViewHolder @@ -43,6 +46,7 @@ class GenreDetailAdapter(private val listener: Listener) : override fun getItemViewType(position: Int) = when (differ.currentList[position]) { is Genre -> GenreDetailViewHolder.VIEW_TYPE + is Artist -> ArtistViewHolder.VIEW_TYPE is Song -> SongViewHolder.VIEW_TYPE else -> super.getItemViewType(position) } @@ -50,6 +54,7 @@ class GenreDetailAdapter(private val listener: Listener) : override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = when (viewType) { GenreDetailViewHolder.VIEW_TYPE -> GenreDetailViewHolder.new(parent) + ArtistViewHolder.VIEW_TYPE -> ArtistViewHolder.new(parent) SongViewHolder.VIEW_TYPE -> SongViewHolder.new(parent) else -> super.onCreateViewHolder(parent, viewType) } @@ -64,6 +69,7 @@ class GenreDetailAdapter(private val listener: Listener) : if (payloads.isEmpty()) { when (val item = differ.currentList[position]) { is Genre -> (holder as GenreDetailViewHolder).bind(item, listener) + is Artist -> (holder as ArtistViewHolder).bind(item, listener) is Song -> (holder as SongViewHolder).bind(item, listener) } }