Implement logout feature

This commit is contained in:
Kirill Kamakin
2021-11-14 11:51:31 +03:00
parent 670dcbccc8
commit 7e1576e8f6
9 changed files with 91 additions and 7 deletions

View File

@@ -24,4 +24,9 @@ class AuthenticationViewModel @Inject constructor(
Timber.v("authenticationStatuses() called")
return authRepo.authenticationStatuses()
}
fun logout() {
Timber.v("logout() called")
authRepo.logout()
}
}

View File

@@ -7,9 +7,11 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import dagger.hilt.android.AndroidEntryPoint
import gq.kirmanak.mealie.databinding.FragmentRecipesBinding
import gq.kirmanak.mealie.ui.auth.AuthenticationViewModel
import kotlinx.coroutines.flow.collectLatest
import timber.log.Timber
@@ -19,6 +21,7 @@ class RecipesFragment : Fragment() {
private val binding: FragmentRecipesBinding
get() = checkNotNull(_binding) { "Binding requested when fragment is off screen" }
private val viewModel by viewModels<RecipeViewModel>()
private val authViewModel by viewModels<AuthenticationViewModel>()
override fun onCreateView(
inflater: LayoutInflater,
@@ -33,13 +36,33 @@ class RecipesFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Timber.v("onViewCreated() called with: view = $view, savedInstanceState = $savedInstanceState")
setupRecipeAdapter()
listenToAuthStatuses()
}
private fun listenToAuthStatuses() {
Timber.v("listenToAuthStatuses() called")
lifecycleScope.launchWhenCreated {
authViewModel.authenticationStatuses().collectLatest {
Timber.v("listenToAuthStatuses: new auth status = $it")
if (!it) navigateToAuthFragment()
}
}
}
private fun navigateToAuthFragment() {
Timber.v("navigateToAuthFragment() called")
findNavController().navigate(RecipesFragmentDirections.actionRecipesFragmentToAuthenticationFragment())
}
private fun setupRecipeAdapter() {
Timber.v("setupRecipeAdapter() called")
binding.recipes.layoutManager = LinearLayoutManager(requireContext())
val recipesPagingAdapter = RecipesPagingAdapter(viewModel)
binding.recipes.adapter = recipesPagingAdapter
lifecycleScope.launchWhenResumed {
Timber.d("onViewCreated: coroutine started")
viewModel.recipeFlow.collectLatest {
Timber.d("onViewCreated: received update")
Timber.d("setupRecipeAdapter: received update")
recipesPagingAdapter.submitData(it)
}
}