Skip to content

Commit e60c2b4

Browse files
Merge remote-tracking branch 'origin/develop' into develop
2 parents 04f8d8a + b56a63a commit e60c2b4

File tree

1 file changed

+41
-13
lines changed

1 file changed

+41
-13
lines changed

android/src/main/kotlin/dev/steenbakker/flutter_ble_peripheral/FlutterBlePeripheralPlugin.kt

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,11 @@ class FlutterBlePeripheralPlugin : FlutterPlugin, MethodChannel.MethodCallHandle
138138
private fun enableBluetooth(call: MethodCall, result: MethodChannel.Result) {
139139
if (activityBinding != null) {
140140
val isEnabled = flutterBlePeripheralManager!!.checkAndEnableBluetooth(call.arguments as Boolean, result, activityBinding!!)
141-
result.success(isEnabled)
141+
// if the bluetooth is already enabled, respond immediately
142+
// If not, Activity Result will respond later
143+
if (isEnabled) {
144+
result.success(true)
145+
}
142146
} else {
143147
result.error("No activity", "FlutterBlePeripheral is not correctly initialized", "null")
144148
}
@@ -372,21 +376,45 @@ class FlutterBlePeripheralPlugin : FlutterPlugin, MethodChannel.MethodCallHandle
372376
binding.addActivityResultListener { requestCode, resultCode, _ ->
373377
when (requestCode) {
374378
FlutterBlePeripheralManager.REQUEST_ENABLE_BT -> {
375-
if (flutterBlePeripheralManager?.pendingResultForActivityResult != null) {
376-
startStopCall = null
377-
flutterBlePeripheralManager!!.pendingResultForActivityResult!!.success(resultCode == Activity.RESULT_OK)
378-
} else if (flutterBlePeripheralManager?.pendingResultForPermissionResult != null) {
379-
if (resultCode == Activity.RESULT_OK) {
380-
if (startStopCall != null) {
381-
onMethodCall(startStopCall!!, flutterBlePeripheralManager!!.pendingResultForPermissionResult!!)
382-
startStopCall = null
383-
flutterBlePeripheralManager?.pendingResultForPermissionResult = null
379+
try {
380+
// Handle direct Bluetooth activation request (priority 1)
381+
if (flutterBlePeripheralManager?.pendingResultForActivityResult != null) {
382+
flutterBlePeripheralManager!!.pendingResultForActivityResult!!.success(resultCode == Activity.RESULT_OK)
383+
flutterBlePeripheralManager!!.pendingResultForActivityResult = null
384+
}
385+
// Handle Bluetooth activation request during permission check (priority 2)
386+
else if (flutterBlePeripheralManager?.pendingResultForPermissionResult != null) {
387+
val manager = flutterBlePeripheralManager!!
388+
if (resultCode == Activity.RESULT_OK) {
389+
// Execute delayed method call when Bluetooth activation succeeds
390+
if (startStopCall != null) {
391+
onMethodCall(startStopCall!!, manager.pendingResultForPermissionResult!!)
392+
startStopCall = null
393+
} else {
394+
// Success response for simple Bluetooth activation request
395+
manager.pendingResultForPermissionResult!!.success(true)
396+
}
397+
} else {
398+
// When user denies Bluetooth activation
399+
manager.pendingResultForPermissionResult!!.success(false)
384400
}
385-
} else {
386-
flutterBlePeripheralManager?.pendingResultForPermissionResult?.success(State.TurnedOff.ordinal)
401+
manager.pendingResultForPermissionResult = null
387402
}
403+
} catch (e: Exception) {
404+
Log.e(tag, "Error handling Bluetooth enable result: ${e.message}")
405+
// In case of any exception, ensure all pending results are handled.
406+
try {
407+
flutterBlePeripheralManager?.pendingResultForActivityResult?.success(false)
408+
} catch (ignored: Exception) {}
409+
try {
410+
flutterBlePeripheralManager?.pendingResultForPermissionResult?.success(false)
411+
} catch (ignored: Exception) {}
412+
413+
// Clear all pending results
414+
flutterBlePeripheralManager?.pendingResultForActivityResult = null
415+
flutterBlePeripheralManager?.pendingResultForPermissionResult = null
416+
startStopCall = null
388417
}
389-
flutterBlePeripheralManager?.pendingResultForActivityResult = null
390418
return@addActivityResultListener true
391419
}
392420
else -> return@addActivityResultListener false

0 commit comments

Comments
 (0)