refactor: improve player lifecycle
This commit is contained in:
+2
@@ -79,9 +79,11 @@ internal class AndroidAudioPlayer(
|
||||
|
||||
override fun stop() {
|
||||
player.stop()
|
||||
_playbackState.value = PlaybackState.IDLE
|
||||
}
|
||||
|
||||
override fun release() {
|
||||
player.release()
|
||||
_playbackState.value = PlaybackState.IDLE
|
||||
}
|
||||
}
|
||||
|
||||
+19
-8
@@ -82,15 +82,23 @@ internal class PlaybackRepositoryImpl(
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
private val currentPosition: Flow<Duration> = playbackState.flatMapLatest { state ->
|
||||
if (state in listOf(PlaybackState.PLAYING, PlaybackState.PAUSED)) {
|
||||
flow {
|
||||
while (true) {
|
||||
emit(audioPlayer.currentPosition)
|
||||
delay(POSITION_POLL_INTERVAL)
|
||||
when (state) {
|
||||
in listOf(PlaybackState.PLAYING, PlaybackState.PAUSED) -> {
|
||||
flow {
|
||||
while (true) {
|
||||
emit(audioPlayer.currentPosition)
|
||||
delay(POSITION_POLL_INTERVAL)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
flowOf(audioPlayer.currentPosition)
|
||||
|
||||
PlaybackState.IDLE -> {
|
||||
flowOf(Duration.ZERO)
|
||||
}
|
||||
|
||||
else -> {
|
||||
flowOf(audioPlayer.currentPosition)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -304,7 +312,9 @@ internal class PlaybackRepositoryImpl(
|
||||
)
|
||||
|
||||
override suspend fun stop() {
|
||||
cancelRunningBreakJob()
|
||||
breakJob?.cancel()
|
||||
isBreaking.value = false
|
||||
subtitle.value = Subtitle(emptyList())
|
||||
audioPlayer.stop()
|
||||
}
|
||||
|
||||
@@ -312,6 +322,7 @@ internal class PlaybackRepositoryImpl(
|
||||
breakJob?.cancel()
|
||||
isBreaking.value = false
|
||||
audioPlayer.release()
|
||||
subtitle.value = Subtitle(emptyList())
|
||||
}
|
||||
|
||||
private suspend fun cancelRunningBreakJob() {
|
||||
|
||||
+2
-1
@@ -59,6 +59,8 @@ class PlayerViewModel(
|
||||
|
||||
fun loadRecord() {
|
||||
viewModelScope.launch {
|
||||
playbackRepository.stop()
|
||||
|
||||
logger.debug("Loading record $recordId")
|
||||
val alreadyLoadedRecord = record.value
|
||||
if (alreadyLoadedRecord != null) {
|
||||
@@ -177,6 +179,5 @@ class PlayerViewModel(
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
audioSessionManager.deactivate()
|
||||
playbackRepository.release()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user