Enable albums on LibraryFragment

Readd album support to LibraryFragment.
This commit is contained in:
OxygenCobalt 2020-09-26 11:34:39 -06:00
parent fddf5e4472
commit f754a82ba7
5 changed files with 53 additions and 19 deletions

View file

@ -21,9 +21,6 @@ import org.oxycblt.auxio.theme.toColor
class MainFragment : Fragment() { class MainFragment : Fragment() {
private val shownFragments = listOf(0, 1) private val shownFragments = listOf(0, 1)
private val libraryFragment: LibraryFragment by lazy { LibraryFragment() }
private val songsFragment: SongsFragment by lazy { SongsFragment() }
private val tabIcons = listOf( private val tabIcons = listOf(
R.drawable.ic_library, R.drawable.ic_library,
R.drawable.ic_song R.drawable.ic_song
@ -81,10 +78,10 @@ class MainFragment : Fragment() {
private fun fragmentAt(position: Int): Fragment { private fun fragmentAt(position: Int): Fragment {
return when (position) { return when (position) {
0 -> libraryFragment 0 -> LibraryFragment()
1 -> songsFragment 1 -> SongsFragment()
else -> libraryFragment else -> SongsFragment()
} }
} }
@ -99,13 +96,14 @@ class MainFragment : Fragment() {
return fragmentAt(position) return fragmentAt(position)
} }
// Not sure how this would happen but it might // If a fragment that shouldn't be shown is somehow shown anyway, just return
// its intended fragment.
Log.e( Log.e(
this::class.simpleName, this::class.simpleName,
"Attempted to index a fragment that shouldn't be shown. Returning libraryFragment." "Attempted to index a fragment that shouldn't be shown."
) )
return libraryFragment return fragmentAt(position)
} }
} }
} }

View file

@ -10,14 +10,20 @@ import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.oxycblt.auxio.MainFragmentDirections import org.oxycblt.auxio.MainFragmentDirections
import org.oxycblt.auxio.databinding.FragmentLibraryBinding import org.oxycblt.auxio.databinding.FragmentLibraryBinding
import org.oxycblt.auxio.library.adapters.AlbumAdapter
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.Album
import org.oxycblt.auxio.music.models.Artist import org.oxycblt.auxio.music.models.Artist
import org.oxycblt.auxio.recycler.ClickListener import org.oxycblt.auxio.recycler.ClickListener
import org.oxycblt.auxio.theme.SHOW_ARTISTS
import org.oxycblt.auxio.theme.applyDivider import org.oxycblt.auxio.theme.applyDivider
class LibraryFragment : Fragment() { class LibraryFragment : Fragment() {
// FIXME: Temp value, remove when there are actual preferences
private val libraryMode = SHOW_ARTISTS
private val musicModel: MusicViewModel by activityViewModels() private val musicModel: MusicViewModel by activityViewModels()
private val libraryModel: LibraryViewModel by activityViewModels() private val libraryModel: LibraryViewModel by activityViewModels()
@ -28,13 +34,22 @@ class LibraryFragment : Fragment() {
): View? { ): View? {
val binding = FragmentLibraryBinding.inflate(inflater) val binding = FragmentLibraryBinding.inflate(inflater)
binding.libraryRecycler.adapter = ArtistAdapter( binding.libraryRecycler.adapter = when (libraryMode) {
SHOW_ARTISTS -> ArtistAdapter(
musicModel.artists.value!!, musicModel.artists.value!!,
ClickListener { ClickListener {
navToArtist(it) navToArtist(it)
} }
) )
else -> AlbumAdapter(
musicModel.albums.value!!,
ClickListener {
navToAlbum(it)
}
)
}
binding.libraryRecycler.applyDivider() binding.libraryRecycler.applyDivider()
binding.libraryRecycler.setHasFixedSize(true) binding.libraryRecycler.setHasFixedSize(true)
@ -50,12 +65,26 @@ class LibraryFragment : Fragment() {
} }
private fun navToArtist(artist: Artist) { private fun navToArtist(artist: Artist) {
// Don't navigate if an item already has been selected. // Dont navigate if an item has already been selected
if (!libraryModel.isAlreadyNavigating) { if (!libraryModel.isAlreadyNavigating) {
libraryModel.isAlreadyNavigating = true libraryModel.isAlreadyNavigating = true
findNavController().navigate( findNavController().navigate(
MainFragmentDirections.actionShowArtist(artist.id) MainFragmentDirections.actionShowArtist(
artist.id
)
)
}
}
private fun navToAlbum(album: Album) {
if (!libraryModel.isAlreadyNavigating) {
libraryModel.isAlreadyNavigating = true
findNavController().navigate(
MainFragmentDirections.actionShowAlbum(
album.id
)
) )
} }
} }

View file

@ -74,8 +74,6 @@ class LoadingFragment : Fragment(R.layout.fragment_loading) {
} }
// Force an error screen if the permissions are denied or the prompt needs to be shown. // Force an error screen if the permissions are denied or the prompt needs to be shown.
// This should be in MusicRepository, but the response comes faster than the view creation
// itself and therefore causes the error screen to not appear.
if (checkPerms()) { if (checkPerms()) {
onNoPerms() onNoPerms()
} else { } else {

View file

@ -0,0 +1,6 @@
package org.oxycblt.auxio.theme
// Preference Constants
const val SHOW_ARTISTS = 0
const val SHOW_ALBUMS = 1
const val SHOW_GENRES = 2

View file

@ -33,6 +33,9 @@
app:popExitAnim="@anim/fragment_fade_exit" app:popExitAnim="@anim/fragment_fade_exit"
app:destination="@id/artist_detail_fragment" app:destination="@id/artist_detail_fragment"
app:launchSingleTop="true" /> app:launchSingleTop="true" />
<action
android:id="@+id/action_show_album"
app:destination="@id/album_detail_fragment" />
</fragment> </fragment>
<fragment <fragment
android:id="@+id/artist_detail_fragment" android:id="@+id/artist_detail_fragment"