diff --git a/CHANGELOG.md b/CHANGELOG.md index a5effd8d0..b1bd13e9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ #### What's Improved - Added ability to edit previously played or currently playing items in the queue - Added support for date values formatted as "YYYYMMDD" +- Pressing the button will now clear the current selection before navigating back #### What's Fixed - Fixed unreliable ReplayGain adjustment application in certain situations diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index d13508542..8b0c32112 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -403,6 +403,11 @@ class MainFragment : return } + // Clear out any prior selections. + if (selectionModel.consume().isNotEmpty()) { + return + } + // Then try to navigate out of the explore navigation fragments (i.e Detail Views) binding.exploreNavHost.findNavController().navigateUp() } @@ -427,6 +432,7 @@ class MainFragment : isEnabled = queueSheetBehavior?.state == NeoBottomSheetBehavior.STATE_EXPANDED || playbackSheetBehavior.state == NeoBottomSheetBehavior.STATE_EXPANDED || + selectionModel.selected.value.isNotEmpty() || exploreNavController.currentDestination?.id != exploreNavController.graph.startDestinationId } 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 b46751f12..3c6925e22 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -37,7 +37,6 @@ import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.Sort -import org.oxycblt.auxio.playback.PlaybackSettings import org.oxycblt.auxio.util.* /** 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 e9317c06d..ff5ecd6d1 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -33,11 +33,9 @@ import org.oxycblt.auxio.list.ListFragment import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Music -import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.Sort -import org.oxycblt.auxio.playback.PlaybackSettings import org.oxycblt.auxio.util.collect import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.logD @@ -48,7 +46,8 @@ import org.oxycblt.auxio.util.unlikelyToBeNull * A [ListFragment] that shows information about an [Artist]. * @author Alexander Capehart (OxygenCobalt) */ -class ArtistDetailFragment : ListFragment(), DetailAdapter.Listener { +class ArtistDetailFragment : + ListFragment(), DetailAdapter.Listener { private val detailModel: DetailViewModel by activityViewModels() // Information about what artist to display is initially within the navigation arguments // as a UID, as that is the only safe way to parcel an artist. @@ -130,8 +129,8 @@ class ArtistDetailFragment : ListFragment(), Detai } else { // When configured to play from the selected item, we already have an Artist // to play from. - playbackModel.playFromArtist(item, - unlikelyToBeNull(detailModel.currentArtist.value)) + playbackModel.playFromArtist( + item, unlikelyToBeNull(detailModel.currentArtist.value)) } } else -> error("Unexpected datatype: ${item::class.simpleName}") diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt index 10118050c..fd6f97b5a 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt @@ -131,7 +131,8 @@ class DetailViewModel(application: Application) : * The [MusicMode] to use when playing a [Song] from the UI, or null to play from the currently * shown item. */ - val playbackMode: MusicMode? get() = playbackSettings.inParentPlaybackMode + val playbackMode: MusicMode? + get() = playbackSettings.inParentPlaybackMode init { musicStore.addListener(this) 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 f5e7bdd24..36c3815fc 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -34,11 +34,9 @@ import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.Music -import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.Sort -import org.oxycblt.auxio.playback.PlaybackSettings import org.oxycblt.auxio.util.collect import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.logD @@ -49,7 +47,8 @@ import org.oxycblt.auxio.util.unlikelyToBeNull * A [ListFragment] that shows information for a particular [Genre]. * @author Alexander Capehart (OxygenCobalt) */ -class GenreDetailFragment : ListFragment(), DetailAdapter.Listener { +class GenreDetailFragment : + ListFragment(), DetailAdapter.Listener { private val detailModel: DetailViewModel by activityViewModels() // Information about what genre to display is initially within the navigation arguments // as a UID, as that is the only safe way to parcel an genre. @@ -129,8 +128,8 @@ class GenreDetailFragment : ListFragment(), Detail } else { // When configured to play from the selected item, we already have an Artist // to play from. - playbackModel.playFromArtist(item, - unlikelyToBeNull(detailModel.currentArtist.value)) + playbackModel.playFromArtist( + item, unlikelyToBeNull(detailModel.currentArtist.value)) } } else -> error("Unexpected datatype: ${item::class.simpleName}") diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt index e8cdb0d6e..ceb7e9660 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt @@ -43,7 +43,8 @@ import org.oxycblt.auxio.util.inflater * @param listener A [DetailAdapter.Listener] to bind interactions to. * @author Alexander Capehart (OxygenCobalt) */ -class ArtistDetailAdapter(private val listener: Listener) : DetailAdapter(listener, DIFF_CALLBACK) { +class ArtistDetailAdapter(private val listener: Listener) : + DetailAdapter(listener, DIFF_CALLBACK) { override fun getItemViewType(position: Int) = when (differ.currentList[position]) { // Support an artist header, and special artist albums/songs. diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt index 6533b8168..e956c5a91 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt @@ -41,7 +41,8 @@ import org.oxycblt.auxio.util.inflater * @param listener A [DetailAdapter.Listener] to bind interactions to. * @author Alexander Capehart (OxygenCobalt) */ -class GenreDetailAdapter(private val listener: Listener) : DetailAdapter(listener, DIFF_CALLBACK) { +class GenreDetailAdapter(private val listener: Listener) : + DetailAdapter(listener, DIFF_CALLBACK) { override fun getItemViewType(position: Int) = when (differ.currentList[position]) { // Support the Genre header and generic Artist/Song items. There's nothing about diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt index cd5f55b47..8775e99c3 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt @@ -65,7 +65,8 @@ class HomeViewModel(application: Application) : get() = _genresList /** The [MusicMode] to use when playing a [Song] from the UI. */ - val playbackMode: MusicMode get() = playbackSettings.inListPlaybackMode + val playbackMode: MusicMode + get() = playbackSettings.inListPlaybackMode /** * A list of [MusicMode] corresponding to the current [Tab] configuration, excluding invisible diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt index 58b6831b1..2a15e79b8 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt @@ -37,7 +37,6 @@ import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.Sort -import org.oxycblt.auxio.playback.PlaybackSettings import org.oxycblt.auxio.playback.formatDurationMs import org.oxycblt.auxio.playback.secsToMs import org.oxycblt.auxio.util.collectImmediately diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt index 96cd6bc6d..e44651763 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt @@ -25,7 +25,6 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch -import org.oxycblt.auxio.home.HomeSettings import org.oxycblt.auxio.music.* import org.oxycblt.auxio.playback.state.* import org.oxycblt.auxio.util.context @@ -84,7 +83,8 @@ class PlaybackViewModel(application: Application) : get() = _genrePlaybackPickerSong /** The current action to show on the playback bar. */ - val currentBarAction: ActionMode get() = playbackSettings.barAction + val currentBarAction: ActionMode + get() = playbackSettings.barAction /** * The current audio session ID of the internal player. Null if no [InternalPlayer] is 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 f70cf7a90..2c837a888 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt @@ -35,10 +35,8 @@ import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.Music -import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.playback.PlaybackSettings import org.oxycblt.auxio.util.* /** diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt index 4782026f2..b543898b7 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt @@ -56,7 +56,8 @@ class SearchViewModel(application: Application) : get() = _searchResults /** The [MusicMode] to use when playing a [Song] from the UI. */ - val playbackMode: MusicMode get() = playbackSettings.inListPlaybackMode + val playbackMode: MusicMode + get() = playbackSettings.inListPlaybackMode init { musicStore.addListener(this)