From 11793a423b6c95761234488e905dd4e89959b025 Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Fri, 23 Jul 2021 15:18:34 +0200 Subject: [PATCH] Improve error handling in HomeFragment --- .../jdtech/jellyfin/fragments/HomeFragment.kt | 21 +++--- .../jellyfin/viewmodels/HomeViewModel.kt | 6 +- app/src/main/res/layout/error.xml | 22 ------ app/src/main/res/layout/fragment_home.xml | 72 +++++++++---------- 4 files changed, 47 insertions(+), 74 deletions(-) delete mode 100644 app/src/main/res/layout/error.xml diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt index b7aa25f3..25c4362a 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt @@ -5,6 +5,7 @@ import android.view.* import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController +import com.google.android.material.snackbar.Snackbar import dagger.hilt.android.AndroidEntryPoint import dev.jdtech.jellyfin.R import dev.jdtech.jellyfin.adapters.HomeEpisodeListAdapter @@ -46,6 +47,12 @@ class HomeFragment : Fragment() { ): View { binding = FragmentHomeBinding.inflate(inflater, container, false) + val snackbar = + Snackbar.make(binding.mainLayout, getString(R.string.error_loading_data), Snackbar.LENGTH_INDEFINITE) + snackbar.setAction(getString(R.string.retry)) { + viewModel.loadData() + } + binding.lifecycleOwner = this binding.viewModel = viewModel binding.viewsRecyclerView.adapter = ViewListAdapter(ViewListAdapter.OnClickListener { @@ -64,21 +71,13 @@ class HomeFragment : Fragment() { }) - binding.errorLayout.findViewById(R.id.retry_button).setOnClickListener { - viewModel.loadData() - } - viewModel.finishedLoading.observe(viewLifecycleOwner, { binding.loadingIndicator.visibility = if (it) View.GONE else View.VISIBLE }) - viewModel.error.observe(viewLifecycleOwner, { - if (it) { - binding.errorLayout.visibility = View.VISIBLE - binding.viewsRecyclerView.visibility = View.GONE - } else { - binding.errorLayout.visibility = View.GONE - binding.viewsRecyclerView.visibility = View.VISIBLE + viewModel.error.observe(viewLifecycleOwner, { error -> + if (error) { + snackbar.show() } }) diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt index 61d5b173..40091e68 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt @@ -43,9 +43,6 @@ constructor( init { loadData() - viewModelScope.launch { - jellyfinRepository.postCapabilities() - } } fun loadData() { @@ -53,6 +50,7 @@ constructor( _finishedLoading.value = false viewModelScope.launch { try { + jellyfinRepository.postCapabilities() val views: MutableList = mutableListOf() val userViews = jellyfinRepository.getUserViews() for (view in userViews) { @@ -89,7 +87,7 @@ constructor( _finishedLoading.value = true } catch (e: Exception) { - Timber.e(e.message.toString()) + Timber.e(e) _finishedLoading.value = true _error.value = true } diff --git a/app/src/main/res/layout/error.xml b/app/src/main/res/layout/error.xml deleted file mode 100644 index fb047e4c..00000000 --- a/app/src/main/res/layout/error.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -