Hydration: water intake from the food log, drop the "+вода" button

Intake is what you already log (liquids count via water_pct), so there is
nothing to tap mid-ride and no guessing an amount. At session start JS seeds
the native deficit from the food log — need-so-far for the time of day minus
logged intake — via set_hydration_config(start_deficit_ml); the service then
accrues sweat on top. Removes the +вода button, hydration_drink and water_drink.txt.
This commit is contained in:
4aiman 2026-10-24 01:29:30 +03:00
commit 9a8ef04230
10 changed files with 56 additions and 86 deletions

View file

@ -5,20 +5,23 @@
уровневая модель: во время активности копится потребность в воде (пот), кнопка «+вода» гасит
отставание; громкий сигнал только когда дефицит превышает порог.
## Реализация
## Реализация (финал)
- `Hydration.kt` (новый) - синглтон на процесс (оба сервиса в одном процессе -> дедуп, нет двойных
бипов на заезде с ремнём). `tick()` копит `sweatMlPerHour` за время, вычитает выпитое из
`water_drink.txt`, сигналит (ToneGenerator STREAM_ALARM - пробивает громкость + вибро +
уведомление) при дефиците >= `alertMl`, повтор через `reAlertMin`. Конфиг `hydration.json`.
бипов на заезде с ремнём). `reset()` при старте сессии -> `tick()` сидит стартовый дефицит
`startDeficitMl` и копит `sweatMlPerHour`; сигнал (ToneGenerator STREAM_ALARM - пробивает
громкость + вибро + уведомление) при дефиците >= `alertMl`, повтор `reAlertMin`. Конфиг `hydration.json`.
- `GpsRecorderService.kt` (велозаезд) и `BleHrService.kt` (VR) тикают `Hydration` (reset при старте).
- Rust: `set_hydration_config(enabled, alert_ml, sweat_ml_per_hour, re_alert_min)`,
`hydration_drink(ml)` (пишет в `water_drink.txt`, оба пути корня). Манифест: VIBRATE.
- JS: настройка в профиле (вкл, сигнал при отставании мл, +вода за нажатие мл); кнопка «+вода» на
экране записи -> `hydration_drink` + `DB.logWaterDrink` (ищет 100%-воду, идёт в дневной итог).
- Rust: `set_hydration_config(enabled, alert_ml, sweat_ml_per_hour, re_alert_min, start_deficit_ml)`.
Манифест: VIBRATE.
- JS: настройка в профиле (вкл, сигнал при отставании мл); `seedHydrationDeficit()` на старте записи
считает стартовый дефицит из ЛОГА (норма ко времени дня минус выпитое из `getDailyWaterMl`).
Вода берётся из залогированной жидкости, отдельной кнопки НЕТ.
## Эволюция (несколько итераций по уточнениям)
- Сначала привязал к HR-сервису (VR). Исправлено: главное - велик, значит GPS-сервис.
- Сначала фиксированный интервал. Исправлено: не таймер, а УРОВЕНЬ (дефицит), молчит пока пьёшь.
- Сначала кнопка «+вода» + ручной слив. Исправлено: вода из потребления (лога), кнопка не нужна -
пользователь не знает, сколько и чего вводить; стартовый дефицит считается из дневного water_pct.
## Статус
Собрано (0.1.519), JS/Rust/Kotlin компилируются. Залито на роутер