NordicSemiconductor / Android-BLE-Library

A library that makes working with Bluetooth LE on Android a pleasure. Seriously.
BSD 3-Clause "New" or "Revised" License
1.99k stars 414 forks source link

Switching `stateAsFlow` and `bongingStateAsFlow` from StateFlow to SharedFlow #489

Closed philips77 closed 1 year ago

philips77 commented 1 year ago

This PR fixes #486.

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 breaks a the API. The type returned by stateAsFlow and bondingStateAsFlow is now Flow, not StateFlow. If you need a StateFlow, 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