Repository navigation
Fix carried Charge source label - #412
Merged
Merged
Conversation
kavemang
marked this pull request as ready for review
July 14, 2026 02:58
Owner
|
Parity note (no iOS twin needed): checked whether the same mislabeled-carried-Charge symptom exists on iOS/macOS. It doesn't, on either Today surface:
So the #390 defect (carried Charge labeled with the wrong source) has no iOS equivalent. The only residual difference after this PR is cosmetic — Android now shows the correct source badge on a carried Charge, whereas classic iOS shows none (caption only). That's a missing nicety, not a bug, so no parity fix is required for #390. Surfacing the carried source badge on classic TodayView remains available as an optional future enhancement. |
ryanbr
added a commit
that referenced
this pull request
Jul 15, 2026
ryanbr
added a commit
that referenced
this pull request
Jul 15, 2026
tanarchytan
added a commit
to tanarchytan/noop
that referenced
this pull request
Jul 15, 2026
ryanbr#409 turned the per-ring 'beneath' source labels into one card-level badge anchored to the Rest vessel and offset up to straddle the card's top border, so it floated over the liquid vessels (the later nudge into the top-right corner still overlapped the top edge). Put it back where it sat before ryanbr#409: BENEATH the circles, in normal flow. The hero column now owns the vertical padding and lays out [rings row] then the single consolidated SourceBadge as a centred child, so the label hugs the ring cluster and never overlaps a vessel (label and no-label cases). Also centre the SourceBadge text within the pill (Box + contentAlignment/textAlign Center) — the heightIn(min) height floor could otherwise let the single line ride the pill's top edge. Data path unchanged (real per-metric merge winners incl. a carried Charge's source, ryanbr#412). Dropped the now-unused overlay measurement (wrapContentWidth/offset/onSizeChanged) and the fixed-width Rest wrapper. Verified on device (com.noop.whoop 9.0.0).
DX23876
pushed a commit
to DX23876/noop
that referenced
this pull request
Jul 22, 2026
Co-authored-by: kavemang <kavemang@users.noreply.github.com>
simoncad7
pushed a commit
to simoncad7/noop
that referenced
this pull request
Aug 17, 2026
Co-authored-by: kavemang <kavemang@users.noreply.github.com>
J-Gur
added a commit
to J-Gur/noopjg
that referenced
this pull request
Sep 28, 2026
…DISTANCE) Selecting the Activity import category (needed to read Steps) batches DistanceRecord's read permission into the same runtime request. That permission was never declared in the manifest, and Health Connect silently drops the whole batched request when one permission in it is undeclared — the same trap already hit once for WRITE_EXERCISE/ WRITE_DISTANCE (ryanbr#412) and again for READ_HYDRATION. Tapping "Import from Health Connect" showed no permission dialog and no Toast at all. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
J-Gur
added a commit
to J-Gur/noopjg
that referenced
this pull request
Sep 28, 2026
hcWritePermissionLauncher batches VO2MAX_PERMISSIONS into the same runtime request as the vitals + exercise write permissions (startWriteback()), but WRITE_VO2_MAX was never declared in the manifest. Health Connect silently drops the whole batched request when one permission in it is undeclared — the same trap already hit for WRITE_EXERCISE/WRITE_DISTANCE (ryanbr#412) and READ_HYDRATION, and again for READ_DISTANCE — so writeback kept failing PERMISSION_DENIED regardless of what was granted elsewhere. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
DX23876
added a commit
to DX23876/noop
that referenced
this pull request
Nov 1, 2026
Health Connect silently drops a whole batched permission request when one permission in it is not declared in the manifest (the trap already hit for WRITE_EXERCISE/WRITE_DISTANCE in ryanbr#412 and for READ_HYDRATION). - The Activity import category bundles DistanceRecord with Steps (HealthConnectImporter.ImportCategory.ACTIVITY), but READ_DISTANCE was undeclared, so "Import from Health Connect" for Activity showed no dialog and imported nothing. - A fresh install's first writeback request batches VO2MAX_PERMISSIONS with the vitals and exercise writes, but WRITE_VO2_MAX was undeclared, so the whole writeback request was dropped. Not verified on an Android device. Adopted from J-Gur/noopjg (79a5256, 8ff2a7d) by @J-Gur. Analysis migration required: no Co-authored-by: J-Gur <162961589+J-Gur@users.noreply.github.com>
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.
Summary
*-nooprecovery sources display asOn-device.Why
Fixes #390.
Today can show a carried Charge while the current day has no recovery score yet. In that state, the current-day
recoveryprovenance is also absent, so the hero source label could omit or misrepresent the source behind the visible Charge value.This PR looks up the carried night's resolved recovery source and uses it only for that carried Charge case. Current-day recovery provenance still wins when it exists, so imported WHOOP data continues to display as
Whoop; a NOOP-computed carried Charge displays asOn-device.Test
cd android && ./gradlew :app:testFullDebugUnitTest --tests 'com.noop.ui.TodayExplainabilityTest'