From c4b6390a5e649989836e79567cdf24a20cffd9b6 Mon Sep 17 00:00:00 2001 From: Lance Chant <13349722+lancechant@users.noreply.github.com> Date: Wed, 15 Jul 2026 08:29:18 +0200 Subject: [PATCH] Addressing PR comments Signed-off-by: Lance Chant <13349722+lancechant@users.noreply.github.com> --- .../expo/modules/wifissid/WifiSsidModule.kt | 18 ++++++++++-- modules/wifi-ssid/ios/WifiSsidModule.swift | 4 +++ providers/ServerUrlProvider.tsx | 28 +++++++++++++------ providers/WifiSsidProvider.tsx | 22 +++++++++------ 4 files changed, 51 insertions(+), 21 deletions(-) diff --git a/modules/wifi-ssid/android/src/main/java/expo/modules/wifissid/WifiSsidModule.kt b/modules/wifi-ssid/android/src/main/java/expo/modules/wifissid/WifiSsidModule.kt index 82a0f7640..c9b444616 100644 --- a/modules/wifi-ssid/android/src/main/java/expo/modules/wifissid/WifiSsidModule.kt +++ b/modules/wifi-ssid/android/src/main/java/expo/modules/wifissid/WifiSsidModule.kt @@ -55,13 +55,13 @@ class WifiSsidModule : Module() { * location-sensitive). */ private fun readWifi(): Pair { - val appContext = context.applicationContext + val androidContext = context.applicationContext var connectedToWifi = false var ssid: String? = null if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { try { - val cm = appContext.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager + val cm = androidContext.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager val caps = cm?.let { manager -> manager.activeNetwork?.let { net -> manager.getNetworkCapabilities(net) } } @@ -72,11 +72,23 @@ class WifiSsidModule : Module() { } catch (e: Exception) { Log.e(TAG, "Error reading Wi-Fi via ConnectivityManager", e) } + } else { + // Pre-Q (API 26–28): NetworkCapabilities/transportInfo aren't available, so + // detect a Wi-Fi connection via the legacy active-network API. Without this, + // connectedToWifi stays false on Android 8/9 even when connected, so the + // "connected but SSID hidden" state never surfaces there. + try { + val cm = androidContext.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager + @Suppress("DEPRECATION") + connectedToWifi = cm?.activeNetworkInfo?.type == ConnectivityManager.TYPE_WIFI + } catch (e: Exception) { + Log.e(TAG, "Error reading Wi-Fi via ConnectivityManager (legacy)", e) + } } if (ssid == null && hasFineLocationPermission()) { try { - val wm = appContext.getSystemService(Context.WIFI_SERVICE) as? WifiManager + val wm = androidContext.getSystemService(Context.WIFI_SERVICE) as? WifiManager @Suppress("DEPRECATION") ssid = wm?.connectionInfo?.ssid?.sanitize() } catch (e: Exception) { diff --git a/modules/wifi-ssid/ios/WifiSsidModule.swift b/modules/wifi-ssid/ios/WifiSsidModule.swift index 9029c9290..a49607e4c 100644 --- a/modules/wifi-ssid/ios/WifiSsidModule.swift +++ b/modules/wifi-ssid/ios/WifiSsidModule.swift @@ -41,6 +41,10 @@ public class WifiSsidModule: Module { } pathMonitor.start(queue: monitorQueue) } + + deinit { + pathMonitor.cancel() + } #endif public func definition() -> ModuleDefinition { diff --git a/providers/ServerUrlProvider.tsx b/providers/ServerUrlProvider.tsx index e5a49801c..fc282994c 100644 --- a/providers/ServerUrlProvider.tsx +++ b/providers/ServerUrlProvider.tsx @@ -6,6 +6,7 @@ import { useCallback, useContext, useEffect, + useMemo, useRef, useState, } from "react"; @@ -102,16 +103,25 @@ export function ServerUrlProvider({ children }: Props): React.ReactElement { }; }, [ssid, permissionStatus, evaluateAndSwitchUrl]); + const value = useMemo( + () => ({ + effectiveServerUrl, + isUsingLocalUrl, + currentSSID: ssid, + connectedToWifi, + refreshUrlState, + }), + [ + effectiveServerUrl, + isUsingLocalUrl, + ssid, + connectedToWifi, + refreshUrlState, + ], + ); + return ( - + {children} ); diff --git a/providers/WifiSsidProvider.tsx b/providers/WifiSsidProvider.tsx index 4dcfca3e3..59dd0ec91 100644 --- a/providers/WifiSsidProvider.tsx +++ b/providers/WifiSsidProvider.tsx @@ -5,6 +5,7 @@ import { useCallback, useContext, useEffect, + useMemo, useState, } from "react"; import { Platform } from "react-native"; @@ -129,16 +130,19 @@ export function WifiSsidProvider({ children }: Props): React.ReactElement { return () => clearInterval(interval); }, [permissionStatus, fetchSSID]); + const value = useMemo( + () => ({ + ssid, + connectedToWifi, + permissionStatus, + requestPermission, + isLoading, + }), + [ssid, connectedToWifi, permissionStatus, requestPermission, isLoading], + ); + return ( - + {children} );