Skip to content
Snippets Groups Projects
Commit d1a24a4f authored by Muhhamad  Syauqi's avatar Muhhamad Syauqi
Browse files

feat check network connectivity

parent 477894b7
1 merge request!7merge dev
...@@ -9,6 +9,10 @@ ...@@ -9,6 +9,10 @@
<uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" /> android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
......
package com.example.android_hit package com.example.android_hit
//import androidx.appcompat.app.AlertDialog
import android.app.AlertDialog import android.app.AlertDialog
import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.example.android_hit.api.RetrofitClient import com.example.android_hit.api.RetrofitClient
import com.example.android_hit.data.LoginPayload import com.example.android_hit.data.LoginPayload
...@@ -25,12 +25,27 @@ class MainActivity : AppCompatActivity() { ...@@ -25,12 +25,27 @@ class MainActivity : AppCompatActivity() {
private lateinit var userPref : UserManager private lateinit var userPref : UserManager
private lateinit var sharedPref : TokenManager private lateinit var sharedPref : TokenManager
private lateinit var cryptoManager: CryptoManager private lateinit var cryptoManager: CryptoManager
private lateinit var dialog : AlertDialog
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater) binding = ActivityMainBinding.inflate(layoutInflater)
userPref = UserManager(this) userPref = UserManager(this)
sharedPref = TokenManager(this) sharedPref = TokenManager(this)
cryptoManager = CryptoManager() cryptoManager = CryptoManager()
val networkManager = NetworkManager(this)
var networkDialog: AlertDialog? = null
networkManager.observe(this) { isConnected ->
if (!isConnected) {
networkDialog = showNetworkDialog()
} else {
networkDialog?.dismiss()
networkDialog = null
}
}
setContentView(binding.root) setContentView(binding.root)
setCurrentFragment(Transaction(), HeaderTransaction()) setCurrentFragment(Transaction(), HeaderTransaction())
...@@ -60,6 +75,20 @@ class MainActivity : AppCompatActivity() { ...@@ -60,6 +75,20 @@ class MainActivity : AppCompatActivity() {
} }
} }
private fun showNetworkDialog(): AlertDialog {
val alertDialogBuilder: AlertDialog.Builder = AlertDialog.Builder(this)
alertDialogBuilder.setTitle("No Internet Connection")
alertDialogBuilder.setMessage("Please check your internet connection")
alertDialogBuilder.setCancelable(false)
alertDialogBuilder.setPositiveButton("OK") { dialog, _ ->
dialog.dismiss()
}
val alertDialog: AlertDialog = alertDialogBuilder.create()
alertDialog.show()
return alertDialog
}
private fun setCurrentFragment(fragment: Fragment, header: Fragment) = private fun setCurrentFragment(fragment: Fragment, header: Fragment) =
supportFragmentManager.beginTransaction().apply { supportFragmentManager.beginTransaction().apply {
......
package com.example.android_hit
import android.content.Context
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import androidx.lifecycle.LiveData
class NetworkManager(context: Context) : LiveData<Boolean>() {
// private val _isNetworkAvailable = MutableLiveData<Boolean>()
// val isNetworkAvailable: LiveData<Boolean> get() = _isNetworkAvailable
private var connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
private val networkCallback = object : ConnectivityManager.NetworkCallback() {
// network is available for use
override fun onAvailable(network: Network) {
super.onAvailable(network)
postValue(true)
}
override fun onUnavailable() {
super.onUnavailable()
postValue(false)
}
// Network capabilities have changed for the network
// override fun onCapabilitiesChanged(
// network: Network,
// networkCapabilities: NetworkCapabilities
// ) {
// super.onCapabilitiesChanged(network, networkCapabilities)
// val unmetered =
// networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
// }
// lost network connection
override fun onLost(network: Network) {
super.onLost(network)
postValue(false)
}
}
private fun checkNetworkConnectivity() {
val network = connectivityManager.activeNetwork
if(network == null){
postValue(false)
}
val requestBuilder = NetworkRequest.Builder().apply {
addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
}.build()
connectivityManager.registerNetworkCallback(requestBuilder, networkCallback)
}
override fun onActive() {
super.onActive()
checkNetworkConnectivity()
}
override fun onInactive() {
super.onInactive()
connectivityManager.unregisterNetworkCallback(networkCallback)
}
}
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment