mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-04-23 19:32:16 +00:00
Improve: Let coil handle error
Update: Move List Adapter to seperate package
This commit is contained in:
parent
65541e7f4f
commit
c338cb9bae
@ -1177,19 +1177,14 @@ class ProductAdapter(private val callbacks: Callbacks, private val columns: Int)
|
|||||||
val updateStatus = Payload.STATUS in payloads
|
val updateStatus = Payload.STATUS in payloads
|
||||||
val updateAll = !updateStatus
|
val updateAll = !updateStatus
|
||||||
if (updateAll) {
|
if (updateAll) {
|
||||||
if (item.product.icon.isNotEmpty() || item.product.metadataIcon.isNotEmpty()) {
|
holder.icon.load(
|
||||||
holder.icon.load(
|
CoilDownloader.createIconUri(
|
||||||
CoilDownloader.createIconUri(
|
holder.icon, item.product.packageName,
|
||||||
holder.icon, item.product.packageName,
|
item.product.icon, item.product.metadataIcon, item.repository
|
||||||
item.product.icon, item.product.metadataIcon, item.repository
|
)
|
||||||
)
|
) {
|
||||||
) {
|
placeholder(holder.progressIcon)
|
||||||
placeholder(holder.progressIcon)
|
error(holder.defaultIcon)
|
||||||
error(holder.defaultIcon)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
holder.icon.clear()
|
|
||||||
holder.icon.setImageDrawable(holder.defaultIcon)
|
|
||||||
}
|
}
|
||||||
holder.name.text = item.product.name
|
holder.name.text = item.product.name
|
||||||
holder.packageName.apply {
|
holder.packageName.apply {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.screen
|
package com.looker.droidify.ui.appsList
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.drawable.Drawable
|
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.utility.extension.text.nullIfEmpty
|
||||||
import com.looker.droidify.widget.CursorRecyclerAdapter
|
import com.looker.droidify.widget.CursorRecyclerAdapter
|
||||||
|
|
||||||
class ProductsAdapter(private val onClick: (ProductItem) -> Unit) :
|
class AppListAdapter(private val onClick: (ProductItem) -> Unit) :
|
||||||
CursorRecyclerAdapter<ProductsAdapter.ViewType, RecyclerView.ViewHolder>() {
|
CursorRecyclerAdapter<AppListAdapter.ViewType, RecyclerView.ViewHolder>() {
|
||||||
private var lastPosition = 0
|
private var lastPosition = 0
|
||||||
|
|
||||||
enum class ViewType { PRODUCT, LOADING, EMPTY }
|
enum class ViewType { PRODUCT, LOADING, EMPTY }
|
||||||
@ -147,20 +147,17 @@ class ProductsAdapter(private val onClick: (ProductItem) -> Unit) :
|
|||||||
holder.summary.visibility =
|
holder.summary.visibility =
|
||||||
if (holder.summary.text.isNotEmpty()) View.VISIBLE else View.GONE
|
if (holder.summary.text.isNotEmpty()) View.VISIBLE else View.GONE
|
||||||
val repository: Repository? = repositories[productItem.repositoryId]
|
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(
|
CoilDownloader.createIconUri(
|
||||||
holder.icon, productItem.packageName,
|
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()
|
transformations(RoundedCornersTransformation(4.toPx))
|
||||||
holder.icon.setImageDrawable(holder.defaultIcon)
|
placeholder(holder.progressIcon)
|
||||||
|
error(holder.defaultIcon)
|
||||||
}
|
}
|
||||||
holder.status.apply {
|
holder.status.apply {
|
||||||
if (productItem.canUpdate) {
|
if (productItem.canUpdate) {
|
@ -14,7 +14,6 @@ import com.looker.droidify.database.CursorOwner
|
|||||||
import com.looker.droidify.database.Database
|
import com.looker.droidify.database.Database
|
||||||
import com.looker.droidify.entity.ProductItem
|
import com.looker.droidify.entity.ProductItem
|
||||||
import com.looker.droidify.screen.BaseFragment
|
import com.looker.droidify.screen.BaseFragment
|
||||||
import com.looker.droidify.screen.ProductsAdapter
|
|
||||||
import com.looker.droidify.utility.RxUtils
|
import com.looker.droidify.utility.RxUtils
|
||||||
import com.looker.droidify.widget.RecyclerFastScroller
|
import com.looker.droidify.widget.RecyclerFastScroller
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||||
@ -61,8 +60,8 @@ class AppListFragment() : BaseFragment(), CursorOwner.Callback {
|
|||||||
isMotionEventSplittingEnabled = false
|
isMotionEventSplittingEnabled = false
|
||||||
isVerticalScrollBarEnabled = false
|
isVerticalScrollBarEnabled = false
|
||||||
setHasFixedSize(true)
|
setHasFixedSize(true)
|
||||||
recycledViewPool.setMaxRecycledViews(ProductsAdapter.ViewType.PRODUCT.ordinal, 30)
|
recycledViewPool.setMaxRecycledViews(AppListAdapter.ViewType.PRODUCT.ordinal, 30)
|
||||||
val adapter = ProductsAdapter { screenActivity.navigateProduct(it.packageName) }
|
val adapter = AppListAdapter { screenActivity.navigateProduct(it.packageName) }
|
||||||
this.adapter = adapter
|
this.adapter = adapter
|
||||||
RecyclerFastScroller(this)
|
RecyclerFastScroller(this)
|
||||||
recyclerView = this
|
recyclerView = this
|
||||||
@ -79,7 +78,7 @@ class AppListFragment() : BaseFragment(), CursorOwner.Callback {
|
|||||||
.flatMapSingle { RxUtils.querySingle { Database.RepositoryAdapter.getAll(it) } }
|
.flatMapSingle { RxUtils.querySingle { Database.RepositoryAdapter.getAll(it) } }
|
||||||
.map { list -> list.asSequence().map { Pair(it.id, it) }.toMap() }
|
.map { list -> list.asSequence().map { Pair(it.id, it) }.toMap() }
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe { (recyclerView?.adapter as? ProductsAdapter)?.repositories = it }
|
.subscribe { (recyclerView?.adapter as? AppListAdapter)?.repositories = it }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
@ -93,7 +92,7 @@ class AppListFragment() : BaseFragment(), CursorOwner.Callback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onCursorData(request: CursorOwner.Request, cursor: Cursor?) {
|
override fun onCursorData(request: CursorOwner.Request, cursor: Cursor?) {
|
||||||
(recyclerView?.adapter as? ProductsAdapter)?.apply {
|
(recyclerView?.adapter as? AppListAdapter)?.apply {
|
||||||
this.cursor = cursor
|
this.cursor = cursor
|
||||||
viewLifecycleOwner.lifecycleScope.launchWhenCreated {
|
viewLifecycleOwner.lifecycleScope.launchWhenCreated {
|
||||||
emptyText = when {
|
emptyText = when {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user