From e0297851814ace110515e2f62eceda5f14efd3d7 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Mon, 11 Jan 2021 12:28:13 -0700 Subject: [PATCH] Fix playing item highlighting issue Fix an issue if one plays a song from all songs and then attempts to play a song from its genre/album, the song will not highlight despite it supposely playing. --- .../auxio/detail/AlbumDetailFragment.kt | 30 +++++++++++++------ .../auxio/detail/GenreDetailFragment.kt | 30 +++++++++++++------ 2 files changed, 42 insertions(+), 18 deletions(-) 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 2448453d0..23d1d9860 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -112,15 +112,12 @@ class AlbumDetailFragment : DetailFragment() { // --- PLAYBACKVIEWMODEL SETUP --- - playbackModel.song.observe(viewLifecycleOwner) { song -> - if (playbackModel.mode.value == PlaybackMode.IN_ALBUM && - playbackModel.parent.value?.id == detailModel.currentAlbum.value!!.id - ) { - detailAdapter.highlightSong(song, binding.detailRecycler) - } else { - // Clear the viewholders if the mode isn't ALL_SONGS - detailAdapter.highlightSong(null, binding.detailRecycler) - } + playbackModel.song.observe(viewLifecycleOwner) { + handlePlayingItem(detailAdapter) + } + + playbackModel.mode.observe(viewLifecycleOwner) { + handlePlayingItem(detailAdapter) } playbackModel.isInUserQueue.observe(viewLifecycleOwner) { @@ -134,6 +131,21 @@ class AlbumDetailFragment : DetailFragment() { return binding.root } + /** + * Handle an update to the mode or the song and determine whether to highlight a song + * item based off that + */ + private fun handlePlayingItem(detailAdapter: AlbumDetailAdapter) { + if (playbackModel.mode.value == PlaybackMode.IN_ALBUM && + playbackModel.parent.value?.id == detailModel.currentAlbum.value!!.id + ) { + detailAdapter.highlightSong(playbackModel.song.value, binding.detailRecycler) + } else { + // Clear the viewholders if the mode isn't ALL_SONGS + detailAdapter.highlightSong(null, binding.detailRecycler) + } + } + /** * Scroll to the currently playing item. */ 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 30c49242f..d9332e4db 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -87,15 +87,12 @@ class GenreDetailFragment : DetailFragment() { // --- PLAYBACKVIEWMODEL SETUP --- - playbackModel.song.observe(viewLifecycleOwner) { song -> - if (playbackModel.mode.value == PlaybackMode.IN_GENRE && - playbackModel.parent.value?.id == detailModel.currentGenre.value!!.id - ) { - detailAdapter.highlightSong(song, binding.detailRecycler) - } else { - // Clear the viewholders if the mode isn't ALL_SONGS - detailAdapter.highlightSong(null, binding.detailRecycler) - } + playbackModel.song.observe(viewLifecycleOwner) { + handlePlayingItem(detailAdapter) + } + + playbackModel.mode.observe(viewLifecycleOwner) { + handlePlayingItem(detailAdapter) } playbackModel.isInUserQueue.observe(viewLifecycleOwner) { @@ -108,4 +105,19 @@ class GenreDetailFragment : DetailFragment() { return binding.root } + + /** + * Handle an update to the mode or the song and determine whether to highlight a song + * item based off that + */ + private fun handlePlayingItem(detailAdapter: GenreDetailAdapter) { + if (playbackModel.mode.value == PlaybackMode.IN_GENRE && + playbackModel.parent.value?.id == detailModel.currentGenre.value!!.id + ) { + detailAdapter.highlightSong(playbackModel.song.value, binding.detailRecycler) + } else { + // Clear the viewholders if the mode isn't ALL_SONGS + detailAdapter.highlightSong(null, binding.detailRecycler) + } + } }