diff --git a/app/shared/pages/episode-play/common/ui/subject/episode/EpisodeViewModel.kt b/app/shared/pages/episode-play/common/ui/subject/episode/EpisodeViewModel.kt index bcaf09b5f3..55de99f0b7 100644 --- a/app/shared/pages/episode-play/common/ui/subject/episode/EpisodeViewModel.kt +++ b/app/shared/pages/episode-play/common/ui/subject/episode/EpisodeViewModel.kt @@ -32,6 +32,7 @@ import me.him188.ani.app.torrent.TorrentManager import me.him188.ani.app.ui.foundation.AbstractViewModel import me.him188.ani.app.ui.foundation.HasBackgroundScope import me.him188.ani.app.ui.foundation.launchInBackground +import me.him188.ani.app.ui.foundation.launchInMain import me.him188.ani.app.videoplayer.PlayerState import me.him188.ani.app.videoplayer.PlayerStateFactory import me.him188.ani.app.videoplayer.TorrentVideoSource @@ -349,7 +350,7 @@ private class EpisodeViewModelImpl( override val danmakuHostState: DanmakuHostState = DanmakuHostState() init { - launchInBackground { + launchInMain { // state changes must be in main thread playerState.state.collect { if (it.isPlaying) { danmakuHostState.resume() diff --git a/app/shared/video-player/androidMain/PlayerState.android.kt b/app/shared/video-player/androidMain/PlayerState.android.kt index c650d6cb02..0e57db8182 100644 --- a/app/shared/video-player/androidMain/PlayerState.android.kt +++ b/app/shared/video-player/androidMain/PlayerState.android.kt @@ -157,13 +157,13 @@ internal class ExoPlayerState @UiThread constructor( } override fun onPlaybackStateChanged(playbackState: Int) { - updateVideoProperties() when (playbackState) { Player.STATE_BUFFERING -> state.value = PlaybackState.PAUSED_BUFFERING Player.STATE_ENDED -> state.value = PlaybackState.FINISHED Player.STATE_IDLE -> state.value = PlaybackState.READY Player.STATE_READY -> state.value = PlaybackState.READY } + updateVideoProperties() } override fun onIsPlayingChanged(isPlaying: Boolean) { diff --git a/danmaku/ui/commonMain/DanmakuHost.kt b/danmaku/ui/commonMain/DanmakuHost.kt index 2bd32b33a5..edb51b485b 100644 --- a/danmaku/ui/commonMain/DanmakuHost.kt +++ b/danmaku/ui/commonMain/DanmakuHost.kt @@ -1,5 +1,6 @@ package me.him188.ani.danmaku.ui +import androidx.annotation.UiThread import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth @@ -30,11 +31,13 @@ interface DanmakuHostState { /** * Pauses the movement of danmaku. */ + @UiThread fun pause() /** * Resumes the movement of danmaku. Danmaku will continue to move from where it was paused. */ + @UiThread fun resume() }