Emit current state with NetworkManager.observe() flow

This commit is contained in:
Mateusz Markowicz 2021-05-31 12:39:06 +02:00
parent 9622eb2a30
commit a0fa1fdb6f
2 changed files with 17 additions and 3 deletions

View File

@ -59,14 +59,27 @@ internal class NetworkManagerTests {
flow2.cancel()
assertEquals(
listOf(NetworkStatus.Unmetered, NetworkStatus.Metered, NetworkStatus.Disconnected),
listOf(NetworkStatus.Disconnected, NetworkStatus.Unmetered, NetworkStatus.Metered, NetworkStatus.Disconnected),
collectedStates1.toList()
)
assertEquals(
listOf(NetworkStatus.Metered, NetworkStatus.Disconnected, NetworkStatus.Unmetered),
listOf(NetworkStatus.Unmetered, NetworkStatus.Metered, NetworkStatus.Disconnected, NetworkStatus.Unmetered),
collectedStates2.toList()
)
assertFalse(networkManager.registered)
}
@Test
fun `test notify current state`() = runBlockingTest {
networkManager.networkStatus = NetworkStatus.Unmetered
val stateFlow = networkManager.observe()
val collectedStates = mutableListOf<NetworkStatus>()
val flow = launch { stateFlow.toList(collectedStates) }
networkManager.networkStatus = NetworkStatus.Disconnected
flow.cancel()
assertEquals(listOf(NetworkStatus.Unmetered, NetworkStatus.Disconnected), collectedStates.toList())
}
}

View File

@ -39,10 +39,11 @@ abstract class NetworkManager {
fun isConnectedToNetwork() = networkStatus != NetworkStatus.Disconnected
/**
* @return [Flow] of [NetworkStatus] changes
* @return [Flow] of [NetworkStatus] - current state and changes
*/
fun observe() = callbackFlow {
val observer: NetworkCallback = { offer(it) }
offer(networkStatus)
addObserver(observer)
awaitClose { removeObserver(observer) }
}