diff --git a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt index 4d7d2b8b9..c9191a95a 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt @@ -46,6 +46,7 @@ class LibraryFragment : Fragment() { override fun onPause() { super.onPause() + callback.isEnabled = false } diff --git a/app/src/main/java/org/oxycblt/auxio/library/LibraryListFragment.kt b/app/src/main/java/org/oxycblt/auxio/library/LibraryListFragment.kt index 7273c6b37..b20d369e8 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryListFragment.kt @@ -8,18 +8,22 @@ import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentLibraryListBinding import org.oxycblt.auxio.library.adapters.ArtistAdapter import org.oxycblt.auxio.music.MusicViewModel +import org.oxycblt.auxio.music.models.Artist import org.oxycblt.auxio.recycler.ClickListener import org.oxycblt.auxio.recycler.applyDivider class LibraryListFragment : Fragment() { - private val musicModel: MusicViewModel by activityViewModels { - MusicViewModel.Factory(requireActivity().application) + private val musicModel: MusicViewModel by activityViewModels() + + private val libraryModel: LibraryViewModel by lazy { + ViewModelProvider(this).get(LibraryViewModel::class.java) } override fun onCreateView( @@ -33,11 +37,7 @@ class LibraryListFragment : Fragment() { binding.libraryRecycler.adapter = ArtistAdapter( musicModel.artists.value!!, - ClickListener { artist -> - findNavController().navigate( - LibraryListFragmentDirections.actionShowArtist(artist.id) - ) - } + ClickListener { navToArtist(it) } ) binding.libraryRecycler.applyDivider() binding.libraryRecycler.setHasFixedSize(true) @@ -46,4 +46,21 @@ class LibraryListFragment : Fragment() { return binding.root } + + override fun onPause() { + super.onPause() + + libraryModel.isAlreadyNavigating = false + } + + private fun navToArtist(artist: Artist) { + // Don't navigate to a fragment multiple times if multiple items are accepted. + if (!libraryModel.isAlreadyNavigating) { + libraryModel.isAlreadyNavigating = true + + findNavController().navigate( + LibraryListFragmentDirections.actionShowArtist(artist.id) + ) + } + } } diff --git a/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt b/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt new file mode 100644 index 000000000..d23605d04 --- /dev/null +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt @@ -0,0 +1,7 @@ +package org.oxycblt.auxio.library + +import androidx.lifecycle.ViewModel + +class LibraryViewModel : ViewModel() { + var isAlreadyNavigating = false +}