Commit Graph

321 Commits

Author SHA1 Message Date
ad0b8d209a refactor(settings): migrate block_phone to Riverpod CRUD pattern 2026-04-26 21:52:58 +02:00
653ea9ab56 refactor(legacy-settings): migrate sos_contacts CRUD to AsyncNotifier 2026-04-26 21:52:58 +02:00
8c269e8c47 fix(legacy-settings): keep alarm list after save for consistency 2026-04-26 21:52:58 +02:00
a197d5bc28 refactor(legacy-settings): migrate alarm CRUD to AsyncNotifier 2026-04-26 21:52:58 +02:00
3f9c298b6f fix(legacy-settings): go back after timezone save for consistency 2026-04-26 21:52:58 +02:00
3b1534d3b3 refactor(legacy-settings): migrate alerts to AsyncNotifier 2026-04-26 21:52:57 +02:00
eb2bde8d40 refactor(legacy-settings): migrate remote_management to AsyncNotifier 2026-04-26 21:52:57 +02:00
c3dcc6febc feat(legacy-settings): DST-aware timezone with phone auto-detect 2026-04-26 21:52:57 +02:00
c4d328d92c chore(legacy-theme): remove reserved timeframe dead code 2026-04-26 21:52:57 +02:00
2eee3489cd refactor(legacy-settings): migrate battery to AsyncNotifier 2026-04-26 21:52:57 +02:00
3b57d0e70d refactor(legacy-settings): migrate timezone, sound, sync_clock to AsyncNotifier 2026-04-26 21:52:57 +02:00
fe9476d417 refactor(legacy-customer-service): move contact form state to provider (no setState) 2026-04-26 21:52:56 +02:00
79d0f72f08 refactor(legacy-account): move delete_account dialog state to provider (no setState) 2026-04-26 21:52:56 +02:00
5925a97b01 refactor(legacy-account): move personal_data form state to provider (no setState) 2026-04-26 21:52:56 +02:00
41b22ad457 refactor(legacy-account): move change_password local error to provider (no setState) 2026-04-26 21:52:56 +02:00
66a08c8016 refactor(legacy-settings): move language selection state to provider (no setState) 2026-04-26 21:52:56 +02:00
3449ff9afd refactor(legacy-settings): migrate language to AsyncNotifier 2026-04-26 21:52:56 +02:00
d4fbbb8d4b refactor(legacy-customer-service): migrate contact form to AsyncNotifier 2026-04-26 21:52:56 +02:00
3147566241 refactor(sf_shared): add help center URL to BrandLinks 2026-04-26 21:52:55 +02:00
f7e69b1184 refactor(sf_shared): move brand links to Firebase Remote Config 2026-04-26 21:52:55 +02:00
41324c61bd refactor(legacy-account): use .select for AsyncValue field reads 2026-04-26 21:52:55 +02:00
b8bf71fbe3 refactor(legacy-account): migrate account_settings to AsyncNotifier 2026-04-26 21:52:55 +02:00
6d49e604be refactor(legacy-account): migrate delete_account to AsyncNotifier + fix A1 2026-04-26 21:52:55 +02:00
21dcafec26 refactor(legacy-account): migrate linked_devices to AsyncNotifier 2026-04-26 21:52:55 +02:00
8e8243345a fix(sf_shared): distinguish 401 vs 403 error UX 2026-04-26 21:52:55 +02:00
fe38e477e3 refactor(legacy-account): migrate personal_data to AsyncNotifier 2026-04-26 21:52:54 +02:00
db47543252 fix(legacy-account): show success dialog after password change 2026-04-26 21:52:54 +02:00
caf77b1fd9 refactor(legacy-account): migrate change_password to AsyncNotifier 2026-04-26 21:52:54 +02:00
dcc786d376 refactor(legacy-account): migrate app_users to FutureProvider 2026-04-26 21:52:54 +02:00
8cd01c6f3b feat(sf_tracking): consent-aware crashlytics wrapper 2026-04-26 21:52:54 +02:00
1c98c0842d feat(sf_shared): add FailureType + handleFailure + feedback dialogs 2026-04-26 21:52:54 +02:00
59cced7b17 chore(legacy): add test infrastructure + mocktail 2026-04-26 21:52:54 +02:00
4e14534b1b fix 2026-04-26 21:52:54 +02:00
72d0c79c74 Revert "docs: add snackbar messages reference in Spanish"
This reverts commit 7ea415cb6e.
2026-04-26 21:52:53 +02:00
5b1826a10d docs: add snackbar messages reference in Spanish 2026-04-26 21:52:53 +02:00
039f2bb051 chore(i18n): add missing translation keys and device debug logging 2026-04-26 21:52:53 +02:00
9d6953dbf5 feat(wifi): enable wifi settings entry point and add debug logging 2026-04-26 21:52:53 +02:00
90048ac159 fix(sos-contacts): prevent deleting last emergency contact 2026-04-26 21:52:53 +02:00
982dee6c7a feat(block-phone): add edit contact functionality 2026-04-26 21:52:53 +02:00
09897b7f69 fix(location): add sharePositionOrigin for iPad share 2026-04-26 21:52:53 +02:00
09a625530e fix(control-panel): match dropdown value by device id to prevent crash 2026-04-26 21:52:53 +02:00
c60761adab fix(do-not-disturb): return empty schedule on 404 instead of error 2026-04-26 21:52:53 +02:00
6694a4b0ce fix(personal-data): send all required fields in PUT and autofill form 2026-04-26 21:52:53 +02:00
850796e1ca fix(rewards): send rewards key instead of amount in command data 2026-04-26 21:52:52 +02:00
051424f58b fix(volume): use capabilities max per slider and fix 0-10 scale 2026-04-26 21:52:52 +02:00
ac986ac360 feat(capabilities): add volume limits (media, ringtone, alarm) 2026-04-26 21:52:52 +02:00
cf86570e4c feat(settings): add falldown, falldownLevel and rename gps to location 2026-04-26 21:52:52 +02:00
e30f5dabcc fix(notifications): handle deep linking on cold start without crash 2026-04-26 21:52:52 +02:00
79039b99e2 refactor(legacy): align with Riverpod architecture (DTOs, repos, drop UseCases) 2026-04-26 21:52:52 +02:00
14720b66bf 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-26 21:52:51 +02:00