package com.topjohnwu.magisk.arch import androidx.databinding.ViewDataBinding import com.topjohnwu.magisk.databinding.AnyDiffRvItem import com.topjohnwu.magisk.databinding.DiffRvItem import com.topjohnwu.magisk.databinding.RvItem import com.topjohnwu.magisk.utils.DiffObservableList import com.topjohnwu.magisk.utils.FilterableDiffObservableList import me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter import me.tatarka.bindingcollectionadapter2.ItemBinding import me.tatarka.bindingcollectionadapter2.OnItemBind fun diffListOf() = DiffObservableList(DiffRvItem.callback()) fun diffListOf(newItems: List) = DiffObservableList(DiffRvItem.callback()).also { it.update(newItems) } fun filterableListOf() = FilterableDiffObservableList(DiffRvItem.callback()) fun adapterOf() = object : BindingRecyclerViewAdapter() { override fun onBindBinding( binding: ViewDataBinding, variableId: Int, layoutRes: Int, position: Int, item: T ) { super.onBindBinding(binding, variableId, layoutRes, position, item) item.onBindingBound(binding) } } inline fun itemBindingOf( crossinline body: (ItemBinding<*>) -> Unit = {} ) = OnItemBind { itemBinding, _, item -> item.bind(itemBinding) body(itemBinding) }