ServersAdapter.kt
package chat.rocket.android.servers.adapter
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import chat.rocket.android.R
import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.util.extensions.inflate
private const val VIEW_TYPE_SERVER = 0
private const val VIEW_TYPE_ADD_NEW_SERVER = 1
class ServersAdapter(
private val servers: List<Account>,
private val currentServerUrl: String,
private val selector: Selector
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when (viewType) {
VIEW_TYPE_SERVER -> ServerViewHolder(
parent.inflate(R.layout.item_server), currentServerUrl
)
else -> AddNewServerViewHolder(parent.inflate(R.layout.item_add_new_server))
}
}
override fun getItemCount() = servers.size + 1
override fun getItemViewType(position: Int): Int {
return when {
position < servers.size -> VIEW_TYPE_SERVER
else -> VIEW_TYPE_ADD_NEW_SERVER
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is ServerViewHolder -> bindServerViewHolder(holder, position)
is AddNewServerViewHolder -> bindAddNewServerViewHolder(holder)
}
}
private fun bindServerViewHolder(holder: ServerViewHolder, position: Int) {
val account = servers[position]
holder.bind(account)
holder.itemView.setOnClickListener { selector.onServerSelected(account.serverUrl) }
}
private fun bindAddNewServerViewHolder(holder: AddNewServerViewHolder) {
holder.itemView.setOnClickListener { selector.onAddNewServerSelected() }
}
}
interface Selector {
fun onServerSelected(serverUrl: String)
fun onAddNewServerSelected()
}