package de.pixart.messenger.ui.adapter; import android.databinding.DataBindingUtil; import android.support.annotation.NonNull; import android.support.v7.recyclerview.extensions.ListAdapter; import android.support.v7.util.DiffUtil; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import java.util.Locale; import de.pixart.messenger.R; import de.pixart.messenger.databinding.SearchResultItemBinding; import de.pixart.messenger.http.services.MuclumbusService; import de.pixart.messenger.ui.util.AvatarWorkerTask; public class ChannelSearchResultAdapter extends ListAdapter { private OnChannelSearchResultSelected listener; private static final DiffUtil.ItemCallback DIFF = new DiffUtil.ItemCallback() { @Override public boolean areItemsTheSame(@NonNull MuclumbusService.Room a, @NonNull MuclumbusService.Room b) { return a.address != null && a.address.equals(b.address); } @Override public boolean areContentsTheSame(@NonNull MuclumbusService.Room a, @NonNull MuclumbusService.Room b) { return a.equals(b); } }; public ChannelSearchResultAdapter() { super(DIFF); } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { return new ViewHolder(DataBindingUtil.inflate(LayoutInflater.from(viewGroup.getContext()), R.layout.search_result_item, viewGroup, false)); } @Override public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) { final MuclumbusService.Room searchResult = getItem(position); viewHolder.binding.name.setText(searchResult.getName()); final String description = searchResult.getDescription(); final String language = searchResult.getLanguage(); if (TextUtils.isEmpty(description)) { viewHolder.binding.description.setVisibility(View.GONE); } else { viewHolder.binding.description.setText(description); viewHolder.binding.description.setVisibility(View.VISIBLE); } if (language == null || language.length() != 2) { viewHolder.binding.language.setVisibility(View.GONE); } else { viewHolder.binding.language.setText("(" + language.toUpperCase(Locale.ENGLISH) + ")"); viewHolder.binding.language.setVisibility(View.VISIBLE); } viewHolder.binding.room.setText(searchResult.getRoom().asBareJid().toString()); AvatarWorkerTask.loadAvatar(searchResult, viewHolder.binding.avatar, R.dimen.avatar); viewHolder.binding.getRoot().setOnClickListener(v -> listener.onChannelSearchResult(searchResult)); } public void setOnChannelSearchResultSelectedListener(OnChannelSearchResultSelected listener) { this.listener = listener; } public static class ViewHolder extends RecyclerView.ViewHolder { private final SearchResultItemBinding binding; private ViewHolder(SearchResultItemBinding binding) { super(binding.getRoot()); this.binding = binding; } } public interface OnChannelSearchResultSelected { void onChannelSearchResult(MuclumbusService.Room result); } }