Commit Graph

368 Commits

Author SHA1 Message Date
71ffc52993 refactor(settings): migrate block_phone to Riverpod CRUD pattern 2026-04-22 02:19:33 +02:00
d355ee2442 refactor(legacy-settings): migrate sos_contacts CRUD to AsyncNotifier 2026-04-22 02:02:18 +02:00
cc5159fc56 fix(legacy-settings): keep alarm list after save for consistency 2026-04-22 01:54:48 +02:00
d6d82d20c6 refactor(legacy-settings): migrate alarm CRUD to AsyncNotifier 2026-04-22 01:52:22 +02:00
f2d2385f24 fix(legacy-settings): go back after timezone save for consistency 2026-04-22 01:31:15 +02:00
e6974c7be7 refactor(legacy-settings): migrate alerts to AsyncNotifier 2026-04-22 01:31:14 +02:00
20cebc8bc7 refactor(legacy-settings): migrate remote_management to AsyncNotifier 2026-04-22 01:20:55 +02:00
2247833203 feat(legacy-settings): DST-aware timezone with phone auto-detect 2026-04-22 01:10:10 +02:00
92e93a2b69 chore(legacy-theme): remove reserved timeframe dead code 2026-04-22 00:56:47 +02:00
691dfc0472 refactor(legacy-settings): migrate battery to AsyncNotifier 2026-04-22 00:44:35 +02:00
2b9b6aa215 refactor(legacy-settings): migrate timezone, sound, sync_clock to AsyncNotifier 2026-04-22 00:42:33 +02:00
4cd4be24e6 refactor(legacy-customer-service): move contact form state to provider (no setState) 2026-04-22 00:34:53 +02:00
a547f7a786 refactor(legacy-account): move delete_account dialog state to provider (no setState) 2026-04-22 00:30:20 +02:00
42698631a3 refactor(legacy-account): move personal_data form state to provider (no setState) 2026-04-22 00:16:48 +02:00
69fdc2233f refactor(legacy-account): move change_password local error to provider (no setState) 2026-04-22 00:10:43 +02:00
75b47e2c25 refactor(legacy-settings): move language selection state to provider (no setState) 2026-04-22 00:00:14 +02:00
1c0a8b7bb7 refactor(legacy-settings): migrate language to AsyncNotifier 2026-04-21 23:51:38 +02:00
417b6660fc refactor(legacy-customer-service): migrate contact form to AsyncNotifier 2026-04-21 23:45:41 +02:00
b8ac786146 refactor(sf_shared): add help center URL to BrandLinks 2026-04-21 23:33:12 +02:00
dd1617939b refactor(sf_shared): move brand links to Firebase Remote Config 2026-04-21 23:32:26 +02:00
4c85af38aa refactor(legacy-account): use .select for AsyncValue field reads 2026-04-21 23:32:01 +02:00
309ff8b8b7 refactor(legacy-account): migrate account_settings to AsyncNotifier 2026-04-21 23:31:56 +02:00
e040944965 refactor(legacy-account): migrate delete_account to AsyncNotifier + fix A1 2026-04-21 22:12:51 +02:00
b6526f20ee refactor(legacy-account): migrate linked_devices to AsyncNotifier 2026-04-21 21:47:36 +02:00
0418f16f87 fix(sf_shared): distinguish 401 vs 403 error UX 2026-04-21 21:34:32 +02:00
f36ad5e4a6 refactor(legacy-account): migrate personal_data to AsyncNotifier 2026-04-21 21:00:42 +02:00
0a50941c2b fix(legacy-account): show success dialog after password change 2026-04-21 20:49:13 +02:00
7746d08759 refactor(legacy-account): migrate change_password to AsyncNotifier 2026-04-21 20:35:18 +02:00
72c88cc4b0 refactor(legacy-account): migrate app_users to FutureProvider 2026-04-21 20:03:45 +02:00
b21b234b9a feat(sf_tracking): consent-aware crashlytics wrapper 2026-04-21 19:33:54 +02:00
f89bca99b3 feat(sf_shared): add FailureType + handleFailure + feedback dialogs 2026-04-21 19:32:49 +02:00
1056895c31 chore(legacy): add test infrastructure + mocktail 2026-04-21 19:32:40 +02:00
424b8d9034 fix 2026-04-21 18:24:25 +02:00
4aa91c355e Revert "docs: add snackbar messages reference in Spanish"
This reverts commit 7ea415cb6e.
2026-04-21 18:15:07 +02:00
7ea415cb6e docs: add snackbar messages reference in Spanish 2026-04-21 17:59:58 +02:00
21fd1e0197 chore(i18n): add missing translation keys and device debug logging 2026-04-21 17:59:50 +02:00
d618ed76d0 feat(wifi): enable wifi settings entry point and add debug logging 2026-04-21 17:59:39 +02:00
dfd7ba9c41 fix(sos-contacts): prevent deleting last emergency contact 2026-04-21 17:59:29 +02:00
b8f5c5d6f8 feat(block-phone): add edit contact functionality 2026-04-21 17:59:16 +02:00
d470ed470a fix(location): add sharePositionOrigin for iPad share 2026-04-21 17:59:08 +02:00
a400fef77d fix(control-panel): match dropdown value by device id to prevent crash 2026-04-21 17:59:00 +02:00
febc21a590 fix(do-not-disturb): return empty schedule on 404 instead of error 2026-04-21 17:58:52 +02:00
29fca859fc fix(personal-data): send all required fields in PUT and autofill form 2026-04-21 17:58:44 +02:00
d92fe887fd fix(rewards): send rewards key instead of amount in command data 2026-04-21 17:58:27 +02:00
315e5b2908 fix(volume): use capabilities max per slider and fix 0-10 scale 2026-04-21 17:58:20 +02:00
244e5bbd03 feat(capabilities): add volume limits (media, ringtone, alarm) 2026-04-21 17:58:12 +02:00
a86041885c feat(settings): add falldown, falldownLevel and rename gps to location 2026-04-21 17:58:03 +02:00
12011ce525 fix(notifications): handle deep linking on cold start without crash 2026-04-21 17:57:53 +02:00
c92e2fb67f refactor(legacy): align with Riverpod architecture (DTOs, repos, drop UseCases) 2026-04-19 23:20:38 +02:00
7e1ead9cae refactor(legacy): split legacy_shared into cohesive packages
legacy_shared was the junk drawer of the legacy app mode — 37 files
mixing device entities, command infrastructure, UI primitives, generic
formatters, and a duplicate of sf_infrastructure's dio_error_mapper.
Any module needing one piece pulled the whole bag into its graph.

Split it by responsibility, following Mandamiento 4 of Real-World Flutter:

- legacy_ui (new): 6 widget/layout primitives (PageLayout, MenuButton,
  SectionButton, PulsingLocationMarker, RefreshableErrorState,
  WeekDayChips) plus mapStyleProvider — shared UI state that was the
  only reason two modules needed a common package.
- legacy_device_state (expanded 9 → 30): absorbed device entities,
  commands infrastructure (datasource + repo + provider + guard),
  device settings update flow, and the CSV exporter. Now one package
  owns the device domain end-to-end.
- packages/utils: absorbed battery_utils and date_format_utils as pure
  formatters that never belonged in a legacy-scoped package.
- legacy_shared: deleted entirely.

The duplicate dio_error_mapper in legacy_shared is gone; callers now use
the sf_infrastructure version (which was always the superset — it adds
ApiException and the dart:io socket handling).

DeviceEntity note: legacy_device_state keeps its own DeviceEntity (with
int timestamps and typed paymentOptions) separate from sf_shared's
DeviceEntity (String timestamps, untyped paymentOptions). The legacy
one is intentionally not exported from the barrel to avoid the
ambiguous_import collision that legacy_shared quietly hid by never
exporting it in the first place. Unifying the two is a domain-model
refactor out of scope here.

0 cross-module imports remain among legacy feature modules.
2026-04-19 05:42:31 +02:00