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:
parent
6fa53ab873
commit
dc73f96ba8
13 changed files with 27 additions and 21 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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.*
|
||||
|
||||
/**
|
||||
|
|
|
@ -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}")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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}")
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.*
|
||||
|
||||
/**
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue