Repository navigation
Onboarding And Permissions
Status: Current implemented behavior. Audience: Users and contributors. Implementation:
features/onboarding,healthconnect,features/settings. Navigation:Screen.Onboarding,Screen.SettingsHealthConnect. Related: Feature map, Permissions, Health Connect.
Onboarding prepares OpenVitals for local Health Connect use without requiring an account or cloud sync.
For the exact permission reference, see Permissions. For platform behavior, see Health Connect.
An install that was onboarded before watches and scales moved to OpenWatch sees a one-time notice on its first open after the update: what moved, why the app is lighter for it, and a "Get OpenWatch" button that opens the project page (a toast carries the address on a phone without a browser). Closing it, by either button or a tap outside, sets openWatchMoveNoticeSeen in the app's preferences and runs LegacyDeviceDataCleaner: the watch and bike-computer entries leave the stored sensor list and the preference files of the removed Garmin, Wear OS and scale stores are deleted. Health Connect is untouched. A fresh install marks the flag at onboarding and never sees the notice. The notice shows before the privacy re-consent dialog, which waits for it (OpenWatchMoveNoticeViewModel, ui/components/OpenWatchMoveNoticeDialog.kt).
Onboarding introduces the app, checks Health Connect availability, and helps the user grant useful permission groups. It runs as a short sequence of steps, and a step that does not apply to the device is skipped entirely:
- Permission categories. A "Grant all" button requests every category on this screen in one Health Connect dialog; the categories can still be granted one at a time. The button covers only this first screen; mindfulness, cycle tracking, and the additional-access step keep their own explicit choices.
- Mindfulness, when the device's Health Connect version supports it.
- Cycle tracking, when it is available.
- Additional data access, which explains the settings that have to be changed inside Health Connect itself.
OpenVitals can continue with limited data when some permissions are skipped. Missing permissions are surfaced later on the dashboard, detail screens, settings, imports, and entry flows where they matter.
OpenVitals handles Health Connect states explicitly:
- Available and ready.
- Available but missing permissions.
- Not installed or not reachable on supported devices.
- Unsupported Android or device environments.
When Health Connect is not available, the app explains the limitation instead of showing misleading health values.
Read permissions are used for dashboard widgets, metric detail screens, readiness views, statistics, achievements, and local insights.
Write permissions are requested lazily for explicit write flows such as manual entry, route import, Apple Health import, activity recording, edits, and deletes.
The dashboard remains read-only even when write permissions are granted.
Some permission groups, such as cycle data or mindfulness sessions, are shown only when they are relevant and requestable on the device.
Body Energy calibration and the body profile are not part of onboarding. They are set later in settings.
Android's own permissions are requested where and when the feature that needs them is used, never at first run:
- Location, for GPS activity recording.
- Nearby devices, for Bluetooth LE sensors and for sync with another phone.
- Notifications, for reminders and for recording, import, and sync progress.
The app declares no internet permission and removes the ones its dependencies would otherwise contribute. See Permissions.
OpenVitals stores app preferences locally and reads or writes health records through Health Connect. It does not require an OpenVitals account.
Generated from docs/features/onboarding-and-permissions.md. Edit it there; changes made here are overwritten.
This wiki mirrors the Markdown in Hale-MTU/OpenVitals on every push to main.
Features
- Features
- Achievements
- Activity And Training Plans
- Activity Metrics
- Apple Health Import
- Beverage Logging And Caffeine
- Bluetooth LE Sensors
- Body Energy
- Body Metrics
- CoMaps Navigation Context
- CSV Import
- Cycle Tracking
- Daily Readiness
- Elevation Correction
- Feature Map
- FIT Files Import
- Food Logging
- GPX/KML/KMZ/TCX Route Import
- Health Connect Metrics Dashboard
- Health Report Export
- Heart And Vitals
- Heart Rate Recovery
- Home Screen Widgets
- Hydration
- Manual Entry Of Metrics
- Medical Records
- Metric Detail Customization
- Mindfulness
- Non Health Connect Metrics Dashboard
- Nutrition
- Offline Maps Support
- Onboarding And Permissions
- Preloaded Beverage Nutrition Reference
- Privacy, Support, And Diagnostics
- Recording Of Activity
- Reminders
- Settings And Preferences
- Sleep Score And Recovery
- Sleep Tracking
- Statistics
- Sync With Another Phone
How-to
App
- App Guide
- FAQ
- Getting Started
- Health Connect
- Install
- Local And Connected Editions
- Permissions
- Privacy
- Screenshots
- Support
Reference
- Design Reference
- Reference
- Design Guidelines for Offline & Sync
- OpenVitals UI Notes
- Reference: Data Capture
- Reference: Data Display
- Reference: Health Connect Matchmaking
- Reference: Health Connect Onboarding
- Reference: Health Connect Permissions
- Reference: Health Connect UX
- Reference: Promoting Health Connect
Engineering
- Code Analysis
- Engineering
- Flutter ↔ Kotlin test-parity matrix
- apple-health-import
- Architecture
- body-cycle-recovery
- Design system conformance
- Development
- Feature Playbook
- Flutter -> Kotlin test parity: domain/data/core/contract/state/navigation/di/bootstrap/l10n/widget_test
- Flutter → Kotlin test-parity matrix: features section
- Flutter → Kotlin test-parity matrix: ui / goldens / integration / fixtures
- Flutter-to-Kotlin test-parity matrix — dashboard + devicesync
- manual-entry
- Translations
Proposals
- Proposals
- Activity Start Flow Analysis
- Activity Start Flow Simplification Proposals
- Caffeine Detail And Future Sleep Insights
- Cycle Tracking: Design and Status
- Medical Records Through Health Connect
- Medical Records: What Is Left
Releases
- OpenVitals 2.16.0
- OpenVitals 2.15.2
- OpenVitals 2.15.1
- OpenVitals 2.15.0
- OpenVitals 2.14.5
- OpenVitals 2.14.4
- OpenVitals 2.14.3
- OpenVitals 2.14.2
- OpenVitals 2.14.1
- OpenVitals 2.14.0
- OpenVitals 2.13.0
- OpenVitals 2.12.0
- OpenVitals 2.11.2
- OpenVitals 2.11.1
- OpenVitals 2.11.0
- OpenVitals 2.10.1
- OpenVitals 2.10.0
- OpenVitals 2.9.1
- OpenVitals 2.9.0
- OpenVitals 2.8.0
- OpenVitals 2.7.3
- OpenVitals 2.7.2
- OpenVitals 2.7.1
- OpenVitals 2.7.0
- OpenVitals 2.6.6
- OpenVitals 2.6.5
- OpenVitals 2.6.4
- OpenVitals 2.6.3
- OpenVitals 2.6.2
- OpenVitals 2.6.1
- OpenVitals 2.6.0
- OpenVitals 2.5.0
- OpenVitals 2.4.1
- OpenVitals 2.4.0
- OpenVitals 2.3.2
- OpenVitals 2.3.1
- OpenVitals 2.3.0
- OpenVitals 2.2.8
- OpenVitals 2.2.7
- OpenVitals 2.2.6
- OpenVitals 2.2.5
- OpenVitals 2.2.4
- OpenVitals 2.2.3
- OpenVitals 2.2.2
- OpenVitals 2.2.1
- OpenVitals 2.2.0
- OpenVitals 2.1.0
- OpenVitals 2.0.4
- OpenVitals 2.0.3
- OpenVitals 2.0.2
- OpenVitals 2.0.1
- OpenVitals 1.9.0
- OpenVitals 1.8.0
- OpenVitals 1.7.7
- OpenVitals 1.7.6
- OpenVitals 1.7.5
- OpenVitals 1.7.4
- OpenVitals 1.7.3
- OpenVitals 1.7.2
- OpenVitals 1.7.1
- OpenVitals 1.7.0
- OpenVitals 1.6.3
- OpenVitals 1.6.2
- OpenVitals 1.6.1
- OpenVitals 1.6.0
- OpenVitals 1.5.1
- OpenVitals 1.5.0
Project