Repository navigation
Settings And Preferences
Status: Current implemented behavior. Audience: Users and contributors. Implementation:
features/settings,data/repository/PreferencesRepository.kt. Navigation:Screen.Settingsand settings subsection routes; sections inSettingsSection. Related: Feature map, Permissions, Metric detail customization.
Settings centralize app preferences, Health Connect access, imports, sensors, phone-to-phone sync, goals, reminders, and diagnostics.
Settings is a list of section cards. Tapping one opens it:
- Display.
- Activities.
- Sensors and devices, for Bluetooth LE sensors.
- Nutrition.
- Body profile.
- Vitals, for the blood pressure guideline.
- Recovery.
- Cycle.
- Data Importers.
- Sync with another phone.
- Health Connect.
- Debug diagnostics, in diagnostics builds only.
The settings root also shows support links, privacy notes, and the app version.
Users can configure:
- Language.
- Unit system.
- Theme mode, including system, light, dark, and AMOLED, plus dynamic color.
- Chart aggregation, which replaces raw samples with an average line and a min/max band per time bucket.
- Rolling dates mode, such as calendar week/month/year or rolling 7/30/365-day windows.
Display preferences affect app presentation only. They do not rewrite Health Connect records.
Metric-specific settings include:
- Favorite or latest activity defaults used by activity entry and recording setup.
- Split distance used by activity splits.
- Distance from GPS routes, off by default: a workout with a route takes the route's length as its distance. See Activity metrics.
- Activity recording preferences, including keep-screen-on.
- Calorie data mode, including optional OpenVitals total-calorie calculation when Health Connect totals are missing.
- Hydration goal, set with a stepper in the app's unit system.
- Caffeine sensitivity, daily limit, and bedtime guidance.
- Night start and night end hours, which decide where a night begins and ends and therefore which sessions count as daytime naps.
- High and low heart-rate alert thresholds, in beats per minute, used to flag an unusual resting heart rate.
- Body Energy calibration.
Body profile is its own section. It holds the facts about the user that personalize Body Energy, heart zones, and caffeine estimates. Every field is optional.
- Birth year.
- Weight, in the selected unit system.
- Height, in centimetres.
- Resting heart rate.
- Maximum heart rate.
- Sex, read only by the basal metabolic rate estimate.
Weight and height are shared with health data. When a measurement is available from Health Connect the field is labelled as measured and shows that value, so BMI, FFMI context, and caffeine estimates all use the same number. When nothing has been recorded, the typed value is kept as a local preference and used the same way.
The same section holds the "Basal metabolic rate" card: an off-by-default switch that estimates the resting daily burn from the profile (Mifflin-St Jeor) and writes one value per day to Health Connect, leaving days another source already covers alone. See Body metrics.
The same section holds the Metabolism card, which used to live behind caffeine settings. It collects the optional factors that change how quickly caffeine is cleared. Leaving them alone uses population averages.
Settings, Sync with another phone opens the phone-to-phone sync wizard, which copies supported Health Connect records between two nearby phones over Bluetooth. See Sync with another phone.
The Cycle section holds tracking contexts (PMS, PMDD, endometriosis, PCOS, perimenopause, thyroid), the age band, the cycle reminder configuration, a journal backup card that exports the journal to a JSON file and imports one back, and a "Delete cycle journal" action. The age band follows the body profile's birth year when one is set; the picker is the fallback. Contexts and age band only shape the estimate's width and the day log's suggested symptoms. They are stored in their own preferences file and never written to Health Connect. Deleting the journal removes the day logs, the exclusions and every cycle setting from the device after a confirmation, and leaves Health Connect records alone. See Cycle tracking and Reminders.
Settings expose local goals and reminders for supported metric families, including hydration, mindfulness, and cycle reminders.
Goals and reminders are local app preferences. They help shape guidance and notifications but do not create Health Connect health records by themselves.
Health Connect settings show permission categories, missing access, and actions for requesting or opening Health Connect permission management.
OpenVitals asks for read permissions for dashboard and detail views. Write permissions are requested only when a user enters, imports, records, edits, or deletes data that needs them.
The section also holds a Health Connect sync switch and a mindfulness integration switch. Mindfulness integration is off when the device's Health Connect version cannot show the mindfulness permission.
Settings provide Data Importers for Apple Health export import, single or bulk GPX/KML/KMZ/TCX route import, FIT activity/course/workout import, and CSV import of body measurements, vitals and workouts, plus entry points for offline map pack import and Bluetooth LE sensor management. Apple Health exports are analyzed first so the user can choose detected categories before anything is written to Health Connect. Route bulk import writes selected files directly after route import permissions are granted. CSV import runs its own mapping wizard; see CSV import. Import results can be copied or downloaded as a text report with summary, selected categories, logs, diagnostics, and failure details, holding counts, types and reasons and no record's value, time or source.
App lock asks for the device's own unlock (PIN, pattern, password or biometrics) before OpenVitals shows anything. A phone with no screen lock has nothing to ask for, so the app opens.
- It asks on every cold start. A rotation does not ask again. A process that Android killed and restored starts locked.
- It asks again after the app has spent a minute in the background. The screens stay loaded under the lock screen, so a file picker's result or the place in a form is not lost.
- A cancelled prompt leaves a lock screen with an Unlock button.
- While the lock is on, the recent-apps list shows no thumbnail of the app. On Android 12 and older that needs a window flag that also blocks screenshots of OpenVitals.
- The lock hides the screen. It does not encrypt anything; app-private storage and Health Connect's own permissions protect the data.
The settings area includes app version information, diagnostics/support surfaces, and privacy notes.
In diagnostics builds, the Debug diagnostics section can save or share the app's logs, masked, post the hydration reminder notification on demand so its layout and actions can be checked, and list the apps that contributed heart-rate and sleep records to Health Connect over the last seven days.
Generated from docs/features/settings-and-preferences.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