Repository navigation
feat(power): move Power saving into More (between Test Centre and Settings), offer 35% - #1431
Merged
Merged
Conversation
ryanbr
force-pushed
the
feat/power-saving-in-more
branch
from
August 18, 2026 11:42
b48d4c6 to
9927725
Compare
…nd offer 35% Power saving was one card buried mid-scroll in Settings. It is now its own screen, reachable where people look for it when a strap is running down: - iPhone: a first-class More row between Test Centre and Settings. - Android: the same row in the More page`s App group, between Test Centre and Settings. - macOS: its own sidebar item next to Settings (that shell has no More page; it stays inside the one Data & App group so the every-NavItem-is-grouped contract in MoreListParityTests still holds). Also raises the "Kick in at (strap battery)" ceiling from 30% to 35% (10-35 in 5s), so the levers can engage one step earlier in the discharge and buy roughly another 5% of strap life, at the cost of a slightly longer quiet stretch. Pure surface move otherwise: the controls, their prefs and their wiring are unchanged. applyPowerSaving() still reads every value from PuffinExperiment / NoopPrefs on both platforms, so relocating the screen cannot alter behaviour, and the master still gates its three sub-options. Re-review cleanup: removing the card left four now-unused state vars in the Android SettingsScreen (they still read SharedPreferences on every composition) and a hole at index 4 in the iOS staggeredAppear sequence, which lengthened the pause before the next card. Both closed. Re-review also caught the Android half of the 35% bump silently not applying: the edit matched on the wrong indentation, so the comment claimed 10-35 while valueRange stayed 10f..30f / steps = 3 - a comment that lied AND a parity break against the iOS slider. Both values corrected and pinned by a behavioural diff of the moved code: the only differences between the old card and the new screen are the slider range/steps and the new screen title. Every toggle, binding, callback and pref key is byte-identical. New copy localized de/es/fr/pl/pt-PT (iOS catalog) and de/es/fr/pl/pt-PT/zh (Android). Full Android suite 4042 tests green, aapt + i18n --ci + doc-comment lint green; app-build green on both legs.
ryanbr
force-pushed
the
feat/power-saving-in-more
branch
from
August 18, 2026 11:55
9927725 to
72672d0
Compare
ryanbr
added a commit
that referenced
this pull request
Aug 18, 2026
Build numbers only. MARKETING_VERSION / versionName stay 10.1.1 — the staging line is one above the latest release (v10.1.0) and holds there until 10.1.1 actually ships. versionCode 341 -> 342 and CURRENT_PROJECT_VERSION 223 -> 224, both +1 past the previous staging build so a sideloaded update installs in place rather than being refused as a downgrade. Picks up since the last testing build (f2271cd): backup build provenance (#1422), the CTL/ATL/TSB training-load engine (#1423) and its Trends card (#1425), sleep-vs-wake HR contrast (#1424), the v20 optical decoder + CRC gate (#895), the Sleep UI split (#1426), the WHOOP4 clock-correlation fix (#1427), the settings waist-row layout + copy fix (#1428), hourly Apple step import (#1429), Low refresh (#1430), and Power saving moving into More with a 35% ceiling (#1431).
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.
Power saving was one card buried mid-scroll in Settings. It now has its own screen, reachable where people actually look for it when a strap is running down — plus a higher threshold ceiling.
Where it moved
macOS keeps it inside the one "Data & App" group, so
MoreListParityTests' every-NavItem-is-reachable-in-exactly-one-group contract still holds.Kick-in ceiling 30% → 35%
The "Kick in at (strap battery)" slider now offers 10–35 in 5s (was 10–30). Engaging one step earlier in the discharge buys roughly another 5% of strap life, at the cost of a slightly longer quiet stretch. Both platforms; Android's
stepswent 3 → 4 to keep the 5% snapping.Note this does not touch
clampIdleThrottlePct(0 or 10..30) — that guards the separate, dormant idle-throttle lever (#478), which keeps its own range and risk profile.Otherwise a pure surface move
The controls, their prefs and their wiring are unchanged.
applyPowerSaving()still reads every value fromPuffinExperiment/NoopPrefson both platforms, so relocating the screen cannot alter behaviour, and the master still gates its three sub-options (threshold, Pause HRV capture, Low refresh).Parity
Same feature, same controls, same order relative to Settings on all three shells; new screens are twins (
PowerSavingView/PowerSavingScreen) extracted from the same card. New copy localized de/es/fr/pl/pt-PT (iOS catalog) and de/es/fr/pl/pt-PT/zh (Android), including the new nav label.Validation
compileFullDebugKotlin+processFullDebugResources(aapt) clean.Tools/i18n_audit.py --cigreen;doc_comment_lint.pygreen.