How sanjeevkumar94/heart-rate-module works
This Android app lets users record heart-rate readings, then review the latest value, zone, notes, and a time-filtered chart. The add flow validates date, time, BPM, and notes before saving through a repository to Room; elevated readings can trigger a local notification. The dashboard observes stored readings and groups them for display. The README documents range bucketing, responsive layouts, and notification behavior; some corresponding ViewModel implementations were not sampled, so their internal links are limited to documented responsibilities.
Main entry points: HeartRateScreen.kt Heart-rate screen · HeartRateViewModel.kt Dashboard ViewModel · AddHeartRateViewModel.kt Add-reading ViewModel · AddHeartRateScreen.kt Add-reading screen
Components 22
App entry and navigation
- Main activity
app/src/main/java/com/assignment/heartrate/MainActivity.kt - Navigation graph
app/src/main/java/com/assignment/heartrate/ui/navigation/HeartRateNavGraph.kt
Heart-rate screens
- Heart-rate screen
app/src/main/java/com/assignment/heartrate/ui/heartrate/HeartRateScreen.kt - Dashboard ViewModel
app/src/main/java/com/assignment/heartrate/ui/heartrate/HeartRateViewModel.kt - Add-reading screen
app/src/main/java/com/assignment/heartrate/ui/addheartrate/AddHeartRateScreen.kt - Add-reading ViewModel
app/src/main/java/com/assignment/heartrate/ui/addheartrate/AddHeartRateViewModel.kt - Heart-rate chart
app/src/main/java/com/assignment/heartrate/ui/components/HeartRateChart.kt - Zone indicator
app/src/main/java/com/assignment/heartrate/ui/components/HeartRateZoneIndicator.kt - Health tip card
app/src/main/java/com/assignment/heartrate/ui/components/HealthTipCard.kt
Validation and domain
- Input validation
app/src/main/java/com/assignment/heartrate/util/InputValidation.kt - Heart-rate zones
app/src/main/java/com/assignment/heartrate/domain/HeartRateZone.kt - Timeline ranges
app/src/main/java/com/assignment/heartrate/domain/TimeRange.kt - Device options
app/src/main/java/com/assignment/heartrate/domain/HeartRateDevice.kt
Local persistence
- Reading repository
app/src/main/java/com/assignment/heartrate/data/repository/HeartRateRepository.kt - Repository implementation
app/src/main/java/com/assignment/heartrate/data/repository/HeartRateRepositoryImpl.kt - Heart-rate DAO
app/src/main/java/com/assignment/heartrate/data/local/HeartRateDao.kt - Reading entity
app/src/main/java/com/assignment/heartrate/data/local/HeartRateEntity.kt - Room database
app/src/main/java/com/assignment/heartrate/data/local/AppDatabase.kt
Notifications
- App startup
app/src/main/java/com/assignment/heartrate/HeartRateApp.kt - Notification helper
app/src/main/java/com/assignment/heartrate/notification/NotificationHelper.kt
Other components
- User
- Android notifications
Connections 25
- User → Main activity: opens app
- Main activity → Navigation graph: shows after splash
- User → Heart-rate screen: views readings
- Navigation graph → Heart-rate screen: routes to
- Navigation graph → Add-reading screen: routes to
- Heart-rate screen → Dashboard ViewModel: collects state; sends events
- Dashboard ViewModel → Reading repository: observes readings
- Dashboard ViewModel → Timeline ranges: uses selected range
- Dashboard ViewModel → Heart-rate zones: classifies BPM
- Dashboard ViewModel → Device options: uses device selection
- Heart-rate screen → Heart-rate chart: renders chart
- Heart-rate screen → Zone indicator: renders zone band
- Heart-rate screen → Health tip card: renders tip and share action
- User → Add-reading screen: enters reading
- Add-reading screen → Add-reading ViewModel: sends edits and save
- Add-reading ViewModel → Input validation: validates fields
- Add-reading ViewModel → Reading repository: saves reading
- Reading repository → Repository implementation: bound by Hilt
- Repository implementation → Heart-rate DAO: queries and inserts
- Heart-rate DAO → Room database: uses Room
- Heart-rate DAO → Reading entity: reads and writes
- App startup → Notification helper: creates channel
- Add-reading screen → Add-reading ViewModel: requests notification permission
- Add-reading ViewModel → Notification helper: posts elevated alert
- Notification helper → Android notifications: posts local notification