feat(android): stream the connection info

This commit is contained in:
ksenia312
2024-02-04 17:11:25 +01:00
parent 66a79eb4ba
commit 90c2908496
7 changed files with 94 additions and 20 deletions
@@ -289,4 +289,28 @@ class NearbyServiceManager(private var context: Context) {
handler.removeCallbacks(postCallback)
}
}
var connectionInfoHandler = object : EventChannel.StreamHandler {
private var handler: Handler = Handler(Looper.getMainLooper())
private var eventSink: EventChannel.EventSink? = null
val postCallback = object : Runnable {
override fun run() {
handler.post { eventSink?.success(receiver.wifiInfo?.toJsonString()) }
handler.postDelayed(this, 1000)
}
}
override fun onListen(arguments: Any?, sink: EventChannel.EventSink?) {
onCancel(null)
eventSink = sink
Logger.d("Listen connection info")
handler.postDelayed(postCallback, 1000)
}
override fun onCancel(p0: Any?) {
Logger.d("Kill last process connection info")
eventSink = null
handler.removeCallbacks(postCallback)
}
}
}
@@ -17,6 +17,7 @@ import kotlinx.coroutines.launch
const val CHANNEL_NAME = "nearby_service"
const val PEERS_CHANNEL_NAME = "nearby_service_peers"
const val CONNECTED_DEVICE_CHANNEL_NAME = "nearby_service_connected_device"
const val CONNECTION_INFO_CHANNEL_NAME = "nearby_service_connection_info"
/**
* Plugin for creating connections in the Wi-fi Direct scope.
@@ -27,6 +28,7 @@ class NearbyServicePlugin : FlutterPlugin, MethodCallHandler, ActivityAware {
private lateinit var manager: NearbyServiceManager
private lateinit var peersChannel: EventChannel
private lateinit var connectedDeviceChannel: EventChannel
private lateinit var connectionInfoChannel: EventChannel
@OptIn(DelicateCoroutinesApi::class)
@@ -157,6 +159,9 @@ class NearbyServicePlugin : FlutterPlugin, MethodCallHandler, ActivityAware {
connectedDeviceChannel = EventChannel(binaryMessenger, CONNECTED_DEVICE_CHANNEL_NAME)
connectedDeviceChannel.setStreamHandler(manager.connectedDeviceInfoHandler)
connectionInfoChannel = EventChannel(binaryMessenger, CONNECTION_INFO_CHANNEL_NAME)
connectionInfoChannel.setStreamHandler(manager.connectionInfoHandler)
}