This commit is contained in:
Erik Cavazos 2023-09-09 16:09:22 -06:00
parent 3c146ee603
commit 761a076e52
8 changed files with 64 additions and 11 deletions

View File

@ -18,7 +18,7 @@ android {
defaultConfig {
applicationId "com.isolaatti"
minSdk 23
minSdk 24
targetSdk 33
versionCode 1
versionName "1.0"

View File

@ -2,6 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:name=".MyApplication"
android:allowBackup="true"

View File

@ -1,29 +1,26 @@
package com.isolaatti
import android.app.Activity
import android.app.Application
import android.os.Bundle
import com.isolaatti.auth.data.AuthRepositoryImpl
import com.isolaatti.auth.data.local.TokenStorage
import com.isolaatti.auth.data.remote.AuthApi
import com.isolaatti.auth.domain.AuthRepository
import com.isolaatti.connectivity.RetrofitClient
import dagger.Provides
import android.net.ConnectivityManager
import com.isolaatti.connectivity.ConnectivityCallbackImpl
import dagger.hilt.android.HiltAndroidApp
import javax.inject.Singleton
@HiltAndroidApp
class MyApplication : Application() {
private val activityLifecycleCallbacks = ActivityLifecycleCallbacks()
lateinit var connectivityCallbackImpl: ConnectivityCallbackImpl
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(activityLifecycleCallbacks)
connectivityCallbackImpl = ConnectivityCallbackImpl()
getSystemService(ConnectivityManager::class.java).registerDefaultNetworkCallback(connectivityCallbackImpl)
}
override fun onTerminate() {
super.onTerminate()
unregisterActivityLifecycleCallbacks(activityLifecycleCallbacks)
getSystemService(ConnectivityManager::class.java).unregisterNetworkCallback(connectivityCallbackImpl)
}
}

View File

@ -5,13 +5,17 @@ import android.content.DialogInterface
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar
import com.isolaatti.R
import com.isolaatti.connectivity.ConnectivityCallbackImpl
import com.isolaatti.connectivity.NetworkStatus
import com.isolaatti.home.HomeActivity
import com.isolaatti.login.LogInActivity
import com.isolaatti.utils.Resource
@ -22,6 +26,9 @@ abstract class IsolaattiBaseActivity : AppCompatActivity() {
val errorViewModel: ErrorMessageViewModel by viewModels()
private var snackbarNetworkStatus: Snackbar? = null
private var connectionHasBeenLost: Boolean = false
private val errorObserver: Observer<Resource.Error.ErrorType> = Observer {
when(it) {
Resource.Error.ErrorType.AuthError -> showReAuthDialog()
@ -33,6 +40,21 @@ abstract class IsolaattiBaseActivity : AppCompatActivity() {
}
}
private val connectivityObserver: Observer<Boolean> = Observer { networkAvailable ->
val view: View = window.decorView.findViewById(android.R.id.content) ?: return@Observer
if(!networkAvailable) {
connectionHasBeenLost = true
snackbarNetworkStatus = Snackbar.make(view, R.string.network_conn_lost, Snackbar.LENGTH_INDEFINITE)
snackbarNetworkStatus?.show()
} else if(connectionHasBeenLost) {
snackbarNetworkStatus?.dismiss()
snackbarNetworkStatus = Snackbar.make(view, R.string.network_conn_restored, Snackbar.LENGTH_SHORT)
snackbarNetworkStatus?.show()
connectionHasBeenLost = false
}
}
private val signInActivityResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { activityResult ->
if(activityResult.resultCode == Activity.RESULT_OK) {
onRetry()
@ -77,6 +99,9 @@ abstract class IsolaattiBaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
errorViewModel.error.observe(this, errorObserver)
NetworkStatus.networkIsAvailable.observe(this, connectivityObserver)
Log.d("IsolaattiBaseActivity", errorViewModel.toString())
}
}

View File

@ -0,0 +1,21 @@
package com.isolaatti.connectivity
import android.net.ConnectivityManager
import android.net.Network
class ConnectivityCallbackImpl : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
NetworkStatus.networkIsAvailable.postValue(true)
}
override fun onLost(network: Network) {
super.onLost(network)
NetworkStatus.networkIsAvailable.postValue(false)
}
override fun onUnavailable() {
super.onUnavailable()
NetworkStatus.networkIsAvailable.postValue(false)
}
}

View File

@ -1,5 +1,7 @@
package com.isolaatti.connectivity
import androidx.lifecycle.MutableLiveData
object NetworkStatus {
var networkIsAvailable: Boolean = true
val networkIsAvailable: MutableLiveData<Boolean> = MutableLiveData()
}

View File

@ -15,6 +15,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.isolaatti.BuildConfig
import com.isolaatti.R
import com.isolaatti.common.Dialogs
import com.isolaatti.common.ErrorMessageViewModel
import com.isolaatti.databinding.FragmentDiscussionsBinding
import com.isolaatti.followers.domain.FollowingState
import com.isolaatti.home.FeedFragment
@ -48,6 +49,7 @@ class ProfileMainFragment : Fragment() {
lateinit var viewBinding: FragmentDiscussionsBinding
private val viewModel: ProfileViewModel by viewModels()
val optionsViewModel: BottomSheetPostOptionsViewModel by activityViewModels()
val errorViewModel: ErrorMessageViewModel by activityViewModels()
private var userId: Int? = null
lateinit var postsAdapter: PostsRecyclerViewAdapter
@ -213,6 +215,9 @@ class ProfileMainFragment : Fragment() {
viewBinding.swipeToRefresh.isRefreshing = false
}
}
viewModel.errorLoading.observe(viewLifecycleOwner) {
errorViewModel.error.postValue(it)
}
}
private fun getData() {

View File

@ -75,4 +75,6 @@
<string name="comment_posted">Comment posted!</string>
<string name="comment_failed_to_post">Comment failed to post</string>
<string name="edit_comment">Edit comment</string>
<string name="network_conn_lost">Network connection lost</string>
<string name="network_conn_restored">Network connection restored</string>
</resources>