Repository navigation
Heart And Vitals
Status: Current implemented behavior with a transitional shared loader. Audience: Users and contributors. Implementation:
features/heart,features/vitals,features/manualentry/vitals,data/repository/HeartRepository.kt,data/repository/VitalsRepository.kt. Navigation:Screen.Metric, vitals entry routes; heart and vitals dashboard widgets. Related: Feature map, Manual entry of metrics, Statistics.
Heart and vitals are related but distinct feature areas.
-
features/heartowns heart-rate-oriented state, presentation mapping, and route wrappers for average heart rate, resting heart rate, and HRV. -
features/vitalsowns vitals-facing screens and UI helpers such as blood pressure, SpO2, VO2 max, respiratory rate, body temperature, blood glucose, skin temperature, and the Today Vitals overview.
The current implementation still shares HeartViewModel and the heart period loader across heart and vitals routes. That is an intentional transitional boundary: the user-facing vitals UI lives in features/vitals, while some loading/state infrastructure remains shared until a deeper split is worth the extra complexity.
Heart metrics:
- Average heart rate.
- Resting heart rate.
- HRV.
Vitals metrics:
- Blood pressure.
- SpO2.
- VO2 max.
- Respiratory rate.
- Body temperature.
- Blood glucose.
- Skin temperature.
Health Connect stores skin temperature as a signed variation from a baseline the device set, with the baseline optional and per record, and a record can span hours with a sample a minute. The screen keeps the two apart:
- Every value is a variation in signed degrees, under "Variation from baseline". Nothing reconstructs an absolute temperature.
- Charts are zero-centred (
LineAxisRange.ZeroCentred) with a dashed zero line. The day view draws the records' samples on the day timeline (SkinTemperatureDayChart); samples travel inSkinTemperatureEntry.deltasfor a day query only. - Comparisons are signed degrees, never a percent of a delta
(
ComparisonDisplayStyle.SIGNED_VALUE), and the personal baseline keeps the days below zero (includeNonPositive). The deviation tile is "Vs usual average". - The device baseline has its own tile: the one the period's records share, else the newest, flagged; "Not provided by source" when there is none. A record without samples is "No variation recorded", never its baseline as a reading.
- The code lives in
features/vitals/SkinTemperatureSections.ktandSkinTemperatureDayChart.kt.
Heart and vitals detail screens use the shared metric detail scaffold:
- Day, week, month, and year ranges.
- Selected anchor date.
- Previous/next period navigation.
- Calendar date picking.
- Pull to refresh.
- Intraday charts where sample data is available.
- Period charts, statistics, thresholds, comparisons, data confidence, source labels, and entry lists.
- Reorderable sections.
OpenVitals-created vitals entries can be edited or deleted when the app has write permission and ownership can be verified. External records stay read-only.
The latest reading is named with the categories of one guideline. Settings > Vitals holds the choice: ACC/AHA 2017 (the default), ESH 2023, ESC 2024, or ISH 2020. ACC/AHA counts 130/80 mmHg as high; the other three count 140/90.
- A reading takes the highest category that either number reaches.
- Every guideline flags a reading above 180 systolic or above 120 diastolic.
- The "How it is classified" card on the blood pressure screen names the guideline, lists its thresholds, and links its sources.
- The thresholds are for adult readings taken in a clinic. Home readings often run lower.
Each heart and vitals dashboard tile opens its own focused metric screen directly - tapping Blood pressure opens the blood pressure detail, not an intermediate overview.
Heart-rate and vitals records are read through feature-facing repository/use-case APIs rather than a global browser. Manual vitals entry lives under features/manualentry/vitals; dashboard cards route to focused heart or vitals detail destinations.
Generated from docs/features/heart-and-vitals.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