diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt index f5ea24daf..4f8c12e67 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt @@ -20,6 +20,7 @@ import org.oxycblt.auxio.ui.isEdgeOn * The single [AppCompatActivity] for Auxio. */ class MainActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index 7175ab913..34d86020f 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -26,6 +26,7 @@ import org.oxycblt.auxio.ui.toColor /** * The primary "Home" [Fragment] for Auxio. + * TODO: Make navigation stack instead of artificially rerouting to LibraryFragment */ class MainFragment : Fragment() { private val playbackModel: PlaybackViewModel by activityViewModels() @@ -91,18 +92,19 @@ class MainFragment : Fragment() { } detailModel.navToItem.observe(viewLifecycleOwner) { - if (it != null) { - // If the current destination isn't even LibraryFragment, then navigate there first - if (binding.navBar.selectedItemId != R.id.library_fragment) { + if (it != null && navController != null) { + val curDest = navController.currentDestination?.id + + val isOk = when (it) { + is Song -> (detailModel.currentAlbum.value?.id == it.album.id) magic (curDest != R.id.album_detail_fragment) + is Album -> (detailModel.currentAlbum.value?.id == it.id) magic (curDest != R.id.album_detail_fragment) + is Artist -> (detailModel.currentArtist.value?.id == it.id) magic (curDest != R.id.artist_detail_fragment) + + else -> false + } + + if (isOk) { binding.navBar.selectedItemId = R.id.library_fragment - } else { - // If the user currently is in library, check if its valid to navigate to the - // item in question. - if ((it is Album || it is Song) && shouldGoToAlbum(navController!!)) { - binding.navBar.selectedItemId = R.id.library_fragment - } else if (it is Artist && shouldGoToArtist(navController!!)) { - binding.navBar.selectedItemId = R.id.library_fragment - } } } } @@ -115,29 +117,14 @@ class MainFragment : Fragment() { } /** - * Whether its okay to navigate to the album detail fragment when the playing song/album needs to - * be navigated to + * Magic boolean logic that gets navigation working. + * true true -> true | + * true false -> false | + * false true -> true | + * false false -> false | */ - private fun shouldGoToAlbum(controller: NavController): Boolean { - return ( - controller.currentDestination!!.id == R.id.album_detail_fragment && - detailModel.currentAlbum.value?.id != playbackModel.song.value!!.album.id - ) || - controller.currentDestination!!.id == R.id.artist_detail_fragment || - controller.currentDestination!!.id == R.id.genre_detail_fragment - } - - /** - * Whether its okay to go to the artist detail fragment when the current playing artist - * is selected. - */ - private fun shouldGoToArtist(controller: NavController): Boolean { - return ( - controller.currentDestination!!.id == R.id.artist_detail_fragment && - detailModel.currentArtist.value?.id != playbackModel.song.value!!.album.artist.id - ) || - controller.currentDestination!!.id == R.id.album_detail_fragment || - controller.currentDestination!!.id == R.id.genre_detail_fragment + private infix fun Boolean.magic(other: Boolean): Boolean { + return if (!this && !other) false else !(this && !other) } /** diff --git a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt index 34ce2a801..78f7ed98e 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -86,13 +86,11 @@ class AlbumDetailFragment : DetailFragment() { detailModel.navToParent.observe(viewLifecycleOwner) { if (it) { - if (!args.fromArtist) { - findNavController().navigate( - AlbumDetailFragmentDirections.actionShowParentArtist( - detailModel.currentAlbum.value!!.artist.id - ) + findNavController().navigate( + AlbumDetailFragmentDirections.actionShowParentArtist( + detailModel.currentAlbum.value!!.artist.id ) - } + ) detailModel.doneWithNavToParent() } 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 913e4e305..7e6a06583 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -48,7 +48,7 @@ class ArtistDetailFragment : DetailFragment() { detailModel.updateNavigationStatus(true) findNavController().navigate( - ArtistDetailFragmentDirections.actionShowAlbum(it.id, true) + ArtistDetailFragmentDirections.actionShowAlbum(it.id) ) } }, 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 d9332e4db..4f97f3baf 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -77,7 +77,7 @@ class GenreDetailFragment : DetailFragment() { ) } else if (it is Album) { findNavController().navigate( - GenreDetailFragmentDirections.actionGoAlbum(it.id, false) + GenreDetailFragmentDirections.actionGoAlbum(it.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 61a9dd550..20d4f5bc3 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt @@ -120,7 +120,7 @@ class LibraryFragment : Fragment() { when (baseModel) { is Genre -> LibraryFragmentDirections.actionShowGenre(baseModel.id) is Artist -> LibraryFragmentDirections.actionShowArtist(baseModel.id) - is Album -> LibraryFragmentDirections.actionShowAlbum(baseModel.id, false) + is Album -> LibraryFragmentDirections.actionShowAlbum(baseModel.id) // If given model wasn't valid, then reset the navigation status // and abort the navigation. diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt index 5a69bcb1b..2598c11d4 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt @@ -163,7 +163,7 @@ class SearchFragment : Fragment() { when (baseModel) { is Genre -> SearchFragmentDirections.actionShowGenre(baseModel.id) is Artist -> SearchFragmentDirections.actionShowArtist(baseModel.id) - is Album -> SearchFragmentDirections.actionShowAlbum(baseModel.id, false) + is Album -> SearchFragmentDirections.actionShowAlbum(baseModel.id) // If given model wasn't valid, then reset the navigation status // and abort the navigation. diff --git a/app/src/main/java/org/oxycblt/auxio/ui/InterfaceUtils.kt b/app/src/main/java/org/oxycblt/auxio/ui/InterfaceUtils.kt index 7aadd90ec..beb1e40c4 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/InterfaceUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/InterfaceUtils.kt @@ -7,16 +7,12 @@ import android.content.res.Configuration import android.content.res.Resources import android.graphics.Point import android.os.Build -import android.text.SpannableString import android.text.Spanned -import android.text.style.ForegroundColorSpan import android.util.DisplayMetrics -import android.view.MenuItem import android.view.WindowManager import android.widget.ImageButton import android.widget.TextView import android.widget.Toast -import androidx.annotation.ColorInt import androidx.annotation.ColorRes import androidx.annotation.PluralsRes import androidx.appcompat.app.AppCompatActivity diff --git a/app/src/main/res/navigation/nav_explore.xml b/app/src/main/res/navigation/nav_explore.xml index 8d419bd1b..27e138a86 100644 --- a/app/src/main/res/navigation/nav_explore.xml +++ b/app/src/main/res/navigation/nav_explore.xml @@ -56,9 +56,6 @@ -