From 19a9ab4098b3423cd755d847fef5f0e6e5c2feb0 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Sun, 20 Sep 2020 09:49:25 -0600 Subject: [PATCH] Add backwards navigation from album to artist Add a way for AlbumDetailFragment to return to ArtistDetailFragment. --- .../java/org/oxycblt/auxio/MainActivity.kt | 3 ++- .../auxio/detail/AlbumDetailFragment.kt | 13 +++++++++++++ .../oxycblt/auxio/detail/DetailViewModel.kt | 13 +++++++++++++ .../org/oxycblt/auxio/music/MusicUtils.kt | 2 ++ .../main/res/layout/fragment_album_detail.xml | 8 ++++++++ app/src/main/res/navigation/nav_main.xml | 19 +++++++++++++++---- 6 files changed, 53 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt index 07b2f2272..cf4908371 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt @@ -24,5 +24,6 @@ class MainActivity : AppCompatActivity() { } } -// I wish I knew somewhere else to put this +// RecyclerView click listener +// Dont ask why its here class ClickListener(val onClick: (T) -> Unit) diff --git a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt index 39010e7be..43c97debf 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -7,6 +7,7 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import org.oxycblt.auxio.ClickListener import org.oxycblt.auxio.databinding.FragmentAlbumDetailBinding @@ -17,6 +18,7 @@ import org.oxycblt.auxio.theme.applyDivider class AlbumDetailFragment : Fragment() { private val args: AlbumDetailFragmentArgs by navArgs() + private val detailModel: DetailViewModel by activityViewModels() override fun onCreateView( inflater: LayoutInflater, @@ -31,6 +33,7 @@ class AlbumDetailFragment : Fragment() { val album = musicModel.albums.value?.find { it.id == args.albumId }!! binding.lifecycleOwner = this + binding.detailModel = detailModel binding.album = album binding.songRecycler.adapter = DetailSongAdapter( @@ -42,6 +45,16 @@ class AlbumDetailFragment : Fragment() { binding.songRecycler.applyDivider() binding.songRecycler.setHasFixedSize(true) + detailModel.navToParentArtist.observe(viewLifecycleOwner) { + if (it) { + findNavController().navigate( + AlbumDetailFragmentDirections.actionShowParentArtist(album.artist.id) + ) + + detailModel.doneWithNavToParent() + } + } + Log.d(this::class.simpleName, "Fragment created.") return binding.root 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 3475ed813..4091f593a 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt @@ -1,7 +1,20 @@ package org.oxycblt.auxio.detail +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel class DetailViewModel : ViewModel() { var isAlreadyNavigating = false + + private val mNavToParentArtist = MutableLiveData() + val navToParentArtist: LiveData get() = mNavToParentArtist + + fun navToParent() { + mNavToParentArtist.value = true + } + + fun doneWithNavToParent() { + mNavToParentArtist.value = false + } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt index 8cb121c4d..cb59da50d 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt @@ -45,6 +45,8 @@ fun String.toNamedGenre(): String? { PAREN_FILTER.indexOf(it) > -1 }.toInt() + // If the conversion fails [Due to the genre using an extension that isn't from winamp], + // then return null. return ID3_GENRES.getOrNull(intGenre) } diff --git a/app/src/main/res/layout/fragment_album_detail.xml b/app/src/main/res/layout/fragment_album_detail.xml index 18f871ca3..88386d076 100644 --- a/app/src/main/res/layout/fragment_album_detail.xml +++ b/app/src/main/res/layout/fragment_album_detail.xml @@ -8,6 +8,10 @@ + + + app:popUpToInclusive="true" + app:launchSingleTop="true" /> + app:popExitAnim="@anim/fragment_fade_exit" + app:destination="@id/artist_detail_fragment" + app:launchSingleTop="true" /> + \ No newline at end of file