The reason why Disconnected event was not caught using stateAsFlow on first connection when using autoConnect = true was that in this case the library was immediately starting reconnecting to the target peripheral using gatt.connect(). Before that, a new event Connecting was sent which was overwriting the state of the manager. As StateFlow doesn't have any buffering, a value that was not consumed is overwritten and was lost.
In case of using autoConnect = false or in following connections the immediate reconnection didn't happen and disconnection was reported successfully.
This PR fixes #486.
The reason why
Disconnected
event was not caught usingstateAsFlow
on first connection when usingautoConnect = true
was that in this case the library was immediately starting reconnecting to the target peripheral usinggatt.connect()
. Before that, a new eventConnecting
was sent which was overwriting the state of the manager. AsStateFlow
doesn't have any buffering, a value that was not consumed is overwritten and was lost. In case of usingautoConnect = false
or in following connections the immediate reconnection didn't happen and disconnection was reported successfully.This PR breaks a the API. The type returned by
stateAsFlow
andbondingStateAsFlow
is nowFlow
, notStateFlow
. If you need aStateFlow
, use.stateIn(...)
modifier as such: https://github.com/NordicSemiconductor/Android-nRF-Blinky/blob/44db91ec587bdf53bbb27cbb7c2f6048a7dfce2e/blinky/ble/src/main/java/no/nordicsemi/android/blinky/ble/BlinkyManager.kt#L44-L54