From 149da883feac372f6fd7ae45e119e9d5be88dec9 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Thu, 23 Jun 2022 15:27:41 -0600 Subject: [PATCH] playback: make state db sync Add synchronized calls to PlaybackStateDatabase to resolve future race conditions. --- .../playback/state/PlaybackStateDatabase.kt | 50 ++++++++++--------- app/src/main/res/layout/fragment_detail.xml | 1 - 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateDatabase.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateDatabase.kt index 3749812ae..04f12b4e4 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateDatabase.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateDatabase.kt @@ -188,33 +188,35 @@ class PlaybackStateDatabase(context: Context) : fun write(state: SavedState) { requireBackgroundThread() - val song = state.queue.getOrNull(state.index) + synchronized(this) { + val song = state.queue.getOrNull(state.index) - if (song != null) { - val rawState = - RawState( - index = state.index, - positionMs = state.positionMs, - repeatMode = state.repeatMode, - isShuffled = state.isShuffled, - songId = song.id, - parentId = state.parent?.id, - playbackMode = - when (state.parent) { - null -> PlaybackMode.ALL_SONGS - is Album -> PlaybackMode.IN_ALBUM - is Artist -> PlaybackMode.IN_ARTIST - is Genre -> PlaybackMode.IN_GENRE - }) + if (song != null) { + val rawState = + RawState( + index = state.index, + positionMs = state.positionMs, + repeatMode = state.repeatMode, + isShuffled = state.isShuffled, + songId = song.id, + parentId = state.parent?.id, + playbackMode = + when (state.parent) { + null -> PlaybackMode.ALL_SONGS + is Album -> PlaybackMode.IN_ALBUM + is Artist -> PlaybackMode.IN_ARTIST + is Genre -> PlaybackMode.IN_GENRE + }) - writeRawState(rawState) - writeQueue(state.queue) - } else { - writeRawState(null) - writeQueue(null) + writeRawState(rawState) + writeQueue(state.queue) + } else { + writeRawState(null) + writeQueue(null) + } + + logD("Wrote state to database") } - - logD("Wrote state to database") } private fun writeRawState(rawState: RawState?) { diff --git a/app/src/main/res/layout/fragment_detail.xml b/app/src/main/res/layout/fragment_detail.xml index 7a6ee8e6e..908607dae 100644 --- a/app/src/main/res/layout/fragment_detail.xml +++ b/app/src/main/res/layout/fragment_detail.xml @@ -15,7 +15,6 @@ app:liftOnScroll="true" app:liftOnScrollTargetViewId="@id/detail_recycler"> -