feat(alarma-sonando): restyle ringing screen, drop live countdown label
Replace the glass-card container with a full-bleed blurred-art background, giant heroTime display, 3 fixed snooze tiles (3/5/10 min, one highlighted), and a full-width stop pill. The status label now also renders a static "Subiendo volumen" line - no seconds counter - when the alarm has a configured fade-in, per resolution 4: the native-to-Flutter progress channel a live counter would need is deliberately absent from this architecture. The dismiss guard and force-stop retry banner are untouched: the banner is byte-identical to its pre-restyle form, only repositioned, and the guard test's own diff against main stays empty. size:exception: 530 changed lines (440+/90-) against the 200-300 forecast - lib/ alone is 302 lines, at the edge of the band; the two touched test files account for the rest. Not split further: this is one cohesive restyle to the single screen in this branch where an inconsistent intermediate state is least acceptable.
This commit is contained in:
@@ -680,19 +680,45 @@ Banner Survive the Restyle
|
||||
> **Hard rule, restated:** if the restyle appears to require changing the dismiss-guard test, the task is to STOP
|
||||
> and escalate — not to edit the test.
|
||||
|
||||
- [ ] 11.1 RED — update the two non-guard test files for the full-bleed blurred-art layout, giant 88px time
|
||||
- [x] 11.1 RED — update the two non-guard test files for the full-bleed blurred-art layout, giant 88px time
|
||||
(`heroTime`, wrapped in `FittedBox(fit: BoxFit.scaleDown)` per the text-scaling rule), 3 fixed snooze tiles
|
||||
(3/5/10 min, 10 highlighted), full-width stop pill.
|
||||
- [ ] 11.2 RED — the status label renders "Subiendo volumen" (or localized equivalent) with no accompanying
|
||||
numeric value that changes over time.
|
||||
- [ ] 11.3 GREEN — restyle to a full-bleed art background; replace the `Wrap` of snooze chips with 3 fixed tiles;
|
||||
replace the glass-card container.
|
||||
- [ ] 11.4 GREEN — keep the status label static, sourced only from `widget.alarma` (unchanged from the existing
|
||||
documented constraint); preserve the force-stop retry banner in the new layout.
|
||||
- [ ] 11.5 REFACTOR — run `pantalla_alarma_sonando_dismiss_guard_test.dart` **unchanged**; if it fails, STOP — do
|
||||
not edit it, escalate instead.
|
||||
- [ ] 11.6 Verify — force-stop banner still appears on a simulated stop failure; dismiss-guard test file diff is
|
||||
empty.
|
||||
(3/5/10 min, 10 highlighted), full-width stop pill. **Correction found at apply time**: the pre-existing
|
||||
"3/5/10 mas el personalizado" test (snoozeMinutos=7 growing a 4th button) is exactly the behavior this WU
|
||||
replaces — rewrote it in place (not deleted) to assert the new "always exactly 3, no 4th tile" contract,
|
||||
plus 2 new tests pinning which tile is `FilledButton` (highlighted) vs `OutlinedButton`.
|
||||
- [x] 11.2 RED — the status label renders "Subiendo volumen" (or localized equivalent) with no accompanying
|
||||
numeric value that changes over time. New ARB key `alarmVolumeRisingStatus` carries NO placeholder at all
|
||||
(unlike `alarmFadeInSummary`, which has `{seconds}`) — by construction this label can never grow a live
|
||||
counter without a deliberate key change. Gated on `alarma.fadeInSegundos > 0`: the existing `_montarPantalla`
|
||||
test helper in `pantalla_alarma_sonando_test.dart` already carried an unused `fadeInSegundos` parameter
|
||||
defaulting to 0, confirming this gate was anticipated ahead of this WU.
|
||||
- [x] 11.3 GREEN — restyle to a full-bleed art background; replace the `Wrap` of snooze chips with 3 fixed tiles;
|
||||
replace the glass-card container. No per-station artwork exists in this codebase (`Emisora.favicon` is a
|
||||
network URL — rendering it via `Image.network` in a widget test hangs/throws without a mocked
|
||||
`HttpClient`), so the existing bundled `alarm_music.png` asset is reused, blurred (`ImageFiltered`,
|
||||
sigma 44) and stretched — decorative, not spec-tested.
|
||||
- [x] 11.4 GREEN — keep the status label static, sourced only from `widget.alarma` (unchanged from the existing
|
||||
documented constraint); preserve the force-stop retry banner in the new layout. `_bannerFalloDetencion` is
|
||||
BYTE-IDENTICAL to its pre-WU11 form (same l10n keys, same widget structure) — only repositioned, never
|
||||
rewritten, so every existing force-stop test (SS-3a/SS-3b/SS-3c/RES-2) keeps passing unmodified. **Design
|
||||
decision, not specified by any ADR (WU11 has none)**: the "Subiendo volumen" status dot is intentionally
|
||||
NOT animated/pulsing — an `AnimationController.repeat()` here would reintroduce the exact
|
||||
"`pumpAndSettle()` never terminates" hazard WU5 documented for `VisualizadorAudio`.
|
||||
- [x] 11.5 REFACTOR — ran `pantalla_alarma_sonando_dismiss_guard_test.dart` **unchanged**: all 8 cases green,
|
||||
byte-identical, no edit needed or made.
|
||||
- [x] 11.6 Verify — force-stop banner still appears on a simulated stop failure (all 3 force-stop scenarios green,
|
||||
unmodified); dismiss-guard test file diff is empty against BOTH `HEAD` and `main`.
|
||||
|
||||
**`size:exception` recorded.** Realized: **530 changed lines** (440+/90-) across 3 files against the 200-300
|
||||
forecast — `lib/` production code alone is 302 lines (248+/54-), essentially at the top edge of the forecast band
|
||||
by itself; the 2 modified test files add 228 lines, the same "a strict-TDD commit carries its test files" pattern
|
||||
as every prior WU (Engram `reference/estimating-strict-tdd-diffs`, id 2514) — this WU touches no ARB keys beyond
|
||||
the 1 new `alarmVolumeRisingStatus` string, so no 13-file l10n/gen inflation this time; test growth alone accounts
|
||||
for the overage. Not pre-flagged for exception in the forecast table (unlike WU10), but the same "one cohesive
|
||||
visual+behavioral restyle to one safety-critical screen" reasoning applies: splitting the background/snooze-tiles/
|
||||
stop-pill/status-label changes into separate commits would leave an inconsistent intermediate UI on the ringing
|
||||
screen specifically — the one screen in this whole branch where an inconsistent intermediate state is least
|
||||
acceptable.
|
||||
|
||||
## WU13 — Ecualizador settings screen (5-band restyle)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user