Migrate favourite categories to AdapterDelegates
parent
fa02cfd7e8
commit
53e36d23b1
@ -1,49 +1,27 @@
|
|||||||
package org.koitharu.kotatsu.favourites.ui.categories
|
package org.koitharu.kotatsu.favourites.ui.categories
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
import android.view.MotionEvent
|
import com.hannesdorfmann.adapterdelegates4.AsyncListDifferDelegationAdapter
|
||||||
import android.view.ViewGroup
|
import org.koitharu.kotatsu.base.ui.list.OnListItemClickListener
|
||||||
import kotlinx.android.synthetic.main.item_category.*
|
|
||||||
import org.koitharu.kotatsu.base.ui.list.BaseRecyclerAdapter
|
|
||||||
import org.koitharu.kotatsu.base.ui.list.BaseViewHolder
|
|
||||||
import org.koitharu.kotatsu.base.ui.list.OnRecyclerItemClickListener
|
|
||||||
import org.koitharu.kotatsu.core.model.FavouriteCategory
|
import org.koitharu.kotatsu.core.model.FavouriteCategory
|
||||||
|
import kotlin.jvm.internal.Intrinsics
|
||||||
|
|
||||||
class CategoriesAdapter(private val onItemClickListener: OnRecyclerItemClickListener<FavouriteCategory>) :
|
class CategoriesAdapter(
|
||||||
BaseRecyclerAdapter<FavouriteCategory, Unit>() {
|
onItemClickListener: OnListItemClickListener<FavouriteCategory>
|
||||||
|
) : AsyncListDifferDelegationAdapter<FavouriteCategory>(DiffCallback()) {
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup) = CategoryHolder(parent)
|
init {
|
||||||
|
delegatesManager.addDelegate(categoryAD(onItemClickListener))
|
||||||
override fun onGetItemId(item: FavouriteCategory) = item.id
|
}
|
||||||
|
|
||||||
override fun getExtra(item: FavouriteCategory, position: Int) = Unit
|
private class DiffCallback : DiffUtil.ItemCallback<FavouriteCategory>() {
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
override fun areItemsTheSame(oldItem: FavouriteCategory, newItem: FavouriteCategory): Boolean {
|
||||||
override fun onViewAttachedToWindow(holder: BaseViewHolder<FavouriteCategory, Unit>) {
|
return oldItem.id == newItem.id
|
||||||
holder.imageView_more.setOnClickListener { v ->
|
|
||||||
onItemClickListener.onItemClick(holder.requireData(), holder.bindingAdapterPosition, v)
|
|
||||||
}
|
|
||||||
holder.imageView_handle.setOnTouchListener { v, event ->
|
|
||||||
if (event.actionMasked == MotionEvent.ACTION_DOWN) {
|
|
||||||
onItemClickListener.onItemLongClick(
|
|
||||||
holder.requireData(),
|
|
||||||
holder.bindingAdapterPosition,
|
|
||||||
v
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewDetachedFromWindow(holder: BaseViewHolder<FavouriteCategory, Unit>) {
|
override fun areContentsTheSame(oldItem: FavouriteCategory, newItem: FavouriteCategory): Boolean {
|
||||||
holder.imageView_more.setOnClickListener(null)
|
return Intrinsics.areEqual(oldItem, newItem)
|
||||||
holder.imageView_handle.setOnTouchListener(null)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun moveItem(oldPos: Int, newPos: Int) {
|
|
||||||
val item = dataSet.removeAt(oldPos)
|
|
||||||
dataSet.add(newPos, item)
|
|
||||||
notifyItemMoved(oldPos, newPos)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
package org.koitharu.kotatsu.favourites.ui.categories
|
||||||
|
|
||||||
|
import android.view.MotionEvent
|
||||||
|
import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateLayoutContainer
|
||||||
|
import kotlinx.android.synthetic.main.item_category.*
|
||||||
|
import org.koitharu.kotatsu.R
|
||||||
|
import org.koitharu.kotatsu.base.ui.list.OnListItemClickListener
|
||||||
|
import org.koitharu.kotatsu.core.model.FavouriteCategory
|
||||||
|
|
||||||
|
fun categoryAD(
|
||||||
|
clickListener: OnListItemClickListener<FavouriteCategory>
|
||||||
|
) = adapterDelegateLayoutContainer<FavouriteCategory, FavouriteCategory>(R.layout.item_category) {
|
||||||
|
|
||||||
|
imageView_more.setOnClickListener {
|
||||||
|
clickListener.onItemClick(item, it)
|
||||||
|
}
|
||||||
|
@Suppress("ClickableViewAccessibility")
|
||||||
|
imageView_handle.setOnTouchListener { v, event ->
|
||||||
|
if (event.actionMasked == MotionEvent.ACTION_DOWN) {
|
||||||
|
clickListener.onItemLongClick(item, v)
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bind {
|
||||||
|
textView_title.text = item.title
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,15 +0,0 @@
|
|||||||
package org.koitharu.kotatsu.favourites.ui.categories
|
|
||||||
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import kotlinx.android.synthetic.main.item_category.*
|
|
||||||
import org.koitharu.kotatsu.R
|
|
||||||
import org.koitharu.kotatsu.base.ui.list.BaseViewHolder
|
|
||||||
import org.koitharu.kotatsu.core.model.FavouriteCategory
|
|
||||||
|
|
||||||
class CategoryHolder(parent: ViewGroup) :
|
|
||||||
BaseViewHolder<FavouriteCategory, Unit>(parent, R.layout.item_category) {
|
|
||||||
|
|
||||||
override fun onBind(data: FavouriteCategory, extra: Unit) {
|
|
||||||
textView_title.text = data.title
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue