playback: make state db sync

Add synchronized calls to PlaybackStateDatabase to resolve future race
conditions.
This commit is contained in:
OxygenCobalt 2022-06-23 15:27:41 -06:00
parent d5c0ccfce0
commit 149da883fe
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
2 changed files with 26 additions and 25 deletions

View file

@ -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?) {

View file

@ -15,7 +15,6 @@
app:liftOnScroll="true"
app:liftOnScrollTargetViewId="@id/detail_recycler">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/detail_toolbar"
style="@style/Widget.Auxio.Toolbar.Icon.Actions" />