|
| 1 | +package fr.free.nrw.commons.explore.depictions |
| 2 | + |
| 3 | +import android.view.LayoutInflater |
| 4 | +import android.view.View |
| 5 | +import android.view.ViewGroup |
| 6 | +import androidx.annotation.LayoutRes |
| 7 | +import androidx.recyclerview.widget.DiffUtil |
| 8 | +import androidx.recyclerview.widget.ListAdapter |
| 9 | +import androidx.recyclerview.widget.RecyclerView |
| 10 | +import fr.free.nrw.commons.R |
| 11 | +import kotlinx.android.extensions.LayoutContainer |
| 12 | +import kotlinx.android.synthetic.main.list_item_load_more.* |
| 13 | + |
| 14 | +class FooterAdapter(private val onRefreshClicked: () -> Unit) : |
| 15 | + ListAdapter<FooterItem, FooterViewHolder>(object : |
| 16 | + DiffUtil.ItemCallback<FooterItem>() { |
| 17 | + override fun areItemsTheSame(oldItem: FooterItem, newItem: FooterItem) = oldItem == newItem |
| 18 | + |
| 19 | + override fun areContentsTheSame(oldItem: FooterItem, newItem: FooterItem) = |
| 20 | + oldItem == newItem |
| 21 | + }) { |
| 22 | + |
| 23 | + override fun getItemViewType(position: Int): Int { |
| 24 | + return getItem(position).ordinal |
| 25 | + } |
| 26 | + |
| 27 | + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = |
| 28 | + when (FooterItem.values()[viewType]) { |
| 29 | + FooterItem.LoadingItem -> LoadingViewHolder(parent.inflate(R.layout.list_item_progress)) |
| 30 | + FooterItem.RefreshItem -> RefreshViewHolder( |
| 31 | + parent.inflate(R.layout.list_item_load_more), |
| 32 | + onRefreshClicked |
| 33 | + ) |
| 34 | + } |
| 35 | + |
| 36 | + override fun onBindViewHolder(holder: FooterViewHolder, position: Int) {} |
| 37 | +} |
| 38 | + |
| 39 | +open class FooterViewHolder(override val containerView: View) : |
| 40 | + RecyclerView.ViewHolder(containerView), |
| 41 | + LayoutContainer |
| 42 | + |
| 43 | +class LoadingViewHolder(containerView: View) : FooterViewHolder(containerView) |
| 44 | +class RefreshViewHolder(containerView: View, onRefreshClicked: () -> Unit) : |
| 45 | + FooterViewHolder(containerView) { |
| 46 | + init { |
| 47 | + listItemLoadMoreButton.setOnClickListener { onRefreshClicked() } |
| 48 | + } |
| 49 | +} |
| 50 | + |
| 51 | +enum class FooterItem { LoadingItem, RefreshItem } |
| 52 | + |
| 53 | +fun ViewGroup.inflate(@LayoutRes layoutId: Int, attachToRoot: Boolean = false): View = |
| 54 | + LayoutInflater.from(context).inflate(layoutId, this, attachToRoot) |
0 commit comments