home: handle playback decision event

Forgot to add this.

Resolves #734.
This commit is contained in:
Alexander Capehart 2024-04-04 12:11:23 -06:00
parent a920da3fbd
commit dc51c84c54
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
6 changed files with 31 additions and 11 deletions

View file

@ -1,5 +1,12 @@
# Changelog # Changelog
## dev
#### What's Fixed
- Fixed crash when using play next on the end of a queue or with a single-song queue
- Fixed weird behavior if using play next on the end of a queue with repeat all enabled
- Fixed artist choice dialog not showing up on home screen if playing from artist/genre was enabled
## 3.4.2 ## 3.4.2
#### What's Fixed #### What's Fixed

View file

@ -75,6 +75,7 @@ import org.oxycblt.auxio.music.PlaylistDecision
import org.oxycblt.auxio.music.PlaylistMessage import org.oxycblt.auxio.music.PlaylistMessage
import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.music.external.M3U import org.oxycblt.auxio.music.external.M3U
import org.oxycblt.auxio.playback.PlaybackDecision
import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.util.collect import org.oxycblt.auxio.util.collect
import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.collectImmediately
@ -214,12 +215,13 @@ class HomeFragment :
collectImmediately(homeModel.currentTabType, ::updateCurrentTab) collectImmediately(homeModel.currentTabType, ::updateCurrentTab)
collectImmediately(homeModel.songList, homeModel.isFastScrolling, ::updateFab) collectImmediately(homeModel.songList, homeModel.isFastScrolling, ::updateFab)
collect(homeModel.speedDialOpen, ::updateSpeedDial) collect(homeModel.speedDialOpen, ::updateSpeedDial)
collect(detailModel.toShow.flow, ::handleShow)
collect(listModel.menu.flow, ::handleMenu) collect(listModel.menu.flow, ::handleMenu)
collectImmediately(listModel.selected, ::updateSelection) collectImmediately(listModel.selected, ::updateSelection)
collectImmediately(musicModel.indexingState, ::updateIndexerState) collectImmediately(musicModel.indexingState, ::updateIndexerState)
collect(musicModel.playlistDecision.flow, ::handleDecision) collect(musicModel.playlistDecision.flow, ::handlePlaylistDecision)
collectImmediately(musicModel.playlistMessage.flow, ::handlePlaylistMessage) collectImmediately(musicModel.playlistMessage.flow, ::handlePlaylistMessage)
collect(detailModel.toShow.flow, ::handleShow) collect(playbackModel.playbackDecision.flow, ::handlePlaybackDecision)
} }
override fun onResume() { override fun onResume() {
@ -487,7 +489,7 @@ class HomeFragment :
} }
} }
private fun handleDecision(decision: PlaylistDecision?) { private fun handlePlaylistDecision(decision: PlaylistDecision?) {
if (decision == null) return if (decision == null) return
val directions = val directions =
when (decision) { when (decision) {
@ -539,6 +541,20 @@ class HomeFragment :
musicModel.playlistMessage.consume() musicModel.playlistMessage.consume()
} }
private fun handlePlaybackDecision(decision: PlaybackDecision?) {
when (decision) {
is PlaybackDecision.PlayFromArtist -> {
findNavController()
.navigateSafe(HomeFragmentDirections.playFromArtist(decision.song.uid))
}
is PlaybackDecision.PlayFromGenre -> {
findNavController()
.navigateSafe(HomeFragmentDirections.playFromGenre(decision.song.uid))
}
null -> {}
}
}
private fun updateFab(songs: List<Song>, isFastScrolling: Boolean) { private fun updateFab(songs: List<Song>, isFastScrolling: Boolean) {
updateFabVisibility(songs, isFastScrolling, homeModel.currentTabType.value) updateFabVisibility(songs, isFastScrolling, homeModel.currentTabType.value)
} }

View file

@ -70,7 +70,7 @@ class PlayFromArtistDialog :
} }
playbackModel.playbackDecision.consume() playbackModel.playbackDecision.consume()
pickerModel.setPickerSongUid(args.artistUid) pickerModel.setPickerSongUid(args.songUid)
collectImmediately(pickerModel.currentPickerSong, ::updateSong) collectImmediately(pickerModel.currentPickerSong, ::updateSong)
} }

View file

@ -70,7 +70,7 @@ class PlayFromGenreDialog :
} }
playbackModel.playbackDecision.consume() playbackModel.playbackDecision.consume()
pickerModel.setPickerSongUid(args.genreUid) pickerModel.setPickerSongUid(args.songUid)
collectImmediately(pickerModel.currentPickerSong, ::updateSong) collectImmediately(pickerModel.currentPickerSong, ::updateSong)
} }

View file

@ -368,10 +368,7 @@ constructor(
C.INDEX_UNSET C.INDEX_UNSET
} else { } else {
currTimeline.getNextWindowIndex( currTimeline.getNextWindowIndex(
player.currentMediaItemIndex, player.currentMediaItemIndex, Player.REPEAT_MODE_OFF, player.shuffleModeEnabled)
Player.REPEAT_MODE_OFF,
player.shuffleModeEnabled
)
} }
if (nextIndex == C.INDEX_UNSET) { if (nextIndex == C.INDEX_UNSET) {

View file

@ -491,7 +491,7 @@
android:label="play_from_artist_dialog" android:label="play_from_artist_dialog"
tools:layout="@layout/dialog_music_choices"> tools:layout="@layout/dialog_music_choices">
<argument <argument
android:name="artistUid" android:name="songUid"
app:argType="org.oxycblt.auxio.music.Music$UID" /> app:argType="org.oxycblt.auxio.music.Music$UID" />
</dialog> </dialog>
@ -501,7 +501,7 @@
android:label="play_from_genre_dialog" android:label="play_from_genre_dialog"
tools:layout="@layout/dialog_music_choices"> tools:layout="@layout/dialog_music_choices">
<argument <argument
android:name="genreUid" android:name="songUid"
app:argType="org.oxycblt.auxio.music.Music$UID" /> app:argType="org.oxycblt.auxio.music.Music$UID" />
</dialog> </dialog>