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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user