main.com.sceyt.chatuikit.presentation.components.startchat.adapters.UsersAdapter.kt Maven / Gradle / Ivy
package com.sceyt.chatuikit.presentation.components.startchat.adapters
import android.annotation.SuppressLint
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.sceyt.chatuikit.persistence.extensions.toArrayList
import com.sceyt.chatuikit.presentation.root.BaseViewHolder
import com.sceyt.chatuikit.presentation.components.select_users.adapters.UserItem
import com.sceyt.chatuikit.presentation.components.startchat.adapters.holders.UserViewHolderFactory
import com.sceyt.chatuikit.shared.utils.MyDiffUtil
class UsersAdapter(
list: List,
private val factory: UserViewHolderFactory,
) : RecyclerView.Adapter>() {
private var usersList: ArrayList = list.toArrayList()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
return factory.createViewHolder(parent, viewType)
}
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
holder.bind(usersList[position])
}
override fun getItemViewType(position: Int): Int {
return factory.getItemViewType(usersList[position])
}
override fun getItemCount(): Int {
return usersList.size
}
private fun removeLoading() {
if (usersList.remove(UserItem.LoadingMore))
notifyItemRemoved(usersList.lastIndex + 1)
}
@SuppressLint("NotifyDataSetChanged")
fun addNewItems(data: List) {
removeLoading()
if (data.isEmpty()) return
usersList.addAll(data)
if (data.size == usersList.size)
notifyDataSetChanged()
else
notifyItemRangeInserted(usersList.size - data.size, data.size)
}
fun notifyUpdate(list: List) {
val myDiffUtil = MyDiffUtil(usersList, list)
val productDiffResult = DiffUtil.calculateDiff(myDiffUtil, true)
productDiffResult.dispatchUpdatesTo(this)
usersList = list.toArrayList()
}
fun interface ClickListener {
fun onClick(user: UserItem.User)
}
}