Fix navigation bug
Fix a bug where pressing on multiple library items at once would cause a crash.
This commit is contained in:
parent
f7e25d3fa8
commit
d7b9ec4281
3 changed files with 32 additions and 7 deletions
|
|
@ -46,6 +46,7 @@ class LibraryFragment : Fragment() {
|
||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
super.onPause()
|
super.onPause()
|
||||||
|
|
||||||
callback.isEnabled = false
|
callback.isEnabled = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,18 +8,22 @@ import android.view.ViewGroup
|
||||||
import androidx.databinding.DataBindingUtil
|
import androidx.databinding.DataBindingUtil
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import org.oxycblt.auxio.R
|
import org.oxycblt.auxio.R
|
||||||
import org.oxycblt.auxio.databinding.FragmentLibraryListBinding
|
import org.oxycblt.auxio.databinding.FragmentLibraryListBinding
|
||||||
import org.oxycblt.auxio.library.adapters.ArtistAdapter
|
import org.oxycblt.auxio.library.adapters.ArtistAdapter
|
||||||
import org.oxycblt.auxio.music.MusicViewModel
|
import org.oxycblt.auxio.music.MusicViewModel
|
||||||
|
import org.oxycblt.auxio.music.models.Artist
|
||||||
import org.oxycblt.auxio.recycler.ClickListener
|
import org.oxycblt.auxio.recycler.ClickListener
|
||||||
import org.oxycblt.auxio.recycler.applyDivider
|
import org.oxycblt.auxio.recycler.applyDivider
|
||||||
|
|
||||||
class LibraryListFragment : Fragment() {
|
class LibraryListFragment : Fragment() {
|
||||||
|
|
||||||
private val musicModel: MusicViewModel by activityViewModels {
|
private val musicModel: MusicViewModel by activityViewModels()
|
||||||
MusicViewModel.Factory(requireActivity().application)
|
|
||||||
|
private val libraryModel: LibraryViewModel by lazy {
|
||||||
|
ViewModelProvider(this).get(LibraryViewModel::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
|
|
@ -33,11 +37,7 @@ class LibraryListFragment : Fragment() {
|
||||||
|
|
||||||
binding.libraryRecycler.adapter = ArtistAdapter(
|
binding.libraryRecycler.adapter = ArtistAdapter(
|
||||||
musicModel.artists.value!!,
|
musicModel.artists.value!!,
|
||||||
ClickListener { artist ->
|
ClickListener { navToArtist(it) }
|
||||||
findNavController().navigate(
|
|
||||||
LibraryListFragmentDirections.actionShowArtist(artist.id)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
binding.libraryRecycler.applyDivider()
|
binding.libraryRecycler.applyDivider()
|
||||||
binding.libraryRecycler.setHasFixedSize(true)
|
binding.libraryRecycler.setHasFixedSize(true)
|
||||||
|
|
@ -46,4 +46,21 @@ class LibraryListFragment : Fragment() {
|
||||||
|
|
||||||
return binding.root
|
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)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
package org.oxycblt.auxio.library
|
||||||
|
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
|
||||||
|
class LibraryViewModel : ViewModel() {
|
||||||
|
var isAlreadyNavigating = false
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue