diff --git a/lib/connector/meshcore_connector.dart b/lib/connector/meshcore_connector.dart index 0c58436..d4a183a 100644 --- a/lib/connector/meshcore_connector.dart +++ b/lib/connector/meshcore_connector.dart @@ -906,10 +906,7 @@ class MeshCoreConnector extends ChangeNotifier { try { await _usbFrameSubscription?.cancel(); _usbFrameSubscription = null; - _appDebugLogService?.info( - 'connectUsb: opening serial port…', - tag: 'USB', - ); + _appDebugLogService?.info('connectUsb: opening serial port…', tag: 'USB'); await _usbManager.connect(portName: portName, baudRate: baudRate); _appDebugLogService?.info( 'connectUsb: serial port opened, label=${_usbManager.activePortDisplayLabel}', diff --git a/lib/connector/meshcore_connector_usb.dart b/lib/connector/meshcore_connector_usb.dart index a0f70d5..376ae1a 100644 --- a/lib/connector/meshcore_connector_usb.dart +++ b/lib/connector/meshcore_connector_usb.dart @@ -24,8 +24,7 @@ class MeshCoreUsbManager { // --- Configuration --- Future> listPorts() => _service.listPorts(); - void setRequestPortLabel(String label) => - _service.setRequestPortLabel(label); + void setRequestPortLabel(String label) => _service.setRequestPortLabel(label); void setFallbackDeviceName(String label) => _service.setFallbackDeviceName(label); @@ -36,7 +35,10 @@ class MeshCoreUsbManager { } // --- Connection lifecycle --- - Future connect({required String portName, int baudRate = 115200}) async { + Future connect({ + required String portName, + int baudRate = 115200, + }) async { _debugLog?.info( 'UsbManager.connect: portName=$portName baud=$baudRate', tag: 'USB', diff --git a/lib/screens/usb_screen.dart b/lib/screens/usb_screen.dart index c78e0c1..e230a54 100644 --- a/lib/screens/usb_screen.dart +++ b/lib/screens/usb_screen.dart @@ -107,7 +107,8 @@ class _UsbScreenState extends State { bottomNavigationBar: Consumer( builder: (context, connector, child) { final isLoading = _isLoadingPorts; - final showBle = PlatformInfo.isWeb || + final showBle = + PlatformInfo.isWeb || PlatformInfo.isAndroid || PlatformInfo.isIOS; @@ -238,7 +239,7 @@ class _UsbScreenState extends State { final isConnecting = connector.state == MeshCoreConnectionState.connecting && - connector.activeTransport == MeshCoreTransportType.usb; + connector.activeTransport == MeshCoreTransportType.usb; return ListView.separated( padding: const EdgeInsets.all(8), @@ -259,8 +260,7 @@ class _UsbScreenState extends State { ), subtitle: showRawName ? Text(rawName) : null, trailing: ElevatedButton( - onPressed: - isConnecting ? null : () => _connectPort(port), + onPressed: isConnecting ? null : () => _connectPort(port), child: Text(l10n.common_connect), ), onTap: isConnecting ? null : () => _connectPort(port), @@ -329,8 +329,10 @@ class _UsbScreenState extends State { if (_connector.state != MeshCoreConnectionState.disconnected) return; final rawPortName = normalizeUsbPortName(port); - appLogger.info('Connect tapped for $port (raw: $rawPortName)', - tag: 'UsbScreen'); + appLogger.info( + 'Connect tapped for $port (raw: $rawPortName)', + tag: 'UsbScreen', + ); try { await _connector.connectUsb(portName: rawPortName); diff --git a/lib/services/notification_service.dart b/lib/services/notification_service.dart index 7295376..95326d2 100644 --- a/lib/services/notification_service.dart +++ b/lib/services/notification_service.dart @@ -101,8 +101,7 @@ class NotificationService { final addr = Platform.environment['DBUS_SESSION_BUS_ADDRESS']; if (addr != null && addr.isNotEmpty) return true; // Fallback: check the default socket for the current user. - final uid = Platform.environment['UID'] ?? - Platform.environment['EUID']; + final uid = Platform.environment['UID'] ?? Platform.environment['EUID']; final path = '/run/user/${uid ?? '1000'}/bus'; return File(path).existsSync(); } diff --git a/lib/services/usb_serial_service_web.dart b/lib/services/usb_serial_service_web.dart index 86f0b1e..4c83d7d 100644 --- a/lib/services/usb_serial_service_web.dart +++ b/lib/services/usb_serial_service_web.dart @@ -118,10 +118,7 @@ class UsbSerialService { tag: 'USB Serial', ); } catch (error) { - _debugLogService?.error( - 'Web connect failed: $error', - tag: 'USB Serial', - ); + _debugLogService?.error('Web connect failed: $error', tag: 'USB Serial'); await _cleanupFailedConnect(); _status = UsbSerialStatus.disconnected; _connectedPortName = null; @@ -374,10 +371,7 @@ class UsbSerialService { } } } catch (error, stackTrace) { - _debugLogService?.error( - '_pumpReads error: $error', - tag: 'USB Serial', - ); + _debugLogService?.error('_pumpReads error: $error', tag: 'USB Serial'); if (_status == UsbSerialStatus.connected) { _addFrameError(error, stackTrace); } diff --git a/test/screens/usb_flow_test.dart b/test/screens/usb_flow_test.dart index 1d8b504..436d230 100644 --- a/test/screens/usb_flow_test.dart +++ b/test/screens/usb_flow_test.dart @@ -116,10 +116,12 @@ void main() { ); await tester.pumpAndSettle(); - await tester.tap(find.ancestor( - of: find.text('Connect'), - matching: find.bySubtype(), - )); + await tester.tap( + find.ancestor( + of: find.text('Connect'), + matching: find.bySubtype(), + ), + ); await tester.pump(); expect(connector.connectUsbCalls, 0); @@ -131,28 +133,29 @@ void main() { }, ); - testWidgets( - 'UsbScreen sends raw port name when tapping Connect', - (tester) async { - final connector = _FakeMeshCoreConnector( - ports: ['COM6 - USB Serial Device (COM6)'], - ); + testWidgets('UsbScreen sends raw port name when tapping Connect', ( + tester, + ) async { + final connector = _FakeMeshCoreConnector( + ports: ['COM6 - USB Serial Device (COM6)'], + ); - await tester.pumpWidget( - _buildTestApp(connector: connector, child: const UsbScreen()), - ); - await tester.pumpAndSettle(); + await tester.pumpWidget( + _buildTestApp(connector: connector, child: const UsbScreen()), + ); + await tester.pumpAndSettle(); - await tester.tap(find.ancestor( - of: find.text('Connect'), - matching: find.bySubtype(), - )); - await tester.pump(); + await tester.tap( + find.ancestor( + of: find.text('Connect'), + matching: find.bySubtype(), + ), + ); + await tester.pump(); - expect(connector.connectUsbCalls, 1); - expect(connector.lastConnectPortName, 'COM6'); - }, - ); + expect(connector.connectUsbCalls, 1); + expect(connector.lastConnectPortName, 'COM6'); + }); testWidgets('ScannerScreen USB action reflects platform support', ( tester, @@ -177,8 +180,9 @@ void main() { }); group('Error Handling', () { - testWidgets('shows error SnackBar when listing ports fails', - (tester) async { + testWidgets('shows error SnackBar when listing ports fails', ( + tester, + ) async { final connector = _FakeMeshCoreConnector(); connector.listUsbPortsImpl = () async { throw PlatformException( @@ -195,9 +199,7 @@ void main() { expect(find.text('USB permission was denied.'), findsOneWidget); }); - testWidgets('connection failure shows SnackBar error', ( - tester, - ) async { + testWidgets('connection failure shows SnackBar error', (tester) async { final connector = _FakeMeshCoreConnector(ports: ['COM1']); var connectAttempted = false; connector.connectUsbImpl = ({required String portName}) async { @@ -210,10 +212,12 @@ void main() { ); await tester.pumpAndSettle(); - await tester.tap(find.ancestor( - of: find.text('Connect'), - matching: find.bySubtype(), - )); + await tester.tap( + find.ancestor( + of: find.text('Connect'), + matching: find.bySubtype(), + ), + ); await tester.pumpAndSettle(); expect(connectAttempted, isTrue);