feat(player): таймер сна с плавным затуханием (fade-out)

P0-фича из спеки. PlayerController: startSleepTimer/cancelSleepTimer — в последние
20с экспоненциальный fade-out громкости (frac^2), затем пауза + возврат громкости.
В плеере — пилюля «Таймер сна» (иконка Moon): при активном показывает остаток
M:SS акцентом. Шторка с интервалами 15/30/45/60/90/120 мин + «Выключить».

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
nk
2026-06-06 10:08:54 +03:00
parent 29cbe8997f
commit bda2c5b30f
3 changed files with 203 additions and 1 deletions

View File

@@ -72,6 +72,12 @@ class PlayerViewModel @Inject constructor(
val isRecording: StateFlow<Boolean> = recordingRepository.isRecording
// Таймер сна: оставшееся время в мс (null = выключен).
val sleepRemainingMs: StateFlow<Long?> = playerController.sleepRemainingMs
fun startSleepTimer(minutes: Int) = playerController.startSleepTimer(minutes * 60_000L)
fun cancelSleepTimer() = playerController.cancelSleepTimer()
private var nowPlayingJob: Job? = null
init {