WIP
This commit is contained in:
parent
3c146ee603
commit
761a076e52
@ -18,7 +18,7 @@ android {
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.isolaatti"
|
||||
minSdk 23
|
||||
minSdk 24
|
||||
targetSdk 33
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
@ -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())
|
||||
}
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,7 @@
|
||||
package com.isolaatti.connectivity
|
||||
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
|
||||
object NetworkStatus {
|
||||
var networkIsAvailable: Boolean = true
|
||||
val networkIsAvailable: MutableLiveData<Boolean> = MutableLiveData()
|
||||
}
|
||||
@ -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() {
|
||||
|
||||
@ -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>
|
||||
Loading…
x
Reference in New Issue
Block a user