From 485557624881e307b5283b5be468d9ea1a1fbea4 Mon Sep 17 00:00:00 2001 From: andrekir Date: Tue, 19 Nov 2024 10:53:27 -0300 Subject: [PATCH] refactor: ensure `NetworkRepository` flows on IO thread --- .../repository/network/NetworkRepository.kt | 20 ++++++++++++++----- .../network/NetworkRepositoryModule.kt | 4 ++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/repository/network/NetworkRepository.kt b/app/src/main/java/com/geeksville/mesh/repository/network/NetworkRepository.kt index 47af07f94..f7caee6c3 100644 --- a/app/src/main/java/com/geeksville/mesh/repository/network/NetworkRepository.kt +++ b/app/src/main/java/com/geeksville/mesh/repository/network/NetworkRepository.kt @@ -2,21 +2,31 @@ package com.geeksville.mesh.repository.network import android.net.ConnectivityManager import android.net.nsd.NsdManager +import android.net.nsd.NsdServiceInfo +import com.geeksville.mesh.CoroutineDispatchers import com.geeksville.mesh.android.Logging -import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.conflate +import kotlinx.coroutines.flow.flowOn import javax.inject.Inject import javax.inject.Singleton @Singleton class NetworkRepository @Inject constructor( - private val nsdManagerLazy: dagger.Lazy, + private val nsdManagerLazy: dagger.Lazy, private val connectivityManager: dagger.Lazy, + private val dispatchers: CoroutineDispatchers, ) : Logging { - val networkAvailable get() = connectivityManager.get().networkAvailable() + val networkAvailable: Flow + get() = connectivityManager.get().networkAvailable() + .flowOn(dispatchers.io) + .conflate() - val resolvedList - get() = nsdManagerLazy.get()?.serviceList(SERVICE_TYPES, SERVICE_NAME) ?: flowOf(emptyList()) + val resolvedList: Flow> + get() = nsdManagerLazy.get().serviceList(SERVICE_TYPES, SERVICE_NAME) + .flowOn(dispatchers.io) + .conflate() companion object { // To find all available services use SERVICE_TYPE = "_services._dns-sd._udp" diff --git a/app/src/main/java/com/geeksville/mesh/repository/network/NetworkRepositoryModule.kt b/app/src/main/java/com/geeksville/mesh/repository/network/NetworkRepositoryModule.kt index bb54a0134..59908eb5b 100644 --- a/app/src/main/java/com/geeksville/mesh/repository/network/NetworkRepositoryModule.kt +++ b/app/src/main/java/com/geeksville/mesh/repository/network/NetworkRepositoryModule.kt @@ -19,8 +19,8 @@ class NetworkRepositoryModule { } @Provides - fun provideNsdManager(application: Application): NsdManager? { - return application.getSystemService(Context.NSD_SERVICE) as NsdManager? + fun provideNsdManager(application: Application): NsdManager { + return application.getSystemService(Context.NSD_SERVICE) as NsdManager } } }