getSecurityStatusStream method
A stream that emits a map of all security statuses.
This combines the statuses of VPN, Debug Mode, and USB Connection into a single stream. It emits a new map whenever any of the individual statuses change. The map contains the boolean value for each SecurityStatus.
Implementation
Stream<Map<SecurityStatus, bool>> getSecurityStatusStream() {
late StreamController<Map<SecurityStatus, bool>> controller;
bool isVpn = false;
bool isDebug = false;
bool isUsb = false;
StreamSubscription<bool?>? vpnSub;
StreamSubscription<bool?>? debugSub;
StreamSubscription<bool?>? usbSub;
void emit() {
if (controller.isClosed) return;
controller.add({
SecurityStatus.vpnConnection: isVpn,
SecurityStatus.debugMode: isDebug,
SecurityStatus.usbConnection: isUsb,
});
}
controller = StreamController<Map<SecurityStatus, bool>>.broadcast(
onListen: () {
vpnSub = getVpnConnectionStatus().listen((status) {
isVpn = status ?? false;
emit();
});
debugSub = getDebugModeStatus().listen((status) {
isDebug = status ?? false;
emit();
});
usbSub = getUsbConnectedStatus().listen((status) {
isUsb = status ?? false;
emit();
});
},
onCancel: () {
vpnSub?.cancel();
debugSub?.cancel();
usbSub?.cancel();
},
);
return controller.stream;
}