I am developing SDK using Kotlin Multiplatform
-
functionality we want to develop is check internet connectivity and write some unit test cases for implementation we are using MVVM architecture
expect class Connectivity { fun isInternetConnected(): Boolean
}
Corresponding actual classes are
actual class Connectivity(val context: Context){
actual fun isInternetConnected(): Boolean {
val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val capabilities =
connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
if (capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) == true) {
PlatformLogger("Internet").logI("NetworkCapabilities.TRANSPORT_CELLULAR", null)
return true
} else if (capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true) {
PlatformLogger("Internet").logI("NetworkCapabilities.TRANSPORT_WIFI", null,)
return true
} else if (capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) == true) {
PlatformLogger("Internet").logI("NetworkCapabilities.TRANSPORT_ETHERNET", null)
return true
}
PlatformLogger("Internet").logI("No Internet available", null)
return false
}
}
actual class Connectivity{
@OptIn(ExperimentalForeignApi::class)
actual fun isInternetConnected(): Boolean {
memScoped {
val reachability = SCNetworkReachabilityCreateWithName(null, "www.google.com")
val flags = alloc<UIntVar>()
val gotFlags = SCNetworkReachabilityGetFlags(reachability, flags.ptr)
if (!gotFlags) {
PlatformLogger("Network-IOS").logI("Could not fetch the network reachability flags")
return false
}
return (flags.value and kSCNetworkReachabilityFlagsReachable) != 0u
}
}
}
while creating Repository we need instance of connectivity object, we are injecting dependencies using koin
single<TrackerRepository> { TrackerRepository(local = get<TrackerLocalDataSource>(), network = get<TrackerNetworkDataSource>(), connectivity = get<Connectivity>()) }
and I am getting error asorg.koin.core.error.InstanceCreationException: Could not create instance for '[Singleton:'com.autodesk.adp_mobile_sdk.tracker.data.repository.TrackerRepository']'
in modules.android I have added
single<Connectivity>{Connectivity(get())}