Drop SSID display from settings, connection pill shows generic "Connected"
Real hardware testing (Pixel 10a) showed NetworkCapabilities.getTransportInfo() consistently returns a redacted WifiInfo (SSID "<unknown ssid>", masked BSSID) even for the app's own self-requested WifiNetworkSpecifier network, disproving this codebase's prior assumption of a self-request exemption from ACCESS_FINE_LOCATION for that API path (confirmed via native diagnostic logging cross-checked against `adb shell dumpsys wifi`, which does show and correctly attribute the true SSID at the OS level). Rather than add a location permission with a runtime prompt purely for this cosmetic display, the settings pill now just shows "Connected". Documented as decision 4.24.
This commit is contained in:
@@ -171,7 +171,8 @@ class MlrsNetworkPlugin(
|
||||
val linkProperties = connectivityManager.getLinkProperties(network)
|
||||
val gateway = gatewayAddressOf(linkProperties)
|
||||
val broadcast = broadcastAddressOf(linkProperties)
|
||||
val ssid = ssidOf(connectivityManager.getNetworkCapabilities(network))
|
||||
val capabilities = connectivityManager.getNetworkCapabilities(network)
|
||||
val ssid = ssidOf(capabilities)
|
||||
if (ssid != null) reportedSsid = ssid
|
||||
eventSink?.success(
|
||||
mapOf(
|
||||
@@ -260,10 +261,21 @@ class MlrsNetworkPlugin(
|
||||
}
|
||||
|
||||
/**
|
||||
* Ermittelt die tatsaechliche SSID des verbundenen Netzes. Erfordert
|
||||
* normalerweise ACCESS_FINE_LOCATION, ausser fuer die anfragende App
|
||||
* selbst bei einem ueber WifiNetworkSpecifier bewilligten Netz - genau
|
||||
* unser Fall, siehe `WifiInfo.getSSID()`-Dokumentation.
|
||||
* Ermittelt die tatsaechliche SSID des verbundenen Netzes - liefert auf
|
||||
* echter Hardware (getestet: Pixel-Geraet, Android 16) zuverlaessig
|
||||
* `null`, da `NetworkCapabilities.getTransportInfo()` ohne
|
||||
* ACCESS_FINE_LOCATION konsequent ein redigiertes `WifiInfo` liefert
|
||||
* (SSID `<unknown ssid>`, BSSID maskiert), auch fuer ein selbst per
|
||||
* WifiNetworkSpecifier angefragtes/bewilligtes Netz. Mit
|
||||
* `dumpsys wifi` (Shell-Kontext, volle Rechte) bestaetigt: das System
|
||||
* kennt die echte SSID und ordnet sie korrekt dieser App zu
|
||||
* (`Requesting package name`) - die dokumentierte Ausnahme "kein
|
||||
* ACCESS_FINE_LOCATION noetig fuer selbst angefragte Netze" gilt in der
|
||||
* Praxis offenbar nur fuer `WifiManager.getConnectionInfo()`, nicht fuer
|
||||
* diesen `NetworkCapabilities`-Weg ueber `ConnectivityManager.
|
||||
* NetworkCallback`. ACCESS_FINE_LOCATION bewusst NICHT hinzugefuegt nur
|
||||
* fuer diese kosmetische Anzeige (Nutzerentscheidung) - der Aufrufer
|
||||
* (UdpTransport) behandelt ein dauerhaftes `null` hier als Normalfall.
|
||||
*/
|
||||
private fun ssidOf(capabilities: NetworkCapabilities?): String? {
|
||||
val wifiInfo = capabilities?.transportInfo as? WifiInfo ?: return null
|
||||
|
||||
Reference in New Issue
Block a user