diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 548f059..3e76813 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -13,6 +13,9 @@
+
+
= 10) return
+ val delayMs = (2_000L * (retryCount + 1)).coerceAtMost(15_000L)
+ retryCount++
+ reconnectJob = timerScope.launch {
+ delay(delayMs)
+ runCatching {
+ exoPlayer.prepare()
+ exoPlayer.playWhenReady = true
+ }
+ }
+ }
+
val player: Player = object : ForwardingPlayer(exoPlayer) {
override fun getAvailableCommands(): Player.Commands {
return super.getAvailableCommands()
@@ -212,6 +248,9 @@ class PlayerController @Inject constructor(
fun play(url: String, stationPrefix: String, stationName: String, stationId: Int? = null) {
Log.d("PlayerController", "play() called with url=$url prefix=$stationPrefix")
+ // Новая станция — сбрасываем переподключение предыдущего потока.
+ reconnectJob?.cancel()
+ retryCount = 0
_currentStationId.value = stationId
_icyTitle.value = null
val mediaItem = MediaItem.Builder()
@@ -373,6 +412,9 @@ class PlayerController @Inject constructor(
}
fun pause() {
+ // Пауза пользователем — отменяем отложенное переподключение, иначе оно
+ // позже само возобновит воспроизведение.
+ reconnectJob?.cancel()
exoPlayer.pause()
}
@@ -381,6 +423,7 @@ class PlayerController @Inject constructor(
}
fun stop() {
+ reconnectJob?.cancel()
exoPlayer.stop()
_currentStationPrefix.value = null
_currentStationId.value = null