From d618ed76d06c80661ad07587872ce79422354a42 Mon Sep 17 00:00:00 2001 From: JulianAlcala Date: Tue, 21 Apr 2026 17:59:39 +0200 Subject: [PATCH] feat(wifi): enable wifi settings entry point and add debug logging --- .../presentation/settings_screen.dart | 30 +++++++++---------- .../state/wifi_settings_view_model.dart | 23 ++++++++++++-- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/modules/legacy/modules/settings/lib/src/features/settings/presentation/settings_screen.dart b/modules/legacy/modules/settings/lib/src/features/settings/presentation/settings_screen.dart index 0baf5b63..b5040368 100644 --- a/modules/legacy/modules/settings/lib/src/features/settings/presentation/settings_screen.dart +++ b/modules/legacy/modules/settings/lib/src/features/settings/presentation/settings_screen.dart @@ -4,6 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:legacy_ui/legacy_ui.dart'; import 'package:navigation/navigation.dart'; import 'package:sf_localizations/sf_localizations.dart'; +import 'package:sf_shared/sf_shared.dart'; import 'package:utils/utils.dart'; class SettingsScreen extends ConsumerWidget { @@ -14,12 +15,11 @@ class SettingsScreen extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final color = context.sfColors.legacyPrimary; - // final hasWifi = ref.watch( - // selectedDeviceProvider.select((d) { - // final types = d.value?.capabilities?.commands; - // return types?.types.contains('WIFI_SEARCH') ?? false; - // }), - // ); + final hasWifi = ref.watch( + selectedDeviceProvider.select((d) { + return d.value?.capabilities?.wifi?.enabled ?? false; + }), + ); return LegacyPageLayout( title: context.translate(I18n.deviceSettingsTitle), @@ -113,15 +113,15 @@ class SettingsScreen extends ConsumerWidget { text: I18n.sound, color: color, ), - // if (hasWifi) - // _item( - // context, - // onPressed: () => - // navigationContract.pushTo(AppRoutes.wifiSettings), - // icon: Icons.wifi_find_outlined, - // text: I18n.wifiSettings, - // color: color, - // ), + if (hasWifi) + _item( + context, + onPressed: () => + navigationContract.pushTo(AppRoutes.wifiSettings), + icon: Icons.wifi_find_outlined, + text: I18n.wifiSettings, + color: color, + ), // _item( // context, // onPressed: () => diff --git a/modules/legacy/modules/settings/lib/src/features/wifi_settings/presentation/state/wifi_settings_view_model.dart b/modules/legacy/modules/settings/lib/src/features/wifi_settings/presentation/state/wifi_settings_view_model.dart index b78621d7..2b034111 100644 --- a/modules/legacy/modules/settings/lib/src/features/wifi_settings/presentation/state/wifi_settings_view_model.dart +++ b/modules/legacy/modules/settings/lib/src/features/wifi_settings/presentation/state/wifi_settings_view_model.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:flutter/foundation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:get_it/get_it.dart'; import 'package:legacy_device_state/legacy_device_state.dart'; @@ -54,6 +55,7 @@ class WifiSettingsViewModel extends Notifier { void _onWebSocketEvent(WebSocketEvent event) { switch (event) { case WifiEvent(): + debugPrint('[WiFi] WS received WIFI_CURRENT: ssid=${event.ssid} bssid=${event.bssid}'); _currentNetworkTimeout?.cancel(); final network = WifiNetworkEntity( id: '', @@ -67,6 +69,7 @@ class WifiSettingsViewModel extends Notifier { isLoadingCurrentNetwork: false, ); case WifiSearchEvent(): + debugPrint('[WiFi] WS received WIFI_SEARCH: ${event.wifis.length} networks'); _scanCountdown?.cancel(); final networks = event.wifis .map( @@ -95,10 +98,12 @@ class WifiSettingsViewModel extends Notifier { } try { + debugPrint('[WiFi] loading saved networks for $identificator'); final networks = await _repository.getWifiNetworks( deviceIdentificator: identificator, ); if (!ref.mounted) return; + debugPrint('[WiFi] loaded ${networks.length} saved networks'); state = state.copyWith( savedNetworks: networks, @@ -106,6 +111,7 @@ class WifiSettingsViewModel extends Notifier { isLoadingCurrentNetwork: true, ); + debugPrint('[WiFi] sending WIFI_CURRENT command'); unawaited( _commands .send( @@ -115,6 +121,7 @@ class WifiSettingsViewModel extends Notifier { ), ) .catchError((_) { + debugPrint('[WiFi] WIFI_CURRENT command failed'); if (ref.mounted) { state = state.copyWith(isLoadingCurrentNetwork: false); } @@ -148,12 +155,14 @@ class WifiSettingsViewModel extends Notifier { ); try { + debugPrint('[WiFi] sending WIFI_SEARCH command'); await _commands.send( request: SendCommandRequestModel( device: identificator, command: DeviceCommand.wifiSearch, ), ); + debugPrint('[WiFi] WIFI_SEARCH sent, waiting for WS response (${_scanDurationSeconds}s timeout)'); _scanCountdown?.cancel(); @@ -198,6 +207,7 @@ class WifiSettingsViewModel extends Notifier { state = state.copyWith(isConnecting: true, error: null, success: null); try { + debugPrint('[WiFi] connecting to $ssid ($bssid)'); await _commands.send( request: SendCommandRequestModel( device: identificator, @@ -205,6 +215,7 @@ class WifiSettingsViewModel extends Notifier { data: {'ssid': ssid, 'bssid': bssid, 'password': password}, ), ); + debugPrint('[WiFi] SET_WIFI sent, saving network'); final id = const Uuid().v4(); await _repository.createWifiNetwork( @@ -221,6 +232,7 @@ class WifiSettingsViewModel extends Notifier { ); if (!ref.mounted) return; + debugPrint('[WiFi] network saved, total: ${networks.length}'); unawaited(_tracking.legacySettingsWifiAdded(totalCount: networks.length)); state = state.copyWith( @@ -228,7 +240,8 @@ class WifiSettingsViewModel extends Notifier { isConnecting: false, success: WifiSettingsSuccess.networkSaved, ); - } catch (_) { + } catch (e) { + debugPrint('[WiFi] connectAndSave failed: $e'); if (!ref.mounted) return; state = state.copyWith( isConnecting: false, @@ -244,6 +257,7 @@ class WifiSettingsViewModel extends Notifier { state = state.copyWith(isSaving: true, error: null, success: null); try { + debugPrint('[WiFi] deleting network $networkId'); await _repository.deleteWifiNetwork(networkId: networkId); if (!ref.mounted) return; @@ -252,6 +266,7 @@ class WifiSettingsViewModel extends Notifier { ); if (!ref.mounted) return; + debugPrint('[WiFi] network deleted, remaining: ${networks.length}'); unawaited( _tracking.legacySettingsWifiRemoved(totalCount: networks.length), ); @@ -261,7 +276,8 @@ class WifiSettingsViewModel extends Notifier { isSaving: false, success: WifiSettingsSuccess.networkDeleted, ); - } catch (_) { + } catch (e) { + debugPrint('[WiFi] delete failed: $e'); if (!ref.mounted) return; state = state.copyWith( isSaving: false, @@ -277,6 +293,7 @@ class WifiSettingsViewModel extends Notifier { state = state.copyWith(isConnecting: true, error: null, success: null); try { + debugPrint('[WiFi] setting saved network: ${network.ssid} (${network.bssid})'); await _commands.send( request: SendCommandRequestModel( device: identificator, @@ -289,6 +306,7 @@ class WifiSettingsViewModel extends Notifier { ), ); if (!ref.mounted) return; + debugPrint('[WiFi] SET_WIFI sent, requesting WIFI_CURRENT'); state = state.copyWith( isConnecting: false, @@ -305,6 +323,7 @@ class WifiSettingsViewModel extends Notifier { ), ) .catchError((_) { + debugPrint('[WiFi] WIFI_CURRENT after set failed'); if (ref.mounted) { state = state.copyWith(isLoadingCurrentNetwork: false); }