list: clear selection before navigating back

When the back button is pressed, clear the current selection before
navigating back.

This is something I was planning to do but then completely forgot about
when implementing multi-select.

Resolves #316.
This commit is contained in:
Alexander Capehart 2023-01-07 08:19:12 -07:00
parent 6fa53ab873
commit dc73f96ba8
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
13 changed files with 27 additions and 21 deletions

View file

@ -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

View file

@ -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
}

View file

@ -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.*
/**

View file

@ -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<Music, FragmentDetailBinding>(), DetailAdapter.Listener<Music> {
class ArtistDetailFragment :
ListFragment<Music, FragmentDetailBinding>(), DetailAdapter.Listener<Music> {
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<Music, FragmentDetailBinding>(), 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}")

View file

@ -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)

View file

@ -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<Music, FragmentDetailBinding>(), DetailAdapter.Listener<Music> {
class GenreDetailFragment :
ListFragment<Music, FragmentDetailBinding>(), DetailAdapter.Listener<Music> {
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<Music, FragmentDetailBinding>(), 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}")

View file

@ -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<Music>) : DetailAdapter(listener, DIFF_CALLBACK) {
class ArtistDetailAdapter(private val listener: Listener<Music>) :
DetailAdapter(listener, DIFF_CALLBACK) {
override fun getItemViewType(position: Int) =
when (differ.currentList[position]) {
// Support an artist header, and special artist albums/songs.

View file

@ -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<Music>) : DetailAdapter(listener, DIFF_CALLBACK) {
class GenreDetailAdapter(private val listener: Listener<Music>) :
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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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.*
/**

View file

@ -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)