Skip to content

Commit 852d1c9

Browse files
authored
Prevent crash in case of misuse of AudioEngine.asPlayer().release (#529)
1 parent a226128 commit 852d1c9

File tree

4 files changed

+15
-8
lines changed

4 files changed

+15
-8
lines changed

readium/adapters/exoplayer/audio/src/main/java/org/readium/adapter/exoplayer/audio/ExoPlayerEngine.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,14 @@ public class ExoPlayerEngine private constructor(
179179
private val _playback: MutableStateFlow<AudioEngine.Playback> =
180180
MutableStateFlow(exoPlayer.playback)
181181

182+
private val sessionPlayer = object :
183+
ForwardingPlayer(exoPlayer) {
184+
185+
override fun release() {
186+
// This object does not own the ExoAudiobookPlayer instance, do not close it.
187+
}
188+
}
189+
182190
init {
183191
coroutineScope.launch {
184192
val positionRefreshDelay = (1.0 / configuration.positionRefreshRate.value).seconds
@@ -227,7 +235,7 @@ public class ExoPlayerEngine private constructor(
227235
}
228236

229237
override fun asPlayer(): Player {
230-
return exoPlayer
238+
return sessionPlayer
231239
}
232240

233241
override fun submitPreferences(preferences: ExoPlayerPreferences) {

readium/navigators/media/audio/src/main/java/org/readium/navigator/media/audio/AudioEngine.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,22 @@ public interface AudioEngine<S : Configurable.Settings, P : Configurable.Prefere
3232
/**
3333
* The player is ready to play.
3434
*/
35-
public object Ready : State()
35+
public data object Ready : State()
3636

3737
/**
3838
* The end of the content has been reached.
3939
*/
40-
public object Ended : State()
40+
public data object Ended : State()
4141

4242
/**
4343
* The engine cannot play because the buffer is starved.
4444
*/
45-
public object Buffering : State()
45+
public data object Buffering : State()
4646

4747
/**
4848
* The engine cannot play because an error occurred.
4949
*/
50-
public data class Failure(val error: AudioEngine.Error) : State()
50+
public data class Failure(val error: Error) : State()
5151
}
5252

5353
/**

readium/navigators/media/tts/src/main/java/org/readium/navigator/media/tts/TtsEngine.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ package org.readium.navigator.media.tts
99
import org.readium.r2.navigator.preferences.Configurable
1010
import org.readium.r2.shared.ExperimentalReadiumApi
1111
import org.readium.r2.shared.util.Closeable
12-
import org.readium.r2.shared.util.Error
1312
import org.readium.r2.shared.util.Language
1413

1514
/**

readium/navigators/media/tts/src/main/java/org/readium/navigator/media/tts/TtsNavigator.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,9 @@ public class TtsNavigator<S : TtsEngine.Settings, P : TtsEngine.Preferences<P>,
7878

7979
public sealed class State {
8080

81-
public object Ready : MediaNavigator.State.Ready
81+
public data object Ready : MediaNavigator.State.Ready
8282

83-
public object Ended : MediaNavigator.State.Ended
83+
public data object Ended : MediaNavigator.State.Ended
8484

8585
public data class Failure(val error: Error) : MediaNavigator.State.Failure
8686
}

0 commit comments

Comments
 (0)