package com.adlerosn.brasilfurfest.schedule.adapters import android.content.res.ColorStateList import androidx.recyclerview.widget.DiffUtil import android.view.ViewGroup import com.adlerosn.brasilfurfest.R import com.adlerosn.brasilfurfest.helper.* import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.convention.FilterableNamedColoredAttribute import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.dataholder.PeekableEvent import com.adlerosn.brasilfurfest.schedule.viewHolders.RecyclerViewHolder import kotlinx.android.synthetic.main.activity_search_filter_circle.view.* import kotlinx.android.synthetic.main.activity_search_filter_criteria_itemdialog.view.* class FilterCriteriaRecyclerViewAdapter( initialData: ListAny?>>, private val displayChooser: ()->Any? ): RecyclerViewAdapter() { private var dataset = initialData.toList() fun onDataChanged(newData: ListAny?>>){ val diff = DiffUtil.calculateDiff( ListDiffCallback( dataset.map { it.first }, newData.map { it.first } ) ) dataset = newData.toList() diff.dispatchUpdatesTo(this) } override fun getItemCount(): Int = dataset.size override fun getItemViewType(position: Int) = if (dataset[position].first != null) 0 else 1 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = RecyclerViewHolder( parent.context.layoutInflater.inflate( if (viewType==0) R.layout.activity_search_filter_criteria_item else R.layout.activity_search_filter_criteria_add ).apply { if (viewType==1) { setOnClickListener { displayChooser() } } } ) override fun onBindViewHolder(viewHolder: RecyclerViewHolder, position: Int) { if (getItemViewType(position)==1) return val view = viewHolder.itemView val item = dataset[position].let { Pair(it.first!!, it.second) } view.tag_label.text = item.first.names.solved view.tag_color.imageTintList = ColorStateList.valueOf(item.first.color) view.setOnClickListener { item.second() } } }