Repository navigation
fix(timeline): name the active device on the Deep Timeline source row, not a hardcoded "My WHOOP" - #2276
Merged
ryanbr merged 1 commit intoSep 17, 2026
Conversation
…, not a hardcoded "My WHOOP" (ryanbr#2274) The source row under the day stepper was a literal on both platforms — `Text("My WHOOP")` / `R.string.timeline_my_whoop` — written for ryanbr#574 when the strap was the only possible owned source. `Repository.timelineSeries` reads the ACTIVE device id first, so with an Oura ring active the chart plotted the ring's series under a WHOOP label. The row now shows the active device's registry display name (nickname, else "Brand Model") via the existing `PairedDevice.displayName` / `displayName(PairedDeviceRow)` twins — the same name the Devices screen uses. No registry row (the pre-registry seeded strap) keeps the legacy "My WHOOP", so no new strings and no locale work. Verified: macOS `Strand` build, iOS `NOOPiOS` build, Android `compileFullDebugKotlin`, `doc_comment_lint.py`, `i18n_audit.py --ci` all green. Refs ryanbr#2274 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XQZpEYdY41SRMZ48HJdrGD
pipiche38
marked this pull request as ready for review
September 17, 2026 06:26
Author
|
Hardware check on iOS (build |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The Deep Timeline's source row (under the day stepper) was a literal on both platforms —
Text("My WHOOP")/R.string.timeline_my_whoop— written for #574 when the strap was the only possible owned source.Repository.timelineSeriesreads the active device id first, so with an Oura ring active the chart plotted the ring's series under a WHOOP label (screenshot in #2274).The row now shows the active device's registry display name via the existing
PairedDevice.displayName/displayName(PairedDeviceRow)twins — nickname if set, else "Brand Model" — the same name the Devices screen and the "Make X your active strap" prompts already use. No registry row for the active id (the pre-registry seeded strap) keeps the legacy "My WHOOP".Strand/Data/Repository.swift—activeDeviceDisplayName()besideactiveStrapIsWhoop5(), same registry read.Strand/Screens/FullDayChartView.swift—sourceNamestate, resolved onrepo.deviceId; falls back to the existing literal.android/…/ui/FullDayChartScreen.kt—sourceNamefrom thepairedDevices()read the No SpO2 and respiration data captured or shown #623 gate already does; falls back totimeline_my_whoop.Visible side effect for WHOOP users: a strap with a registry row now reads "WHOOP 4.0" / "WHOOP" / its nickname instead of "My WHOOP" — consistent with the Devices screen, and what a multi-WHOOP setup (#1300, #1304) needs anyway. Say if you'd rather keep "My WHOOP" for the WHOOP brand only; it's a one-line gate.
No new strings ⇒ no locale work; the existing "My WHOOP" translations stay in use for the fallback.
Verification
App-target Swift, so CI doesn't compile it — built locally:
Strand—xcodebuild … buildBUILD SUCCEEDEDNOOPiOS—xcodebuild … -destination 'generic/platform=iOS Simulator' buildBUILD SUCCEEDED./gradlew compileFullDebugKotlinexit 0Tools/doc_comment_lint.py— OK, no new detached doc commentsTools/i18n_audit.py --ci upstream/main— OK, no new gapsintegration/oura-full); a screenshot of the corrected row is owed once flashed.Refs #2274