UI improvements for telemetry debugging

This commit is contained in:
Constantin Leue
2026-08-02 20:21:21 +02:00
parent 6cfb82bd77
commit f42d997d4c
7 changed files with 272 additions and 190 deletions
@@ -71,6 +71,9 @@ class MlrsNetworkPlugin(
private var networkCallback: ConnectivityManager.NetworkCallback? = null
private var currentNetwork: Network? = null
/** Zuletzt an Dart gemeldete SSID der aktuellen Anfrage (siehe onCapabilitiesChanged unten) - vermeidet doppelte "ssid"-Ereignisse. */
private var reportedSsid: String? = null
private var socket: DatagramSocket? = null
@Volatile
private var receiveLoopRunning = false
@@ -160,16 +163,35 @@ class MlrsNetworkPlugin(
.setNetworkSpecifier(specifier)
.build()
reportedSsid = null
val callback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
currentNetwork = network
val gateway = gatewayAddressOf(connectivityManager.getLinkProperties(network))
val ssid = ssidOf(connectivityManager.getNetworkCapabilities(network))
if (ssid != null) reportedSsid = ssid
eventSink?.success(
mapOf("type" to "available", "gatewayAddress" to gateway, "ssid" to ssid),
)
}
// WifiInfo/SSID ist bei onAvailable() oft noch nicht befuellt -
// Android liefert `NetworkCapabilities.getTransportInfo()` fuer
// WifiNetworkSpecifier-Netze haeufig erst mit einem spaeteren
// onCapabilitiesChanged()-Aufruf (bekannter Android-Stolperstein).
// Deshalb hier zusaetzlich pruefen und die SSID nachreichen,
// sobald sie bekannt wird.
override fun onCapabilitiesChanged(
network: Network,
networkCapabilities: NetworkCapabilities,
) {
if (network != currentNetwork) return
val ssid = ssidOf(networkCapabilities) ?: return
if (ssid == reportedSsid) return
reportedSsid = ssid
eventSink?.success(mapOf("type" to "ssid", "ssid" to ssid))
}
override fun onUnavailable() {
currentNetwork = null
eventSink?.success(mapOf("type" to "unavailable"))
@@ -177,6 +199,7 @@ class MlrsNetworkPlugin(
override fun onLost(network: Network) {
currentNetwork = null
reportedSsid = null
eventSink?.success(mapOf("type" to "lost"))
}
}