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 d80070134..e256c843b 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -47,7 +47,9 @@ class ArtistDetailFragment : Fragment() { val albumAdapter = DetailAlbumAdapter( ClickListener { - navToAlbum(it) + findNavController().navigate( + ArtistDetailFragmentDirections.actionShowAlbum(it.id, false) + ) } ) @@ -90,21 +92,4 @@ class ArtistDetailFragment : Fragment() { return binding.root } - - override fun onResume() { - super.onResume() - - detailModel.isAlreadyNavigating = false - } - - private fun navToAlbum(album: Album) { - // Don't navigate if an item already has been selected. - if (!detailModel.isAlreadyNavigating) { - detailModel.isAlreadyNavigating = true - - findNavController().navigate( - ArtistDetailFragmentDirections.actionShowAlbum(album.id, false) - ) - } - } } 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 2ee161426..4777ad9e4 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt @@ -9,8 +9,6 @@ import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.recycler.SortMode class DetailViewModel : ViewModel() { - var isAlreadyNavigating = false - private val mGenreSortMode = MutableLiveData(SortMode.ALPHA_DOWN) val genreSortMode: LiveData get() = mGenreSortMode 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 63737ebb5..fe682e5a5 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -47,7 +47,9 @@ class GenreDetailFragment : Fragment() { val albumAdapter = DetailArtistAdapter( ClickListener { - navToArtist(it) + findNavController().navigate( + GenreDetailFragmentDirections.actionShowArtist(it.id) + ) } ) @@ -88,21 +90,4 @@ class GenreDetailFragment : Fragment() { return binding.root } - - override fun onResume() { - super.onResume() - - detailModel.isAlreadyNavigating = false - } - - private fun navToArtist(artist: Artist) { - // Don't navigate if an item already has been selected. - if (!detailModel.isAlreadyNavigating) { - detailModel.isAlreadyNavigating = true - - findNavController().navigate( - GenreDetailFragmentDirections.actionShowArtist(artist.id) - ) - } - } } 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 d1052eaf4..77864b37a 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt @@ -87,28 +87,17 @@ class LibraryFragment : Fragment() { return binding.root } - override fun onResume() { - super.onResume() - - libraryModel.isAlreadyNavigating = false - } - private fun navToItem(baseModel: BaseModel) { - // Don't navigate if an item has already been selected - if (!libraryModel.isAlreadyNavigating) { - libraryModel.isAlreadyNavigating = true + Log.d(this::class.simpleName, "Navigating to the detail fragment for ${baseModel.name}") - Log.d(this::class.simpleName, "Navigating to the detail fragment for $baseModel.name") + findNavController().navigate( + when (baseModel) { + is Genre -> MainFragmentDirections.actionShowGenre(baseModel.id) + is Artist -> MainFragmentDirections.actionShowArtist(baseModel.id) + is Album -> MainFragmentDirections.actionShowAlbum(baseModel.id, true) - findNavController().navigate( - when (baseModel) { - is Genre -> MainFragmentDirections.actionShowGenre(baseModel.id) - is Artist -> MainFragmentDirections.actionShowArtist(baseModel.id) - is Album -> MainFragmentDirections.actionShowAlbum(baseModel.id, true) - - else -> return - } - ) - } + else -> return + } + ) } } diff --git a/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt b/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt index 30295f944..354cfa4fb 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt @@ -9,8 +9,6 @@ import org.oxycblt.auxio.recycler.SortMode import org.oxycblt.auxio.theme.SHOW_ARTISTS class LibraryViewModel : ViewModel() { - var isAlreadyNavigating = false - // TODO: Move these to prefs when they're added private val mShowMode = MutableLiveData(SHOW_ARTISTS) val showMode: LiveData get() = mShowMode diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/RecyclerUtils.kt b/app/src/main/java/org/oxycblt/auxio/recycler/RecyclerUtils.kt index 45c7d362b..9deeb638b 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/RecyclerUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/RecyclerUtils.kt @@ -3,8 +3,19 @@ package org.oxycblt.auxio.recycler import androidx.recyclerview.widget.DiffUtil import org.oxycblt.auxio.music.BaseModel -// RecyclerView click listener -class ClickListener(val onClick: (T) -> Unit) +// A RecyclerView click listener that can only be called once. +// Primarily used for navigation to prevent bugs when multiple items are selected. +class ClickListener(private val clickAction: (T) -> Unit) { + private var hasClicked = false + + fun onClick(item: T) { + if (!hasClicked) { + hasClicked = true + + clickAction(item) + } + } +} // Base Diff callback class DiffCallback : DiffUtil.ItemCallback() {