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