using FieldLogger.Services; using FieldLogger.Services.Sync; namespace FieldLogger; public partial class App : Application { private readonly DeviceConnectionManager _connectionManager; private readonly IMqttSyncService _syncService; public App(DeviceConnectionManager connectionManager, IMqttSyncService syncService) { InitializeComponent(); _connectionManager = connectionManager; _syncService = syncService; Console.WriteLine("===== UM TRACE APP STARTING ====="); Console.WriteLine($"Console output is working! Time: {DateTime.Now:HH:mm:ss}"); // Root navigation now opens on Jobs, so connection recovery must not depend on // the former Home page appearing first. _connectionManager.Start(); } protected override Window CreateWindow(IActivationState? activationState) { var window = new Window(new AppShell()); // Disconnect BLE devices when window is closing window.Destroying += async (s, e) => { Console.WriteLine("App: Window closing, disconnecting devices..."); await DisconnectAllDevicesAsync(); await _syncService.StopAsync(); }; return window; } private async Task DisconnectAllDevicesAsync() { try { // Disconnect locator if (_connectionManager.Locator.IsConnected) { Console.WriteLine("App: Disconnecting locator..."); await _connectionManager.Locator.DisconnectAsync(); } // Disconnect GPS if (_connectionManager.Gps.IsConnected) { Console.WriteLine("App: Disconnecting GPS..."); await _connectionManager.Gps.DisconnectAsync(); } Console.WriteLine("App: All devices disconnected"); } catch (Exception ex) { Console.WriteLine($"App: Error disconnecting devices: {ex.Message}"); } } }