autoconnect on fly mode (does not work yet)

This commit is contained in:
Constantin Leue
2026-08-02 08:25:23 +02:00
parent 5e9ef43f2f
commit 607dbb6584
13 changed files with 430 additions and 29 deletions
@@ -6,14 +6,19 @@ sealed class MlrsNetworkEvent {
const MlrsNetworkEvent();
}
/// Das Netz ist verfuegbar (Nutzer hat den Systemdialog bestaetigt).
/// Das Netz ist verfuegbar (Nutzer hat den Systemdialog bestaetigt, oder
/// Android hat eine zuvor bewilligte exakte SSID still erneut verbunden).
/// [gatewayAddress] ist die Gateway-Adresse des Netzes, falls ermittelbar -
/// dient als Vorbelegung der Zieladresse, bevor eine Gegenstelle aus dem
/// Verkehr gelernt wurde (Doku Abschnitt 3).
/// Verkehr gelernt wurde (Doku Abschnitt 3). [ssid] ist die tatsaechliche
/// SSID des verbundenen Netzes, falls ermittelbar - wird gemerkt, damit
/// kuenftige Verbindungen exakt (statt per Praefix) angefragt werden koennen
/// (siehe [MlrsNetworkController.requestNetwork]).
class MlrsNetworkAvailable extends MlrsNetworkEvent {
const MlrsNetworkAvailable({this.gatewayAddress});
const MlrsNetworkAvailable({this.gatewayAddress, this.ssid});
final String? gatewayAddress;
final String? ssid;
}
/// Die Anfrage konnte nicht erfuellt werden (Nutzer hat den Systemdialog
@@ -79,9 +84,13 @@ abstract class MlrsNetworkController {
Stream<MlrsNetworkEvent> get events;
/// Loest `ConnectivityManager.requestNetwork()` mit einem
/// `WifiNetworkSpecifier` aus, dessen SSID-Muster auf [ssidPrefix] passt.
/// `WifiNetworkSpecifier` aus. Ist [preferredSsid] gesetzt (zuvor
/// erfolgreich verbundene, gemerkte SSID), wird exakt danach gefragt -
/// Android kann das dann ohne erneuten Systemdialog automatisch bewilligen
/// (Doku Abschnitt 8: "Verbindung automatisch herstellen"). Sonst wird
/// [ssidPrefix] als Praefix-Muster verwendet (zeigt immer den Dialog).
/// Das Ergebnis kommt asynchron ueber [events] (available/unavailable).
Future<void> requestNetwork(String ssidPrefix);
Future<void> requestNetwork(String ssidPrefix, {String? preferredSsid});
/// Meldet den Callback ab und geht damit von der aktuellen Anfrage
/// zurueck - keine weiteren [events] danach, bis erneut angefragt wird.
@@ -139,6 +148,7 @@ class MethodChannelMlrsNetworkController implements MlrsNetworkController {
return switch (map['type']) {
'available' => MlrsNetworkAvailable(
gatewayAddress: map['gatewayAddress'] as String?,
ssid: map['ssid'] as String?,
),
'lost' => const MlrsNetworkLost(),
_ => const MlrsNetworkUnavailable(),
@@ -155,8 +165,11 @@ class MethodChannelMlrsNetworkController implements MlrsNetworkController {
}
@override
Future<void> requestNetwork(String ssidPrefix) => _methodChannel
.invokeMethod('requestNetwork', {'ssidPrefix': ssidPrefix});
Future<void> requestNetwork(String ssidPrefix, {String? preferredSsid}) =>
_methodChannel.invokeMethod('requestNetwork', {
'ssidPrefix': ssidPrefix,
'exactSsid': preferredSsid,
});
@override
Future<void> releaseNetwork() => _methodChannel.invokeMethod('releaseNetwork');