From 761a076e52a89418d7244d9a7ae2ffecc4750a56 Mon Sep 17 00:00:00 2001 From: Erik Cavazos Date: Sat, 9 Sep 2023 16:09:22 -0600 Subject: [PATCH] WIP --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 1 + .../main/java/com/isolaatti/MyApplication.kt | 15 +++++------ .../isolaatti/common/IsolaattiBaseActivity.kt | 25 +++++++++++++++++++ .../connectivity/ConnectivityCallbackImpl.kt | 21 ++++++++++++++++ .../isolaatti/connectivity/NetworkStatus.kt | 4 ++- .../profile/ui/ProfileMainFragment.kt | 5 ++++ app/src/main/res/values/strings.xml | 2 ++ 8 files changed, 64 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/com/isolaatti/connectivity/ConnectivityCallbackImpl.kt diff --git a/app/build.gradle b/app/build.gradle index c9751af..b3284ce 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,7 +18,7 @@ android { defaultConfig { applicationId "com.isolaatti" - minSdk 23 + minSdk 24 targetSdk 33 versionCode 1 versionName "1.0" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5e480a9..dfc602b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ + = Observer { when(it) { Resource.Error.ErrorType.AuthError -> showReAuthDialog() @@ -33,6 +40,21 @@ abstract class IsolaattiBaseActivity : AppCompatActivity() { } } + private val connectivityObserver: Observer = 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()) } } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/connectivity/ConnectivityCallbackImpl.kt b/app/src/main/java/com/isolaatti/connectivity/ConnectivityCallbackImpl.kt new file mode 100644 index 0000000..57d832d --- /dev/null +++ b/app/src/main/java/com/isolaatti/connectivity/ConnectivityCallbackImpl.kt @@ -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) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/connectivity/NetworkStatus.kt b/app/src/main/java/com/isolaatti/connectivity/NetworkStatus.kt index 4236966..cd7eb13 100644 --- a/app/src/main/java/com/isolaatti/connectivity/NetworkStatus.kt +++ b/app/src/main/java/com/isolaatti/connectivity/NetworkStatus.kt @@ -1,5 +1,7 @@ package com.isolaatti.connectivity +import androidx.lifecycle.MutableLiveData + object NetworkStatus { - var networkIsAvailable: Boolean = true + val networkIsAvailable: MutableLiveData = MutableLiveData() } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/profile/ui/ProfileMainFragment.kt b/app/src/main/java/com/isolaatti/profile/ui/ProfileMainFragment.kt index b4d8d6c..889c515 100644 --- a/app/src/main/java/com/isolaatti/profile/ui/ProfileMainFragment.kt +++ b/app/src/main/java/com/isolaatti/profile/ui/ProfileMainFragment.kt @@ -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() { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6f30768..2c033ef 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -75,4 +75,6 @@ Comment posted! Comment failed to post Edit comment + Network connection lost + Network connection restored \ No newline at end of file