From c338cb9baea6c1671f681b944975a3d9f6330957 Mon Sep 17 00:00:00 2001 From: LooKeR Date: Wed, 10 Nov 2021 16:29:03 +0530 Subject: [PATCH] Improve: Let coil handle error Update: Move List Adapter to seperate package --- .../looker/droidify/screen/ProductAdapter.kt | 21 +++++++---------- .../appsList/AppListAdapter.kt} | 23 ++++++++----------- .../droidify/ui/appsList/AppListFragment.kt | 9 ++++---- 3 files changed, 22 insertions(+), 31 deletions(-) rename src/main/kotlin/com/looker/droidify/{screen/ProductsAdapter.kt => ui/appsList/AppListAdapter.kt} (92%) diff --git a/src/main/kotlin/com/looker/droidify/screen/ProductAdapter.kt b/src/main/kotlin/com/looker/droidify/screen/ProductAdapter.kt index 137fad10..ecd9c829 100644 --- a/src/main/kotlin/com/looker/droidify/screen/ProductAdapter.kt +++ b/src/main/kotlin/com/looker/droidify/screen/ProductAdapter.kt @@ -1177,19 +1177,14 @@ class ProductAdapter(private val callbacks: Callbacks, private val columns: Int) val updateStatus = Payload.STATUS in payloads val updateAll = !updateStatus if (updateAll) { - if (item.product.icon.isNotEmpty() || item.product.metadataIcon.isNotEmpty()) { - holder.icon.load( - CoilDownloader.createIconUri( - holder.icon, item.product.packageName, - item.product.icon, item.product.metadataIcon, item.repository - ) - ) { - placeholder(holder.progressIcon) - error(holder.defaultIcon) - } - } else { - holder.icon.clear() - holder.icon.setImageDrawable(holder.defaultIcon) + holder.icon.load( + CoilDownloader.createIconUri( + holder.icon, item.product.packageName, + item.product.icon, item.product.metadataIcon, item.repository + ) + ) { + placeholder(holder.progressIcon) + error(holder.defaultIcon) } holder.name.text = item.product.name holder.packageName.apply { diff --git a/src/main/kotlin/com/looker/droidify/screen/ProductsAdapter.kt b/src/main/kotlin/com/looker/droidify/ui/appsList/AppListAdapter.kt similarity index 92% rename from src/main/kotlin/com/looker/droidify/screen/ProductsAdapter.kt rename to src/main/kotlin/com/looker/droidify/ui/appsList/AppListAdapter.kt index 84fccbbd..1ee0e413 100644 --- a/src/main/kotlin/com/looker/droidify/screen/ProductsAdapter.kt +++ b/src/main/kotlin/com/looker/droidify/ui/appsList/AppListAdapter.kt @@ -1,4 +1,4 @@ -package com.looker.droidify.screen +package com.looker.droidify.ui.appsList import android.content.Context import android.graphics.drawable.Drawable @@ -25,8 +25,8 @@ import com.looker.droidify.utility.extension.resources.* import com.looker.droidify.utility.extension.text.nullIfEmpty import com.looker.droidify.widget.CursorRecyclerAdapter -class ProductsAdapter(private val onClick: (ProductItem) -> Unit) : - CursorRecyclerAdapter() { +class AppListAdapter(private val onClick: (ProductItem) -> Unit) : + CursorRecyclerAdapter() { private var lastPosition = 0 enum class ViewType { PRODUCT, LOADING, EMPTY } @@ -147,20 +147,17 @@ class ProductsAdapter(private val onClick: (ProductItem) -> Unit) : holder.summary.visibility = if (holder.summary.text.isNotEmpty()) View.VISIBLE else View.GONE val repository: Repository? = repositories[productItem.repositoryId] - if ((productItem.icon.isNotEmpty() || productItem.metadataIcon.isNotEmpty()) && repository != null) { - holder.icon.load( + holder.icon.load( + repository?.let { CoilDownloader.createIconUri( holder.icon, productItem.packageName, - productItem.icon, productItem.metadataIcon, repository + productItem.icon, productItem.metadataIcon, it ) - ) { - transformations(RoundedCornersTransformation(4.toPx)) - placeholder(holder.progressIcon) - error(holder.defaultIcon) } - } else { - holder.icon.clear() - holder.icon.setImageDrawable(holder.defaultIcon) + ) { + transformations(RoundedCornersTransformation(4.toPx)) + placeholder(holder.progressIcon) + error(holder.defaultIcon) } holder.status.apply { if (productItem.canUpdate) { diff --git a/src/main/kotlin/com/looker/droidify/ui/appsList/AppListFragment.kt b/src/main/kotlin/com/looker/droidify/ui/appsList/AppListFragment.kt index e4572a07..8f6a4d07 100644 --- a/src/main/kotlin/com/looker/droidify/ui/appsList/AppListFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/appsList/AppListFragment.kt @@ -14,7 +14,6 @@ import com.looker.droidify.database.CursorOwner import com.looker.droidify.database.Database import com.looker.droidify.entity.ProductItem import com.looker.droidify.screen.BaseFragment -import com.looker.droidify.screen.ProductsAdapter import com.looker.droidify.utility.RxUtils import com.looker.droidify.widget.RecyclerFastScroller import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers @@ -61,8 +60,8 @@ class AppListFragment() : BaseFragment(), CursorOwner.Callback { isMotionEventSplittingEnabled = false isVerticalScrollBarEnabled = false setHasFixedSize(true) - recycledViewPool.setMaxRecycledViews(ProductsAdapter.ViewType.PRODUCT.ordinal, 30) - val adapter = ProductsAdapter { screenActivity.navigateProduct(it.packageName) } + recycledViewPool.setMaxRecycledViews(AppListAdapter.ViewType.PRODUCT.ordinal, 30) + val adapter = AppListAdapter { screenActivity.navigateProduct(it.packageName) } this.adapter = adapter RecyclerFastScroller(this) recyclerView = this @@ -79,7 +78,7 @@ class AppListFragment() : BaseFragment(), CursorOwner.Callback { .flatMapSingle { RxUtils.querySingle { Database.RepositoryAdapter.getAll(it) } } .map { list -> list.asSequence().map { Pair(it.id, it) }.toMap() } .observeOn(AndroidSchedulers.mainThread()) - .subscribe { (recyclerView?.adapter as? ProductsAdapter)?.repositories = it } + .subscribe { (recyclerView?.adapter as? AppListAdapter)?.repositories = it } } override fun onDestroyView() { @@ -93,7 +92,7 @@ class AppListFragment() : BaseFragment(), CursorOwner.Callback { } override fun onCursorData(request: CursorOwner.Request, cursor: Cursor?) { - (recyclerView?.adapter as? ProductsAdapter)?.apply { + (recyclerView?.adapter as? AppListAdapter)?.apply { this.cursor = cursor viewLifecycleOwner.lifecycleScope.launchWhenCreated { emptyText = when {