diff --git a/.gitignore b/.gitignore index 3ccce7e90..72fc76f27 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ local.properties build/ release/ +deps/ # Studio .idea/ diff --git a/app/build.gradle b/app/build.gradle index 67aa4aa09..c995942a9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -127,4 +127,4 @@ task ktlintFormat(type: JavaExec, group: "formatting") { classpath = configurations.ktlint args "-F", "src/**/*.kt" -} \ No newline at end of file +} diff --git a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt index 0346f6414..fc7e6d356 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -47,18 +47,17 @@ class ArtistDetailFragment : DetailFragment() { val detailAdapter = ArtistDetailAdapter( playbackModel, detailModel, doOnClick = { data -> - if (data is Album) { - if (!detailModel.isNavigating) { - detailModel.setNavigating(true) + if (!detailModel.isNavigating) { + detailModel.setNavigating(true) - findNavController().navigate( - ArtistDetailFragmentDirections.actionShowAlbum(data.id) - ) - } - } else if (data is Song) { - playbackModel.playSong(data, PlaybackMode.IN_ARTIST) + findNavController().navigate( + ArtistDetailFragmentDirections.actionShowAlbum(data.id) + ) } }, + doOnSongClick = { data -> + playbackModel.playSong(data, PlaybackMode.IN_ARTIST) + }, doOnLongClick = { view, data -> newMenu(view, data, ActionMenu.FLAG_IN_ARTIST) } @@ -84,14 +83,19 @@ class ArtistDetailFragment : DetailFragment() { pos == 0 || detailAdapter.currentList.getOrNull(pos) is ActionHeader } - detailAdapter.submitList(createData(songsHeader, detailModel.artistSortMode.value!!)) - // --- VIEWMODEL SETUP --- detailModel.artistSortMode.observe(viewLifecycleOwner) { mode -> logD("Updating sort mode to $mode") - detailAdapter.submitList(createData(songsHeader, mode)) + val artist = detailModel.currentArtist.value!! + + val data = mutableListOf(artist) + data.addAll(SortMode.NUMERIC_DOWN.getSortedAlbumList(artist.albums)) + data.add(songsHeader) + data.addAll(mode.getSortedArtistSongList(artist.songs)) + + detailAdapter.submitList(data) } detailModel.navToItem.observe(viewLifecycleOwner) { item -> @@ -144,15 +148,4 @@ class ArtistDetailFragment : DetailFragment() { return binding.root } - - private fun createData(songHeader: ActionHeader, mode: SortMode): MutableList { - val artist = detailModel.currentArtist.value!! - - val data = mutableListOf(artist) - data.addAll(SortMode.NUMERIC_DOWN.getSortedAlbumList(artist.albums)) - data.add(songHeader) - data.addAll(mode.getSortedArtistSongList(artist.songs)) - - return data - } } 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 83fc1ffa7..b955fa949 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt @@ -18,7 +18,7 @@ class DetailViewModel : ViewModel() { private val mCurrentGenre = MutableLiveData() val currentGenre: LiveData get() = mCurrentGenre - private val mCurrentArtist = MutableLiveData() + val mCurrentArtist = MutableLiveData() val currentArtist: LiveData get() = mCurrentArtist private val mCurrentAlbum = MutableLiveData() diff --git a/app/src/main/java/org/oxycblt/auxio/detail/adapters/ArtistDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/adapters/ArtistDetailAdapter.kt index 151dfa28d..6fc61a5a2 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/adapters/ArtistDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/adapters/ArtistDetailAdapter.kt @@ -25,13 +25,15 @@ import org.oxycblt.auxio.ui.inflater import org.oxycblt.auxio.ui.setTextColorResource /** - * An adapter for displaying the [Album]s of an artist. + * An adapter for displaying the [Album]s and [Song]s of an artist. + * This isnt the nicest implementation, but it works. * @author OxygenCobalt */ class ArtistDetailAdapter( private val playbackModel: PlaybackViewModel, private val detailModel: DetailViewModel, - private val doOnClick: (data: BaseModel) -> Unit, + private val doOnClick: (data: Album) -> Unit, + private val doOnSongClick: (data: Song) -> Unit, private val doOnLongClick: (view: View, data: BaseModel) -> Unit, ) : ListAdapter(DiffCallback()) { private var currentAlbum: Album? = null @@ -227,7 +229,7 @@ class ArtistDetailAdapter( inner class ArtistSongViewHolder( private val binding: ItemArtistSongBinding, - ) : BaseViewHolder(binding, doOnClick, doOnLongClick), Highlightable { + ) : BaseViewHolder(binding, doOnSongClick, doOnLongClick), Highlightable { private val normalTextColor = binding.songName.currentTextColor override fun onBind(data: Song) { diff --git a/app/src/main/res/layout/item_artist_song.xml b/app/src/main/res/layout/item_artist_song.xml index e0bb1712a..58709b660 100644 --- a/app/src/main/res/layout/item_artist_song.xml +++ b/app/src/main/res/layout/item_artist_song.xml @@ -28,10 +28,10 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_genre_song.xml b/app/src/main/res/layout/item_genre_song.xml index 9f2d70daa..74304d6df 100644 --- a/app/src/main/res/layout/item_genre_song.xml +++ b/app/src/main/res/layout/item_genre_song.xml @@ -30,7 +30,7 @@ android:layout_marginEnd="@dimen/spacing_medium" android:text="@{song.name}" app:layout_constraintBottom_toTopOf="@+id/song_info" - app:layout_constraintEnd_toStartOf="@+id/duration" + app:layout_constraintEnd_toStartOf="@+id/song_duration" app:layout_constraintStart_toEndOf="@+id/album_cover" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_chainStyle="packed" @@ -42,13 +42,13 @@ android:layout_marginEnd="@dimen/spacing_medium" android:text="@{@string/format_info(song.album.artist.name, song.album.name)}" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@+id/duration" + app:layout_constraintEnd_toStartOf="@+id/song_duration" app:layout_constraintStart_toEndOf="@+id/album_cover" app:layout_constraintTop_toBottomOf="@+id/song_name" tools:text="Artist / Album" />