I have an activity that contains the following List adapter to show some information about github repositories. Now I need to implement that when on a long-press on a list item show a dialog to ask if should go to repository html_url or owner html_url which is then opened in the browser.
What would be the best way to implement this? Should the logic be in the activity or in the ListAdapater/ViewHolder?
RepositoryListAdapter
class RepositoryListAdapter : ListAdapter<Repo, RepositoryListAdapter.RepositoryViewHolder>(
RepositoryDiffCallback()
) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
RepositoryViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.item_repository,
parent,
false
)
)
override fun onBindViewHolder(holder: RepositoryViewHolder, position: Int) {
holder.bind(getItem(position))
}
class RepositoryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
fun bind(repository: Repo) = with(itemView) {
repositoryName.text = repository.name
repositoryDescription.text = repository.description
ownerLogin.text = repository.owner.login
Glide.with(context)
.load(repository.owner.avatarUrl)
.into(imageView)
if (repository.forksCount > 0) {
itemView.setBackgroundColor(ContextCompat.getColor(context, R.color.light_green))
} else {
itemView.setBackgroundColor(ContextCompat.getColor(context, android.R.color.white))
}
}
}
}
class RepositoryDiffCallback : DiffUtil.ItemCallback<Repo>() {
override fun areItemsTheSame(oldItem: Repo, newItem: Repo): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: Repo, newItem: Repo): Boolean {
return oldItem == newItem
}
}