From f754a82ba7eb6700860e4584aee39dc07d948481 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Sat, 26 Sep 2020 11:34:39 -0600 Subject: [PATCH] Enable albums on LibraryFragment Readd album support to LibraryFragment. --- .../java/org/oxycblt/auxio/MainFragment.kt | 16 +++---- .../oxycblt/auxio/library/LibraryFragment.kt | 45 +++++++++++++++---- .../oxycblt/auxio/loading/LoadingFragment.kt | 2 - .../org/oxycblt/auxio/theme/PrefConstants.kt | 6 +++ app/src/main/res/navigation/nav_main.xml | 3 ++ 5 files changed, 53 insertions(+), 19 deletions(-) create mode 100644 app/src/main/java/org/oxycblt/auxio/theme/PrefConstants.kt diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index 8de267f57..5b3b6f942 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -21,9 +21,6 @@ import org.oxycblt.auxio.theme.toColor class MainFragment : Fragment() { private val shownFragments = listOf(0, 1) - private val libraryFragment: LibraryFragment by lazy { LibraryFragment() } - private val songsFragment: SongsFragment by lazy { SongsFragment() } - private val tabIcons = listOf( R.drawable.ic_library, R.drawable.ic_song @@ -81,10 +78,10 @@ class MainFragment : Fragment() { private fun fragmentAt(position: Int): Fragment { return when (position) { - 0 -> libraryFragment - 1 -> songsFragment + 0 -> LibraryFragment() + 1 -> SongsFragment() - else -> libraryFragment + else -> SongsFragment() } } @@ -99,13 +96,14 @@ class MainFragment : Fragment() { 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( 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) } } } 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 58a4d43eb..46e3868ee 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt @@ -10,14 +10,20 @@ import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import org.oxycblt.auxio.MainFragmentDirections import org.oxycblt.auxio.databinding.FragmentLibraryBinding +import org.oxycblt.auxio.library.adapters.AlbumAdapter import org.oxycblt.auxio.library.adapters.ArtistAdapter import org.oxycblt.auxio.music.MusicViewModel +import org.oxycblt.auxio.music.models.Album import org.oxycblt.auxio.music.models.Artist import org.oxycblt.auxio.recycler.ClickListener +import org.oxycblt.auxio.theme.SHOW_ARTISTS import org.oxycblt.auxio.theme.applyDivider 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 libraryModel: LibraryViewModel by activityViewModels() @@ -28,12 +34,21 @@ class LibraryFragment : Fragment() { ): View? { val binding = FragmentLibraryBinding.inflate(inflater) - binding.libraryRecycler.adapter = ArtistAdapter( - musicModel.artists.value!!, - ClickListener { - navToArtist(it) - } - ) + binding.libraryRecycler.adapter = when (libraryMode) { + SHOW_ARTISTS -> ArtistAdapter( + musicModel.artists.value!!, + ClickListener { + navToArtist(it) + } + ) + + else -> AlbumAdapter( + musicModel.albums.value!!, + ClickListener { + navToAlbum(it) + } + ) + } binding.libraryRecycler.applyDivider() binding.libraryRecycler.setHasFixedSize(true) @@ -50,12 +65,26 @@ class LibraryFragment : Fragment() { } 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) { libraryModel.isAlreadyNavigating = true 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 + ) ) } } diff --git a/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt b/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt index 629c9efcc..418aae838 100644 --- a/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt @@ -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. - // 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()) { onNoPerms() } else { diff --git a/app/src/main/java/org/oxycblt/auxio/theme/PrefConstants.kt b/app/src/main/java/org/oxycblt/auxio/theme/PrefConstants.kt new file mode 100644 index 000000000..bb0abbe99 --- /dev/null +++ b/app/src/main/java/org/oxycblt/auxio/theme/PrefConstants.kt @@ -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 diff --git a/app/src/main/res/navigation/nav_main.xml b/app/src/main/res/navigation/nav_main.xml index a7c4c8583..5ad27a299 100644 --- a/app/src/main/res/navigation/nav_main.xml +++ b/app/src/main/res/navigation/nav_main.xml @@ -33,6 +33,9 @@ app:popExitAnim="@anim/fragment_fade_exit" app:destination="@id/artist_detail_fragment" app:launchSingleTop="true" /> +