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 13e14f364..debd0f381 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -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) { detailAdapter.highlightSong(song, binding.detailRecycler) } else { 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 a33f6d428..f813dfc83 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -128,7 +128,7 @@ class ArtistDetailFragment : DetailFragment(), DetailAdapter.Listener { private fun updateSong(song: Song?) { val binding = requireBinding() - if (playbackModel.playbackMode.value == PlaybackMode.IN_ARTIST && + if (playbackModel.parent.value is Artist && playbackModel.parent.value?.id == detailModel.currentArtist.value?.id) { detailAdapter.highlightSong(song, binding.detailRecycler) } else { 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 a878ec501..f92b6361d 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -116,7 +116,7 @@ class GenreDetailFragment : DetailFragment(), DetailAdapter.Listener { private fun updateSong(song: Song?) { 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) { detailAdapter.highlightSong(song, binding.detailRecycler) } else { 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 744c10952..768b2b7ee 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt @@ -318,7 +318,6 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback { onPositionUpdate(playbackManager.position) onParentUpdate(playbackManager.parent) onQueueUpdate(playbackManager.queue, playbackManager.index) - onModeUpdate(playbackManager.playbackMode) onPlayingUpdate(playbackManager.isPlaying) onShuffleUpdate(playbackManager.isShuffling) onLoopUpdate(playbackManager.loopMode) @@ -346,10 +345,6 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback { mNextUp.value = queue.slice(index.inc() until queue.size) } - override fun onModeUpdate(mode: PlaybackMode) { - mMode.value = mode - } - override fun onPlayingUpdate(isPlaying: Boolean) { mIsPlaying.value = isPlaying } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt index 43121ab5e..9195ae628 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt @@ -66,11 +66,6 @@ class PlaybackStateManager private constructor() { // Queue private var mQueue = mutableListOf() private var mIndex = 0 - private var mPlaybackMode = PlaybackMode.ALL_SONGS - set(value) { - field = value - callbacks.forEach { it.onModeUpdate(value) } - } // Status private var mIsPlaying = false @@ -108,9 +103,6 @@ class PlaybackStateManager private constructor() { /** The current position in the queue */ val index: Int get() = mIndex - /** The current [PlaybackMode] */ - val playbackMode: PlaybackMode - get() = mPlaybackMode /** Whether playback is paused or not */ val isPlaying: Boolean get() = mIsPlaying @@ -173,8 +165,6 @@ class PlaybackStateManager private constructor() { } } - mPlaybackMode = mode - updatePlayback(song) // Keep shuffle on, if enabled setShuffling(settingsManager.keepShuffle && mIsShuffling, keepSong = true) @@ -193,15 +183,12 @@ class PlaybackStateManager private constructor() { when (parent) { is Album -> { mQueue = parent.songs.toMutableList() - mPlaybackMode = PlaybackMode.IN_ALBUM } is Artist -> { mQueue = parent.songs.toMutableList() - mPlaybackMode = PlaybackMode.IN_ARTIST } is Genre -> { mQueue = parent.songs.toMutableList() - mPlaybackMode = PlaybackMode.IN_GENRE } } @@ -214,7 +201,6 @@ class PlaybackStateManager private constructor() { logD("RETARD. ${musicStore.library}") val library = musicStore.library ?: return - mPlaybackMode = PlaybackMode.ALL_SONGS mQueue = library.songs.toMutableList() mParent = null @@ -375,15 +361,12 @@ class PlaybackStateManager private constructor() { val lastSong = mSong mQueue = - when (mPlaybackMode) { - PlaybackMode.ALL_SONGS -> - settingsManager.libSongSort.songs(library.songs).toMutableList() - PlaybackMode.IN_ALBUM -> - settingsManager.detailAlbumSort.album(mParent as Album).toMutableList() - PlaybackMode.IN_ARTIST -> + when (parent) { + null -> settingsManager.libSongSort.songs(library.songs).toMutableList() + is Album -> settingsManager.detailAlbumSort.album(mParent as Album).toMutableList() + is Artist -> settingsManager.detailArtistSort.artist(mParent as Artist).toMutableList() - PlaybackMode.IN_GENRE -> - settingsManager.detailGenreSort.genre(mParent as Genre).toMutableList() + is Genre -> settingsManager.detailGenreSort.genre(mParent as Genre).toMutableList() } if (keepSong) { @@ -469,16 +452,23 @@ class PlaybackStateManager private constructor() { // Pack the entire state and save it to the database. withContext(Dispatchers.IO) { val start = System.currentTimeMillis() - 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( PlaybackStateDatabase.SavedState( mSong, mPosition, mParent, mIndex, - mPlaybackMode, + playbackMode, mIsShuffling, mLoopMode, )) @@ -513,8 +503,9 @@ class PlaybackStateManager private constructor() { if (playbackState != null) { unpackFromPlaybackState(playbackState) - unpackQueue(queue) - doParentSanityCheck() + mQueue = queue + pushQueueUpdate() + doParentSanityCheck(playbackState.playbackMode) doIndexSanityCheck() } @@ -528,7 +519,6 @@ class PlaybackStateManager private constructor() { // Turn the simplified information from PlaybackState into usable data. // Do queue setup first - mPlaybackMode = playbackState.playbackMode mParent = playbackState.parent mIndex = playbackState.queueIndex @@ -540,23 +530,18 @@ class PlaybackStateManager private constructor() { seekTo(playbackState.position) } - private fun unpackQueue(queue: MutableList) { - mQueue = queue - pushQueueUpdate() - } - /** 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. - if (mSong != null && mParent == null && mPlaybackMode != PlaybackMode.ALL_SONGS) { + if (mSong != null && mParent == null && playbackMode != PlaybackMode.ALL_SONGS) { logD("Parent lost, attempting restore") mParent = - when (mPlaybackMode) { + when (playbackMode) { + PlaybackMode.ALL_SONGS -> null PlaybackMode.IN_ALBUM -> mQueue.firstOrNull()?.album PlaybackMode.IN_ARTIST -> mQueue.firstOrNull()?.album?.artist PlaybackMode.IN_GENRE -> mQueue.firstOrNull()?.genre - PlaybackMode.ALL_SONGS -> null } } }