No Internet Connection Fix

This commit is contained in:
shabinder 2021-04-19 18:54:21 +05:30
parent e2de7e9f6a
commit 289ada76b0
5 changed files with 30 additions and 34 deletions

View File

@ -27,13 +27,10 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.State import androidx.compose.runtime.State
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import com.shabinder.common.database.appContext import com.shabinder.common.database.appContext
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.io.IOException import java.io.IOException
import java.lang.Exception
import java.net.InetSocketAddress import java.net.InetSocketAddress
import javax.net.SocketFactory
const val TAG = "C-Manager" const val TAG = "C-Manager"
@ -89,7 +86,7 @@ class ConnectionLiveData(context: Context = appContext) : LiveData<Boolean>() {
if (hasInternetCapability == true) { if (hasInternetCapability == true) {
// check if this network actually has internet // check if this network actually has internet
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
val hasInternet = DoesNetworkHaveInternet.execute(network.socketFactory) val hasInternet = DoesNetworkHaveInternet.execute(network)
if (hasInternet) { if (hasInternet) {
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
Log.d(TAG, "onAvailable: adding network. $network") Log.d(TAG, "onAvailable: adding network. $network")
@ -117,19 +114,18 @@ class ConnectionLiveData(context: Context = appContext) : LiveData<Boolean>() {
* If successful, that means we have internet. * If successful, that means we have internet.
*/ */
object DoesNetworkHaveInternet { object DoesNetworkHaveInternet {
suspend fun execute(network: Network): Boolean = withContext(Dispatchers.IO) {
// Make sure to execute this on a background thread. try {
fun execute(socketFactory: SocketFactory): Boolean {
return try {
Log.d(TAG, "PINGING google.") Log.d(TAG, "PINGING google.")
val socket = socketFactory.createSocket() ?: throw IOException("Socket is null.") val socket = network.socketFactory.createSocket() ?: throw IOException("Socket is null.")
socket.connect(InetSocketAddress("8.8.8.8", 53), 1500) socket.connect(InetSocketAddress("8.8.8.8", 53), 1500)
socket.close() socket.close()
Log.d(TAG, "PING success.") Log.d(TAG, "PING success.")
true true
} catch (e: IOException) { }catch (e:Exception){
Log.e(TAG, "No internet connection. $e") e.printStackTrace()
false // Handle VPN Connection / Google DNS Blocked Cases
isInternetAccessible()
} }
} }
} }

View File

@ -18,7 +18,6 @@ package com.shabinder.common.di
import com.shabinder.common.models.TrackDetails import com.shabinder.common.models.TrackDetails
import java.io.File import java.io.File
import com.mp3.jaudiotagger.tag.images.ArtworkFactory
import com.mpatric.mp3agic.ID3v1Tag import com.mpatric.mp3agic.ID3v1Tag
import com.mpatric.mp3agic.ID3v24Tag import com.mpatric.mp3agic.ID3v24Tag
import com.mpatric.mp3agic.Mp3File import com.mpatric.mp3agic.Mp3File

View File

@ -18,7 +18,9 @@ package com.shabinder.common.di
import com.shabinder.common.models.AllPlatforms import com.shabinder.common.models.AllPlatforms
import com.shabinder.common.models.TrackDetails import com.shabinder.common.models.TrackDetails
import io.ktor.client.request.*
import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
expect fun openPlatform(packageID: String, platformLink: String) expect fun openPlatform(packageID: String, platformLink: String)
@ -39,3 +41,18 @@ expect suspend fun downloadTracks(
) )
expect fun queryActiveTracks() expect fun queryActiveTracks()
/*
* Refactor This
* */
suspend fun isInternetAccessible(): Boolean {
return withContext(dispatcherIO) {
try {
ktorHttpClient.head<String>("http://google.com")
true
} catch (e: Exception) {
e.printStackTrace()
false
}
}
}

View File

@ -61,15 +61,14 @@ class SpotifyProvider(
null null
} else { } else {
logger.d { "Spotify Provider Created with $token" } logger.d { "Spotify Provider Created with $token" }
httpClient = HttpClient { HttpClient {
defaultRequest { defaultRequest {
header("Authorization", "Bearer ${token.access_token}") header("Authorization", "Bearer ${token.access_token}")
} }
install(JsonFeature) { install(JsonFeature) {
serializer = kotlinxSerializer serializer = kotlinxSerializer
} }
} }?.also { httpClient = it }
httpClient
} }
} }

View File

@ -47,25 +47,10 @@ actual fun giveDonation() {
actual fun queryActiveTracks() {} actual fun queryActiveTracks() {}
/*
* Refactor This
* */
private suspend fun isInternetAvailable(): Boolean {
return withContext(dispatcherIO) {
try {
ktorHttpClient.head<String>("http://google.com")
true
} catch (e: Exception) {
println(e.message)
false
}
}
}
actual val isInternetAvailable: Boolean actual val isInternetAvailable: Boolean
get() { get() {
var result = false var result = false
val job = GlobalScope.launch { result = isInternetAvailable() } val job = GlobalScope.launch { result = isInternetAccessible() }
while (job.isActive) {} while (job.isActive) {}
return result return result
} }