diff --git a/app/src/main/java/fr/free/nrw/commons/explore/depictions/DepictionAdapter.kt b/app/src/main/java/fr/free/nrw/commons/explore/depictions/DepictionAdapter.kt index ddd385080..39a367eff 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/depictions/DepictionAdapter.kt +++ b/app/src/main/java/fr/free/nrw/commons/explore/depictions/DepictionAdapter.kt @@ -1,19 +1,12 @@ package fr.free.nrw.commons.explore.depictions -import androidx.recyclerview.widget.DiffUtil -import fr.free.nrw.commons.upload.categories.BaseAdapter +import fr.free.nrw.commons.upload.categories.BaseDelegateAdapter import fr.free.nrw.commons.upload.structure.depictions.DepictedItem -class DepictionAdapter(clickListener: (DepictedItem) -> Unit) : BaseAdapter( - object : DiffUtil.ItemCallback() { - override fun areItemsTheSame(oldItem: DepictedItem, newItem: DepictedItem) = - oldItem.id == newItem.id - - override fun areContentsTheSame(oldItem: DepictedItem, newItem: DepictedItem) = - oldItem == newItem - }, - depictionDelegate(clickListener) +class DepictionAdapter(clickListener: (DepictedItem) -> Unit) : BaseDelegateAdapter( + depictionDelegate(clickListener), + areItemsTheSame = { oldItem, newItem -> oldItem.id == newItem.id } ) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/categories/BaseDelegateAdapter.kt b/app/src/main/java/fr/free/nrw/commons/upload/categories/BaseDelegateAdapter.kt new file mode 100644 index 000000000..16592e0f3 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/upload/categories/BaseDelegateAdapter.kt @@ -0,0 +1,34 @@ +package fr.free.nrw.commons.upload.categories + +import androidx.recyclerview.widget.DiffUtil +import com.hannesdorfmann.adapterdelegates4.AdapterDelegate +import com.hannesdorfmann.adapterdelegates4.AsyncListDifferDelegationAdapter + + +abstract class BaseDelegateAdapter( + vararg delegates: AdapterDelegate>, + areItemsTheSame: (T, T) -> Boolean, + areContentsTheSame: (T, T) -> Boolean = { old, new -> old == new } +) : AsyncListDifferDelegationAdapter( + object : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: T, newItem: T) = + areItemsTheSame(oldItem, newItem) + + override fun areContentsTheSame(oldItem: T, newItem: T) = + areContentsTheSame(oldItem, newItem) + }, + *delegates +) { + fun indexOf(item: T): Int = items.indexOf(item) + + fun getItemAt(position: Int) = items[position] + + fun addAll(newResults: List) { + items = (items ?: emptyList()) + newResults + } + + fun clear() { + items = emptyList() + } +} + diff --git a/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoryAdapter.kt b/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoryAdapter.kt index 81ebe6f49..99bd2ff17 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoryAdapter.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoryAdapter.kt @@ -1,18 +1,14 @@ package fr.free.nrw.commons.upload.categories -import androidx.recyclerview.widget.DiffUtil import fr.free.nrw.commons.category.CategoryItem class UploadCategoryAdapter(onCategoryClicked: (CategoryItem) -> Unit) : - BaseAdapter( - object : DiffUtil.ItemCallback() { - override fun areItemsTheSame(oldItem: CategoryItem, newItem: CategoryItem) = - oldItem.name == newItem.name - - override fun areContentsTheSame(oldItem: CategoryItem, newItem: CategoryItem) = - oldItem.name == newItem.name && oldItem.isSelected == newItem.isSelected - }, - uploadCategoryDelegate(onCategoryClicked) + BaseDelegateAdapter( + uploadCategoryDelegate(onCategoryClicked), + areItemsTheSame = { oldItem, newItem -> oldItem.name == newItem.name }, + areContentsTheSame = { oldItem, newItem -> + oldItem.name == newItem.name && oldItem.isSelected == newItem.isSelected + } ) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoryAdapterDelegates.kt b/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoryAdapterDelegates.kt index cbda77fd2..238b5b9de 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoryAdapterDelegates.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoryAdapterDelegates.kt @@ -5,7 +5,6 @@ import fr.free.nrw.commons.R import fr.free.nrw.commons.category.CategoryItem import kotlinx.android.synthetic.main.layout_upload_categories_item.* - fun uploadCategoryDelegate(onCategoryClicked: (CategoryItem) -> Unit) = adapterDelegateLayoutContainer(R.layout.layout_upload_categories_item) { containerView.setOnClickListener {