- Add clearLogs method to BridgeModule with proper coroutine scope
- Fix fetchLogs and clearLogs using Thread+runBlocking which caused app close
- Change serviceScope from Dispatchers.Main to Dispatchers.IO
- Add error logging in fetchLogs for better diagnostics
- Add clear logs button with confirmation dialog in StatusScreen
- Add url_launcher dependency
- Add Android queries element for https scheme visibility
- Add triple-tap detection on Settings AppBar title
- Simplify to direct URL launch (no animation)
- Update Android package namespace and applicationId to dev.fiatcode.tracpulse
- Update AndroidManifest.xml package and app label to TracPulse
- Move all Kotlin source files to dev/fiatcode/tracpulse/ package
- Update pubspec.yaml name to tracpulse
- Update all Dart imports from package:traccar_client to relative
- Rename TraccarClientApp class to TracPulseApp
- Update user-facing strings in permission_screen to TracPulse
- Update notification channel label and wakeLock tag to TracPulse
- Send config to native before starting tracking (SharedPreferences sync)
- Register ConnectivityReceiver for network state detection
- Fix Settings number fields using TextEditingControllers
- Cancel stream subscription on widget dispose (memory leak)
- Replace WorkManager with AlarmManager for heartbeat
- Add log cleanup for logs older than 24 hours
- Change HTTP method from GET to POST
These fixes resolve the 'device always offline' issue where:
1. Config was not being sent to native service
2. ConnectivityReceiver was never registered
3. Settings number fields were not saving
4. Heartbeat never fired due to WorkManager process isolation
5. Server expected POST not GET
The onHeartbeat callback passed to scheduleHeartbeat() was never invoked because HeartbeatWorker.doWork() returned success without calling it.
Fix: Store callback in companion object and invoke it when worker runs.