wake-alarm/phone_app/test
Krzysztof kuhy Rudnicki dc2d54668b Phase 4/3: close the ring screen on dismiss, and make NFC registerable
Two defects that each defeated the alarm in a different way:

1. Nothing finished AlarmActivity after a correct answer. Sound stopped and
   the alarm re-armed, but the dismiss screen stayed up over the lockscreen
   forever — back is disabled in both halves by design — and the live instance
   kept _inRoom=true with the solved answer still typed, so the next ring
   could reuse an already-passed gate. AlarmActivity now handles
   closeRingScreen; the shared AlarmChannel deliberately holds
   applicationContext and cannot finish an activity, hence the split handler.

2. Nothing could write roomProof.nfcTagId — there was no registration UI — so
   checkNfc always answered "no tag registered" and checkQr was never called.
   Functionally that left steps as the only satisfiable proof, which is
   exactly the state the decision rules out ("NFC or QR qualifies; steps alone
   does NOT") and removes the redundancy whose purpose is that one failing
   mechanism at 06:00 must never block dismissal. Added RoomProofScreen
   (reader mode from MainActivity, since registration needs an Activity) and
   linked it from Settings.

Also: StepCounter kept one listener instead of registering a fresh one per
ring and never unregistering, and the ring screen drops its NFC handler on
dispose.

New tests cover what had been dead code: a registered tag satisfies the proof
and reveals the challenge, a foreign tag does not, and a correct answer
invokes BOTH dismiss and closeRingScreen. The emulator cannot reach the
dismiss path at all (no step sensor, no NFC), which is why it is covered by
widget tests rather than claimed from the AVD run.

Documented ringNow/main_ring_probe.dart in AGENTS.md as a deliberate manual
test handle, the phone-side equivalent of wake-alarm.service.

flutter test: 69 pass. dart analyze lib/ test/: clean. pre-commit: passed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EckWmyfetYq3Mi8MAnUudh
2026-08-27 21:39:01 +02:00
..
services Phase 4/3: close the ring screen on dismiss, and make NFC registerable 2026-08-27 21:39:01 +02:00
fake_secure_storage.dart phone_app: add Google sign-in support for the Firebase sync account 2026-08-14 11:26:33 +02:00
firebase_backend_google_test.dart phone_app: add Google sign-in support for the Firebase sync account 2026-08-14 11:26:33 +02:00
google_platform_test.dart phone_app: add Google sign-in support for the Firebase sync account 2026-08-14 11:26:33 +02:00
google_sign_in_backend_test.dart phone_app: add Google sign-in support for the Firebase sync account 2026-08-14 11:26:33 +02:00
ring_route_test.dart Phase 4/3: close the ring screen on dismiss, and make NFC registerable 2026-08-27 21:39:01 +02:00
room_proof_screen_test.dart Phase 4/3: close the ring screen on dismiss, and make NFC registerable 2026-08-27 21:39:01 +02:00
settings_screen_test.dart phone_app: migrate Sync settings to the shared sync_settings_ui package 2026-08-14 11:29:32 +02:00
widget_test.dart Add wake_alarm_sync phone-side Flutter companion app 2026-07-10 23:16:11 +02:00