Updated on 2026-08-14

This commit is contained in:
Tangem 2023-03-10 18:28:31 +08:00
parent 0d2f6e2410
commit 17ba4a88e3
14 changed files with 127 additions and 215 deletions

View file

@ -15,7 +15,6 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import timber.log.Timber
import javax.inject.Inject
@ -36,9 +35,9 @@ internal class AndroidNetworkConnectionManager @Inject constructor(
private val dispatchers: CoroutineDispatcherProvider,
) : NetworkConnectionManager {
override val connectionStatus: StateFlow<ConnectionStatus> get() = _connectionStatus
override val isOnline: Boolean get() = _isOnline.value
private val _connectionStatus = MutableStateFlow(ConnectionStatus.OFFLINE)
private val _isOnline = MutableStateFlow(value = false)
private val callbacks = NetworkConnectionManagerCallbacks()
private val receiver = NetworkConnectionBroadcastReceiver()
@ -78,28 +77,26 @@ internal class AndroidNetworkConnectionManager @Inject constructor(
CoroutineScope(SupervisorJob()).launch(dispatchers.io) {
try {
val status = getCurrentStatus()
val status = isConnected()
_connectionStatus.emit(value = status)
Timber.i("Status changed to $status")
_isOnline.emit(value = status)
Timber.i("Connection status is ${if (status) "ONLINE" else "OFFLINE"}")
} finally {
pendingResult.finish()
}
}
}
private fun getCurrentStatus(): ConnectionStatus {
connectivityManager ?: return ConnectionStatus.OFFLINE
private fun isConnected(): Boolean {
connectivityManager ?: return false
val isConnected = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
capabilities != null && capabilities.hasNetworkTransport()
} else {
val networkInfo = connectivityManager.activeNetworkInfo
networkInfo != null && networkInfo.isConnectedOrConnecting
}
return if (isConnected) ConnectionStatus.ONLINE else ConnectionStatus.OFFLINE
}
private fun NetworkCapabilities.hasNetworkTransport(): Boolean {

View file

@ -1,10 +0,0 @@
package com.tangem.datasource.connection
/**
* Network connection status
*
[REDACTED_AUTHOR]
*/
enum class ConnectionStatus {
ONLINE, OFFLINE
}

View file

@ -1,10 +1,8 @@
package com.tangem.datasource.connection
import kotlinx.coroutines.flow.StateFlow
/** Network connection manager */
interface NetworkConnectionManager {
/** Connection status */
val connectionStatus: StateFlow<ConnectionStatus>
val isOnline: Boolean
}