baldav/docs/session-logs/2026-10-17_bt-gps-prompts.md
4aiman 2d0e51bd8d 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.
2026-10-17 02:07:44 +03:00

2.6 KiB
Raw Blame History

Сессия 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 / Открыть настройки гео); отказ -> запись идёт как есть; включить чекбоксы "не спрашивать" -> попапы не показываются.