63 lines
2.5 KiB
Kotlin
63 lines
2.5 KiB
Kotlin
|
package com.adlerosn.brasilfurfest.schedule.adapters
|
||
|
|
||
|
import android.content.res.ColorStateList
|
||
|
import android.support.v7.util.DiffUtil
|
||
|
import android.view.ViewGroup
|
||
|
import com.adlerosn.brasilfurfest.R
|
||
|
import com.adlerosn.brasilfurfest.helper.ListDiffCallback
|
||
|
import com.adlerosn.brasilfurfest.helper.inflate
|
||
|
import com.adlerosn.brasilfurfest.helper.layoutInflater
|
||
|
import com.adlerosn.brasilfurfest.helper.runtimeLanguage
|
||
|
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<T: FilterableNamedColoredAttribute>(
|
||
|
initialData: List<Pair<T?,()->Any?>>,
|
||
|
private val displayChooser: ()->Any?
|
||
|
): RecyclerViewAdapter() {
|
||
|
private var dataset = initialData.toList()
|
||
|
|
||
|
fun onDataChanged(newData: List<Pair<T?,()->Any?>>){
|
||
|
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[view.context.runtimeLanguage]
|
||
|
view.tag_color.imageTintList = ColorStateList.valueOf(item.first.color)
|
||
|
view.setOnClickListener { item.second() }
|
||
|
}
|
||
|
|
||
|
}
|