Prompt to enable Bluetooth/location at recording start + two 'don't ask' settings

User forgets to turn BT/GPS on. Modern Android won't let an app toggle them
silently, so prompt and act: BT via the system enable dialog, location via
the location-settings screen.

- ensureSystemReady(needBt, needGps) runs before startRecording: BT off ->
  confirm -> ble_request_enable; location off -> confirm -> open settings.
  Gated by two settings (baldav_dontask_bt / _gps); declining proceeds.
- GPS.isLocationEnabled polls a new Kotlin check (check_location writes
  location_state.json via LocationManager; read_state_file reads it);
  open_location_settings opens ACTION_LOCATION_SOURCE_SETTINGS.
- Settings: 'Не спрашивать про Bluetooth' / '... геолокацию' checkboxes.
This commit is contained in:
4aiman 2026-10-17 02:07:44 +03:00
commit 2d0e51bd8d
5 changed files with 104 additions and 1 deletions

View file

@ -0,0 +1,30 @@
# Сессия 2026-10-17 (2) - попап "включи BT/гео" при старте записи + 2 настройки "не спрашивать"
## Задача
Пользователь забывает включать Bluetooth и GPS. Нужно: при старте записи, если выключено -
предложить включить; дать отказаться; 2 отдельные настройки "не спрашивать".
Факт-чек: телефон С Google-сервисами (ранее ошибочно решил, что без). Тихо включать BT/гео
приложение на target 36 не может (ОС), поэтому - попап + действие: BT через системный диалог
включения, гео через экран настроек геолокации.
## Сделано
- Rust `read_state_file(name)` (allowlist "location_state.json") - читает ответ Kotlin из
native_root. Зарегистрирован.
- Kotlin MainActivity: команды `check_location` (пишет `location_state.json` {enabled} через
LocationManager.isLocationEnabled) и `open_location_settings` (ACTION_LOCATION_SOURCE_SETTINGS).
- `gps.js` `GPS.isLocationEnabled()` - дёргает check_location, читает state-файл; true/false или
null (неизвестно - тогда не спрашивать).
- `main.js` `ensureSystemReady(needBt, needGps)` - перед startRecording: BT off ->
appConfirm "Включить?" -> `ble_request_enable`; гео off -> appConfirm "Открыть настройки?" ->
`open_location_settings`. Гейтится настройками `baldav_dontask_bt` / `baldav_dontask_gps`.
Вызов в кнопке записи: needBt = есть привязанный датчик, needGps = не зарядка.
- Настройки (раздел Пульсометр): 2 чекбокса "Не спрашивать про Bluetooth" / "...геолокацию".
Ограничение (честно): авто-ВЫКЛ BT/гео после тренировки приложение сделать не может (ОС).
Тихое включение - тоже; поэтому попап + один тап.
## Проверка
Синтаксис JS ок. На телефоне: выключить BT и гео, старт записи трека -> два попапа по очереди
(Включить BT / Открыть настройки гео); отказ -> запись идёт как есть; включить чекбоксы "не
спрашивать" -> попапы не показываются.