From 0673aca1c95ade37e2bf9194b8062454819f85ac Mon Sep 17 00:00:00 2001 From: Drjacky Date: Wed, 27 Dec 2023 11:01:03 +0000 Subject: [PATCH] Fix empty screen after screen off on on no internet error screen --- .../kotlin/app/web/drjackycv/buildsrc/Depends.kt | 2 +- .../presentation/base/viewmodel/BaseViewModel.kt | 4 ++++ .../products/productlist/ProductsListFragment.kt | 16 ++++++++++++++-- .../productlist/ProductsListViewModel.kt | 1 + 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/kotlin/app/web/drjackycv/buildsrc/Depends.kt b/buildSrc/src/main/kotlin/app/web/drjackycv/buildsrc/Depends.kt index e5406817..354cd9da 100644 --- a/buildSrc/src/main/kotlin/app/web/drjackycv/buildsrc/Depends.kt +++ b/buildSrc/src/main/kotlin/app/web/drjackycv/buildsrc/Depends.kt @@ -28,7 +28,7 @@ object Depends { const val materialVersion = "1.6.0-alpha03" const val coreKtxVersion = "1.9.0" const val navigationVersion = "2.5.2" - const val pagingVersion = "3.1.1" + const val pagingVersion = "3.2.1" const val multidexVersion = "2.0.1" const val fragmentExtVersion = "1.5.0-alpha03" const val recyclerviewVersion = "1.3.0-rc01" diff --git a/presentation/src/main/kotlin/app/web/drjackycv/presentation/base/viewmodel/BaseViewModel.kt b/presentation/src/main/kotlin/app/web/drjackycv/presentation/base/viewmodel/BaseViewModel.kt index 449e2a64..eb945294 100755 --- a/presentation/src/main/kotlin/app/web/drjackycv/presentation/base/viewmodel/BaseViewModel.kt +++ b/presentation/src/main/kotlin/app/web/drjackycv/presentation/base/viewmodel/BaseViewModel.kt @@ -56,15 +56,19 @@ open class BaseViewModel @Inject constructor() : ViewModel(), is Failure.NoInternet -> { Failure.NoInternet(resources.getString(R.string.error_no_internet)) } + is Failure.Api -> { Failure.Api(throwable.msg) } + is Failure.Timeout -> { Failure.Timeout(resources.getString(R.string.error_timeout)) } + is Failure.Unknown -> { Failure.Unknown(resources.getString(R.string.error_unknown)) } + else -> { Failure.Unknown(resources.getString(R.string.error_unknown)) } diff --git a/presentation/src/main/kotlin/app/web/drjackycv/presentation/products/productlist/ProductsListFragment.kt b/presentation/src/main/kotlin/app/web/drjackycv/presentation/products/productlist/ProductsListFragment.kt index 7c724216..1d5d99ce 100755 --- a/presentation/src/main/kotlin/app/web/drjackycv/presentation/products/productlist/ProductsListFragment.kt +++ b/presentation/src/main/kotlin/app/web/drjackycv/presentation/products/productlist/ProductsListFragment.kt @@ -17,7 +17,12 @@ import app.web.drjackycv.presentation.R import app.web.drjackycv.presentation.base.adapter.LoadingStateAdapter import app.web.drjackycv.presentation.base.adapter.RecyclerItem import app.web.drjackycv.presentation.databinding.FragmentProductListBinding -import app.web.drjackycv.presentation.extension.* +import app.web.drjackycv.presentation.extension.collectIn +import app.web.drjackycv.presentation.extension.gone +import app.web.drjackycv.presentation.extension.invisible +import app.web.drjackycv.presentation.extension.observe +import app.web.drjackycv.presentation.extension.viewBinding +import app.web.drjackycv.presentation.extension.visible import app.web.drjackycv.presentation.products.choose.ChoosePathType import app.web.drjackycv.presentation.products.entity.BeerUI import com.google.android.material.transition.platform.Hold @@ -72,6 +77,7 @@ class ProductsListFragment : Fragment(R.layout.fragment_product_list) { ChoosePathType.RX -> { setupView() } + ChoosePathType.COROUTINE -> { setupViewByCoroutine() } @@ -109,7 +115,6 @@ class ProductsListFragment : Fragment(R.layout.fragment_product_list) { } private fun loadingUI(isLoading: Boolean) { - binding.inclItemError.itemErrorContainer.gone() if (isLoading) { binding.inclItemLoading.itemLoadingContainer.visible() } else { @@ -124,9 +129,11 @@ class ProductsListFragment : Fragment(R.layout.fragment_product_list) { is Failure.NoInternet, is Failure.Api, is Failure.Timeout -> { setupErrorItem(failure) } + is Failure.Unknown -> { setupErrorItem(failure) } + else -> { binding.inclItemError.itemErrorMessage.text = failure.message binding.inclItemError.itemErrorRetryBtn.invisible() @@ -152,8 +159,10 @@ class ProductsListFragment : Fragment(R.layout.fragment_product_list) { private fun adapterLoadingErrorHandling(combinedLoadStates: CombinedLoadStates) { if (combinedLoadStates.refresh is LoadState.Loading) { + binding.inclItemError.itemErrorContainer.gone() loadingUI(true) } else { + binding.inclItemError.itemErrorContainer.gone() loadingUI(false) val error = when { combinedLoadStates.prepend is LoadState.Error -> combinedLoadStates.prepend as LoadState.Error @@ -164,12 +173,15 @@ class ProductsListFragment : Fragment(R.layout.fragment_product_list) { else -> null } error?.run { + binding.inclItemError.itemErrorContainer.visible() + loadingUI(false) productsListViewModel.handleFailure(this.error) { retryFetchData() } } } } private fun retryFetchData() { + binding.inclItemError.itemErrorContainer.gone() loadingUI(false) binding.productListRecyclerView.visible() productsListAdapter.retry() diff --git a/presentation/src/main/kotlin/app/web/drjackycv/presentation/products/productlist/ProductsListViewModel.kt b/presentation/src/main/kotlin/app/web/drjackycv/presentation/products/productlist/ProductsListViewModel.kt index ab78129e..ea532cd3 100755 --- a/presentation/src/main/kotlin/app/web/drjackycv/presentation/products/productlist/ProductsListViewModel.kt +++ b/presentation/src/main/kotlin/app/web/drjackycv/presentation/products/productlist/ProductsListViewModel.kt @@ -68,6 +68,7 @@ class ProductsListViewModel @Inject constructor( ChoosePathType.RX -> { getProductsByRxPath(ids) } + ChoosePathType.COROUTINE -> { viewModelScope.launch { _productsListByCoroutine.value = getProductsByCoroutinePath(ids).first()