fixup! NetworkProvider: improvements + workaround for Android L

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2025-02-26 12:07:21 +08:00
committed by Rahul Patel
parent 9561f617d7
commit 3d8706da0b
2 changed files with 25 additions and 9 deletions

View File

@@ -43,8 +43,7 @@ import javax.inject.Singleton
@Singleton
class NetworkProvider @Inject constructor(@ApplicationContext private val context: Context) {
private val connectivityManager =
context.getSystemService<ConnectivityManager>() as ConnectivityManager
private val connectivityManager = context.getSystemService<ConnectivityManager>()!!
val status: Flow<NetworkStatus>
get() = callbackFlow {
@@ -71,9 +70,15 @@ class NetworkProvider @Inject constructor(@ApplicationContext private val contex
awaitClose { connectivityManager.unregisterNetworkCallback(networkCallback) }
} else {
val receiver = NetworkBroadcastReceiver { isConnected ->
trySend(if (isConnected) NetworkStatus.AVAILABLE else NetworkStatus.UNAVAILABLE).isSuccess
val status = if (isConnected) {
NetworkStatus.AVAILABLE
} else {
NetworkStatus.UNAVAILABLE
}
trySend(status).isSuccess
}
@Suppress("DEPRECATION")
context.registerReceiver(
receiver,
IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
@@ -82,4 +87,4 @@ class NetworkProvider @Inject constructor(@ApplicationContext private val contex
awaitClose { context.unregisterReceiver(receiver) }
}
}.distinctUntilChanged()
}
}

View File

@@ -1,18 +1,29 @@
/*
* SPDX-FileCopyrightText: 2025 Aurora OSS
* SPDX-FileCopyrightText: 2025 The Calyx Institute
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package com.aurora.store.data.receiver
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.net.ConnectivityManager
import androidx.core.content.getSystemService
/**
* Broadcast receiver for network status for API 21 & 22
* @param callback Callback when the network status changes
*/
@Suppress("DEPRECATION")
class NetworkBroadcastReceiver(private val callback: (Boolean) -> Unit) : BroadcastReceiver() {
class NetworkBroadcastReceiver(
private val callback: (Boolean) -> Unit
) : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val connectivityManager = context?.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager
val connectivityManager = context?.getSystemService<ConnectivityManager>()
val networkInfo = connectivityManager?.activeNetworkInfo
val isConnected = networkInfo?.isConnectedOrConnecting == true
callback(isConnected)
}
}
}