Skip to content

Commit 8d66469

Browse files
authored
Deinitialize in onDetachedFromEngine on Android (#519)
* Deinitialize in onDetachedFromEngine on Android * Fixed crash with no devices connected Use current instance as method handler to prevent issues Fixed some typos
1 parent c9310ac commit 8d66469

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/PluginController.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ class PluginController {
7171
bleStatusChannel.setStreamHandler(bleStatusHandler)
7272
}
7373

74+
internal fun deinitialize() {
75+
scandevicesHandler.stopDeviceScan()
76+
deviceConnectionHandler.disconnectAll()
77+
}
78+
7479
internal fun execute(call: MethodCall, result: Result) {
7580
pluginMethods[call.method]?.invoke(call, result) ?: result.notImplemented()
7681
}
@@ -81,8 +86,7 @@ class PluginController {
8186
}
8287

8388
private fun deinitializeClient(call: MethodCall, result: Result) {
84-
scandevicesHandler.stopDeviceScan()
85-
deviceConnectionHandler.disconnectAll()
89+
deinitialize()
8690
result.success(null)
8791
}
8892

packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/ReactiveBlePlugin.kt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,32 @@ import io.flutter.plugin.common.MethodChannel.Result
99

1010
class ReactiveBlePlugin : FlutterPlugin, MethodChannel.MethodCallHandler {
1111
override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
12-
initalizePlugin(binding.binaryMessenger, binding.applicationContext)
12+
initializePlugin(binding.binaryMessenger, binding.applicationContext, this)
1313
}
1414

1515
override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
16-
// deinitalize logic
16+
deinitializePlugin()
1717
}
1818

1919
companion object {
2020
lateinit var pluginController: PluginController
21+
2122
@JvmStatic
22-
private fun initalizePlugin(messenger: BinaryMessenger, context: Context) {
23+
private fun initializePlugin(
24+
messenger: BinaryMessenger,
25+
context: Context,
26+
plugin: ReactiveBlePlugin
27+
) {
2328
val channel = MethodChannel(messenger, "flutter_reactive_ble_method")
24-
channel.setMethodCallHandler(ReactiveBlePlugin())
29+
channel.setMethodCallHandler(plugin)
2530
pluginController = PluginController()
2631
pluginController.initialize(messenger, context)
2732
}
33+
34+
@JvmStatic
35+
private fun deinitializePlugin() {
36+
pluginController.deinitialize()
37+
}
2838
}
2939

3040
override fun onMethodCall(call: MethodCall, result: Result) {

packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/ble/ReactiveBleClient.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ open class ReactiveBleClient(private val context: Context) : BleClient {
4545

4646
lateinit var rxBleClient: RxBleClient
4747
internal set
48-
internal lateinit var activeConnections: MutableMap<String, DeviceConnector>
48+
internal var activeConnections = mutableMapOf<String, DeviceConnector>()
4949
}
5050

5151
override val connectionUpdateSubject: BehaviorSubject<ConnectionUpdate>

0 commit comments

Comments
 (0)