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