playback: remove playbackmode field

Remove the useless PlaybackMode field.

Parent does the same job, but better.
This commit is contained in:
OxygenCobalt 2022-04-28 19:58:39 -06:00
parent 180faa6f50
commit 3d70028bd2
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
5 changed files with 24 additions and 44 deletions

View file

@ -191,7 +191,7 @@ class AlbumDetailFragment : DetailFragment(), AlbumDetailAdapter.Listener {
} }
} }
if (playbackModel.playbackMode.value == PlaybackMode.IN_ALBUM && if (playbackModel.parent.value is Album &&
playbackModel.parent.value?.id == unlikelyToBeNull(detailModel.currentAlbum.value).id) { playbackModel.parent.value?.id == unlikelyToBeNull(detailModel.currentAlbum.value).id) {
detailAdapter.highlightSong(song, binding.detailRecycler) detailAdapter.highlightSong(song, binding.detailRecycler)
} else { } else {

View file

@ -128,7 +128,7 @@ class ArtistDetailFragment : DetailFragment(), DetailAdapter.Listener {
private fun updateSong(song: Song?) { private fun updateSong(song: Song?) {
val binding = requireBinding() val binding = requireBinding()
if (playbackModel.playbackMode.value == PlaybackMode.IN_ARTIST && if (playbackModel.parent.value is Artist &&
playbackModel.parent.value?.id == detailModel.currentArtist.value?.id) { playbackModel.parent.value?.id == detailModel.currentArtist.value?.id) {
detailAdapter.highlightSong(song, binding.detailRecycler) detailAdapter.highlightSong(song, binding.detailRecycler)
} else { } else {

View file

@ -116,7 +116,7 @@ class GenreDetailFragment : DetailFragment(), DetailAdapter.Listener {
private fun updateSong(song: Song?) { private fun updateSong(song: Song?) {
val binding = requireBinding() val binding = requireBinding()
if (playbackModel.playbackMode.value == PlaybackMode.IN_GENRE && if (playbackModel.parent.value is Genre &&
playbackModel.parent.value?.id == unlikelyToBeNull(detailModel.currentGenre.value).id) { playbackModel.parent.value?.id == unlikelyToBeNull(detailModel.currentGenre.value).id) {
detailAdapter.highlightSong(song, binding.detailRecycler) detailAdapter.highlightSong(song, binding.detailRecycler)
} else { } else {

View file

@ -318,7 +318,6 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback {
onPositionUpdate(playbackManager.position) onPositionUpdate(playbackManager.position)
onParentUpdate(playbackManager.parent) onParentUpdate(playbackManager.parent)
onQueueUpdate(playbackManager.queue, playbackManager.index) onQueueUpdate(playbackManager.queue, playbackManager.index)
onModeUpdate(playbackManager.playbackMode)
onPlayingUpdate(playbackManager.isPlaying) onPlayingUpdate(playbackManager.isPlaying)
onShuffleUpdate(playbackManager.isShuffling) onShuffleUpdate(playbackManager.isShuffling)
onLoopUpdate(playbackManager.loopMode) onLoopUpdate(playbackManager.loopMode)
@ -346,10 +345,6 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback {
mNextUp.value = queue.slice(index.inc() until queue.size) mNextUp.value = queue.slice(index.inc() until queue.size)
} }
override fun onModeUpdate(mode: PlaybackMode) {
mMode.value = mode
}
override fun onPlayingUpdate(isPlaying: Boolean) { override fun onPlayingUpdate(isPlaying: Boolean) {
mIsPlaying.value = isPlaying mIsPlaying.value = isPlaying
} }

View file

@ -66,11 +66,6 @@ class PlaybackStateManager private constructor() {
// Queue // Queue
private var mQueue = mutableListOf<Song>() private var mQueue = mutableListOf<Song>()
private var mIndex = 0 private var mIndex = 0
private var mPlaybackMode = PlaybackMode.ALL_SONGS
set(value) {
field = value
callbacks.forEach { it.onModeUpdate(value) }
}
// Status // Status
private var mIsPlaying = false private var mIsPlaying = false
@ -108,9 +103,6 @@ class PlaybackStateManager private constructor() {
/** The current position in the queue */ /** The current position in the queue */
val index: Int val index: Int
get() = mIndex get() = mIndex
/** The current [PlaybackMode] */
val playbackMode: PlaybackMode
get() = mPlaybackMode
/** Whether playback is paused or not */ /** Whether playback is paused or not */
val isPlaying: Boolean val isPlaying: Boolean
get() = mIsPlaying get() = mIsPlaying
@ -173,8 +165,6 @@ class PlaybackStateManager private constructor() {
} }
} }
mPlaybackMode = mode
updatePlayback(song) updatePlayback(song)
// Keep shuffle on, if enabled // Keep shuffle on, if enabled
setShuffling(settingsManager.keepShuffle && mIsShuffling, keepSong = true) setShuffling(settingsManager.keepShuffle && mIsShuffling, keepSong = true)
@ -193,15 +183,12 @@ class PlaybackStateManager private constructor() {
when (parent) { when (parent) {
is Album -> { is Album -> {
mQueue = parent.songs.toMutableList() mQueue = parent.songs.toMutableList()
mPlaybackMode = PlaybackMode.IN_ALBUM
} }
is Artist -> { is Artist -> {
mQueue = parent.songs.toMutableList() mQueue = parent.songs.toMutableList()
mPlaybackMode = PlaybackMode.IN_ARTIST
} }
is Genre -> { is Genre -> {
mQueue = parent.songs.toMutableList() mQueue = parent.songs.toMutableList()
mPlaybackMode = PlaybackMode.IN_GENRE
} }
} }
@ -214,7 +201,6 @@ class PlaybackStateManager private constructor() {
logD("RETARD. ${musicStore.library}") logD("RETARD. ${musicStore.library}")
val library = musicStore.library ?: return val library = musicStore.library ?: return
mPlaybackMode = PlaybackMode.ALL_SONGS
mQueue = library.songs.toMutableList() mQueue = library.songs.toMutableList()
mParent = null mParent = null
@ -375,15 +361,12 @@ class PlaybackStateManager private constructor() {
val lastSong = mSong val lastSong = mSong
mQueue = mQueue =
when (mPlaybackMode) { when (parent) {
PlaybackMode.ALL_SONGS -> null -> settingsManager.libSongSort.songs(library.songs).toMutableList()
settingsManager.libSongSort.songs(library.songs).toMutableList() is Album -> settingsManager.detailAlbumSort.album(mParent as Album).toMutableList()
PlaybackMode.IN_ALBUM -> is Artist ->
settingsManager.detailAlbumSort.album(mParent as Album).toMutableList()
PlaybackMode.IN_ARTIST ->
settingsManager.detailArtistSort.artist(mParent as Artist).toMutableList() settingsManager.detailArtistSort.artist(mParent as Artist).toMutableList()
PlaybackMode.IN_GENRE -> is Genre -> settingsManager.detailGenreSort.genre(mParent as Genre).toMutableList()
settingsManager.detailGenreSort.genre(mParent as Genre).toMutableList()
} }
if (keepSong) { if (keepSong) {
@ -469,16 +452,23 @@ class PlaybackStateManager private constructor() {
// Pack the entire state and save it to the database. // Pack the entire state and save it to the database.
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
val start = System.currentTimeMillis() val start = System.currentTimeMillis()
val database = PlaybackStateDatabase.getInstance(context) val database = PlaybackStateDatabase.getInstance(context)
val playbackMode =
when (parent) {
is Album -> PlaybackMode.IN_ALBUM
is Artist -> PlaybackMode.IN_ARTIST
is Genre -> PlaybackMode.IN_GENRE
null -> PlaybackMode.ALL_SONGS
}
database.writeState( database.writeState(
PlaybackStateDatabase.SavedState( PlaybackStateDatabase.SavedState(
mSong, mSong,
mPosition, mPosition,
mParent, mParent,
mIndex, mIndex,
mPlaybackMode, playbackMode,
mIsShuffling, mIsShuffling,
mLoopMode, mLoopMode,
)) ))
@ -513,8 +503,9 @@ class PlaybackStateManager private constructor() {
if (playbackState != null) { if (playbackState != null) {
unpackFromPlaybackState(playbackState) unpackFromPlaybackState(playbackState)
unpackQueue(queue) mQueue = queue
doParentSanityCheck() pushQueueUpdate()
doParentSanityCheck(playbackState.playbackMode)
doIndexSanityCheck() doIndexSanityCheck()
} }
@ -528,7 +519,6 @@ class PlaybackStateManager private constructor() {
// Turn the simplified information from PlaybackState into usable data. // Turn the simplified information from PlaybackState into usable data.
// Do queue setup first // Do queue setup first
mPlaybackMode = playbackState.playbackMode
mParent = playbackState.parent mParent = playbackState.parent
mIndex = playbackState.queueIndex mIndex = playbackState.queueIndex
@ -540,23 +530,18 @@ class PlaybackStateManager private constructor() {
seekTo(playbackState.position) seekTo(playbackState.position)
} }
private fun unpackQueue(queue: MutableList<Song>) {
mQueue = queue
pushQueueUpdate()
}
/** Do a sanity check to make sure the parent was not lost in the restore process. */ /** Do a sanity check to make sure the parent was not lost in the restore process. */
private fun doParentSanityCheck() { private fun doParentSanityCheck(playbackMode: PlaybackMode) {
// Check if the parent was lost while in the DB. // Check if the parent was lost while in the DB.
if (mSong != null && mParent == null && mPlaybackMode != PlaybackMode.ALL_SONGS) { if (mSong != null && mParent == null && playbackMode != PlaybackMode.ALL_SONGS) {
logD("Parent lost, attempting restore") logD("Parent lost, attempting restore")
mParent = mParent =
when (mPlaybackMode) { when (playbackMode) {
PlaybackMode.ALL_SONGS -> null
PlaybackMode.IN_ALBUM -> mQueue.firstOrNull()?.album PlaybackMode.IN_ALBUM -> mQueue.firstOrNull()?.album
PlaybackMode.IN_ARTIST -> mQueue.firstOrNull()?.album?.artist PlaybackMode.IN_ARTIST -> mQueue.firstOrNull()?.album?.artist
PlaybackMode.IN_GENRE -> mQueue.firstOrNull()?.genre PlaybackMode.IN_GENRE -> mQueue.firstOrNull()?.genre
PlaybackMode.ALL_SONGS -> null
} }
} }
} }