feat: будильник с радиостанцией + выбор битрейта по умолчанию

Будильник (Settings → Будильник): несколько будильников, время, станция, дни недели,
fade-in пробуждения. AlarmManager.setAlarmClock (вне doze) + фолбэк, BootReceiver
перепланирует после перезагрузки, AlarmReceiver→PlayerService (foreground) →
PlayerController.startAlarmPlayback (нарастание громкости). Room: AlarmEntity/Dao, БД v7.
Выбор битрейта по умолчанию в Settings (Авто/Эконом/Стандарт/Высокое) → preferredBitrate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
nk
2026-06-06 15:25:42 +03:00
parent 4411d53a6c
commit 861b0e2b8f
17 changed files with 1014 additions and 3 deletions

View File

@@ -309,6 +309,34 @@ class PlayerController @Inject constructor(
}
}
/**
* Запуск воспроизведения станции по будильнику: играет [url] и плавно нарастает
* громкость 0 → 1 за [fadeInMs] (мягкое пробуждение).
*/
fun startAlarmPlayback(
url: String,
prefix: String,
name: String,
id: Int?,
fadeInMs: Long = 60_000L,
) {
cancelSleepTimer()
play(url, prefix, name, id)
exoPlayer.volume = 0f
sleepJob?.cancel()
sleepJob = timerScope.launch {
val start = SystemClock.elapsedRealtime()
while (true) {
val elapsed = SystemClock.elapsedRealtime() - start
if (elapsed >= fadeInMs) break
exoPlayer.volume = (elapsed.toFloat() / fadeInMs).coerceIn(0f, 1f)
delay(200)
}
exoPlayer.volume = 1f
sleepJob = null
}
}
/** Отменить таймер сна, вернуть громкость и заглушить звук сна. */
fun cancelSleepTimer() {
sleepJob?.cancel()