Move from NetworkProvider to NetworkViewModel
This commit is contained in:
committed by
Aayush Gupta
parent
6618dc7108
commit
59b404309a
@@ -24,6 +24,7 @@ import android.os.Bundle
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.activity.addCallback
|
import androidx.activity.addCallback
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
|
import androidx.activity.viewModels
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
@@ -35,13 +36,13 @@ import androidx.navigation.ui.setupWithNavController
|
|||||||
import com.aurora.store.data.event.BusEvent
|
import com.aurora.store.data.event.BusEvent
|
||||||
import com.aurora.store.data.event.InstallerEvent
|
import com.aurora.store.data.event.InstallerEvent
|
||||||
import com.aurora.store.data.model.NetworkStatus
|
import com.aurora.store.data.model.NetworkStatus
|
||||||
import com.aurora.store.data.providers.NetworkProvider
|
|
||||||
import com.aurora.store.data.receiver.MigrationReceiver
|
import com.aurora.store.data.receiver.MigrationReceiver
|
||||||
import com.aurora.store.databinding.ActivityMainBinding
|
import com.aurora.store.databinding.ActivityMainBinding
|
||||||
import com.aurora.store.util.AppUtil
|
import com.aurora.store.util.AppUtil
|
||||||
import com.aurora.store.util.Preferences
|
import com.aurora.store.util.Preferences
|
||||||
import com.aurora.store.util.Preferences.PREFERENCE_DEFAULT_SELECTED_TAB
|
import com.aurora.store.util.Preferences.PREFERENCE_DEFAULT_SELECTED_TAB
|
||||||
import com.aurora.store.view.ui.sheets.NetworkDialogSheet
|
import com.aurora.store.view.ui.sheets.NetworkDialogSheet
|
||||||
|
import com.aurora.store.viewmodel.network.NetworkViewModel
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -53,6 +54,8 @@ class MainActivity : AppCompatActivity() {
|
|||||||
@Inject
|
@Inject
|
||||||
lateinit var appUtil: AppUtil
|
lateinit var appUtil: AppUtil
|
||||||
|
|
||||||
|
private val networkViewModel: NetworkViewModel by viewModels()
|
||||||
|
|
||||||
private lateinit var B: ActivityMainBinding
|
private lateinit var B: ActivityMainBinding
|
||||||
|
|
||||||
// TopLevelFragments
|
// TopLevelFragments
|
||||||
@@ -90,29 +93,30 @@ class MainActivity : AppCompatActivity() {
|
|||||||
supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
|
supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
|
||||||
val navController = navHostFragment.navController
|
val navController = navHostFragment.navController
|
||||||
|
|
||||||
this.lifecycleScope.launch {
|
networkViewModel.register()
|
||||||
NetworkProvider(applicationContext).networkStatus.collect {
|
networkViewModel.status.observe(this) { networkStatus ->
|
||||||
when (it) {
|
when (networkStatus) {
|
||||||
NetworkStatus.AVAILABLE -> {
|
NetworkStatus.AVAILABLE -> {
|
||||||
if (!supportFragmentManager.isDestroyed && isIntroDone()) {
|
if (!supportFragmentManager.isDestroyed && isIntroDone()) {
|
||||||
val fragment = supportFragmentManager
|
val fragment = supportFragmentManager
|
||||||
.findFragmentByTag(NetworkDialogSheet.TAG)
|
.findFragmentByTag(NetworkDialogSheet.TAG)
|
||||||
fragment?.let {
|
fragment?.let {
|
||||||
supportFragmentManager.beginTransaction()
|
|
||||||
.remove(fragment)
|
|
||||||
.commitAllowingStateLoss()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NetworkStatus.LOST -> {
|
|
||||||
if (!supportFragmentManager.isDestroyed && isIntroDone()) {
|
|
||||||
supportFragmentManager.beginTransaction()
|
supportFragmentManager.beginTransaction()
|
||||||
.add(NetworkDialogSheet.newInstance(), NetworkDialogSheet.TAG)
|
.remove(fragment)
|
||||||
.commitAllowingStateLoss()
|
.commitAllowingStateLoss()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NetworkStatus.LOST -> {
|
||||||
|
if (!supportFragmentManager.isDestroyed && isIntroDone()) {
|
||||||
|
supportFragmentManager.beginTransaction()
|
||||||
|
.add(NetworkDialogSheet.newInstance(), NetworkDialogSheet.TAG)
|
||||||
|
.commitAllowingStateLoss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,6 +180,11 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDestroy() {
|
||||||
|
networkViewModel.unregister()
|
||||||
|
super.onDestroy()
|
||||||
|
}
|
||||||
|
|
||||||
private fun isIntroDone(): Boolean {
|
private fun isIntroDone(): Boolean {
|
||||||
return Preferences.getBoolean(this@MainActivity, Preferences.PREFERENCE_INTRO)
|
return Preferences.getBoolean(this@MainActivity, Preferences.PREFERENCE_INTRO)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,5 +2,6 @@ package com.aurora.store.data.model
|
|||||||
|
|
||||||
enum class NetworkStatus {
|
enum class NetworkStatus {
|
||||||
AVAILABLE,
|
AVAILABLE,
|
||||||
|
UNAVAILABLE,
|
||||||
LOST
|
LOST
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,49 +17,47 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.aurora.store.data.providers
|
package com.aurora.store.viewmodel.network
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.ConnectivityManager
|
import android.net.ConnectivityManager
|
||||||
import android.net.Network
|
import android.net.Network
|
||||||
import android.net.NetworkCapabilities
|
import android.net.NetworkCapabilities
|
||||||
import android.net.NetworkRequest
|
import android.net.NetworkRequest
|
||||||
import android.util.Log
|
import androidx.lifecycle.MutableLiveData
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
import com.aurora.extensions.isMAndAbove
|
import com.aurora.extensions.isMAndAbove
|
||||||
import com.aurora.store.AuroraApp
|
|
||||||
import com.aurora.store.data.model.NetworkStatus
|
import com.aurora.store.data.model.NetworkStatus
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.flow.asStateFlow
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import javax.inject.Inject
|
||||||
|
|
||||||
class NetworkProvider(context: Context) {
|
@HiltViewModel
|
||||||
|
class NetworkViewModel @Inject constructor(
|
||||||
private val TAG = NetworkProvider::class.java.simpleName
|
@ApplicationContext private val context: Context
|
||||||
|
) : ViewModel() {
|
||||||
private val _networkStatus = MutableStateFlow(NetworkStatus.AVAILABLE)
|
val status: MutableLiveData<NetworkStatus> = MutableLiveData(NetworkStatus.UNAVAILABLE)
|
||||||
val networkStatus = _networkStatus.asStateFlow()
|
|
||||||
|
|
||||||
private val connectivityManager =
|
private val connectivityManager =
|
||||||
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
private val networkCallback = object : ConnectivityManager.NetworkCallback() {
|
||||||
|
override fun onAvailable(network: Network) {
|
||||||
|
super.onAvailable(network)
|
||||||
|
status.postValue(NetworkStatus.AVAILABLE)
|
||||||
|
}
|
||||||
|
|
||||||
init {
|
override fun onLost(network: Network) {
|
||||||
networkStatus.launchIn(AuroraApp.scope)
|
super.onLost(network)
|
||||||
|
status.postValue(NetworkStatus.LOST)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Monitor network
|
fun register() {
|
||||||
connectivityManager.registerNetworkCallback(getNetworkRequest(),
|
connectivityManager.registerNetworkCallback(getNetworkRequest(), networkCallback)
|
||||||
object : ConnectivityManager.NetworkCallback() {
|
}
|
||||||
override fun onAvailable(network: Network) {
|
|
||||||
super.onAvailable(network)
|
|
||||||
Log.d(TAG, "Network available!")
|
|
||||||
_networkStatus.value = NetworkStatus.AVAILABLE
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onLost(network: Network) {
|
fun unregister() {
|
||||||
super.onLost(network)
|
connectivityManager.unregisterNetworkCallback(networkCallback)
|
||||||
Log.d(TAG, "Network unavailable!")
|
|
||||||
_networkStatus.value = NetworkStatus.LOST
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getNetworkRequest(): NetworkRequest {
|
private fun getNetworkRequest(): NetworkRequest {
|
||||||
@@ -69,6 +67,7 @@ class NetworkProvider(context: Context) {
|
|||||||
if (isMAndAbove()) {
|
if (isMAndAbove()) {
|
||||||
networkRequest.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
|
networkRequest.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
|
||||||
}
|
}
|
||||||
return networkRequest.build()
|
|
||||||
|
return networkRequest.build()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user