ChannelSearchResultAdapter.java

 1package eu.siacs.conversations.ui.adapter;
 2
 3import android.databinding.DataBindingUtil;
 4import android.support.annotation.NonNull;
 5import android.support.v7.recyclerview.extensions.ListAdapter;
 6import android.support.v7.util.DiffUtil;
 7import android.support.v7.widget.RecyclerView;
 8import android.text.TextUtils;
 9import android.view.LayoutInflater;
10import android.view.View;
11import android.view.ViewGroup;
12
13import java.util.Locale;
14
15import eu.siacs.conversations.R;
16import eu.siacs.conversations.databinding.SearchResultItemBinding;
17import eu.siacs.conversations.http.services.MuclumbusService;
18import eu.siacs.conversations.ui.util.AvatarWorkerTask;
19import rocks.xmpp.addr.Jid;
20
21public class ChannelSearchResultAdapter extends ListAdapter<MuclumbusService.Room, ChannelSearchResultAdapter.ViewHolder> {
22
23    private OnChannelSearchResultSelected listener;
24
25    private static final DiffUtil.ItemCallback<MuclumbusService.Room> DIFF = new DiffUtil.ItemCallback<MuclumbusService.Room>() {
26        @Override
27        public boolean areItemsTheSame(@NonNull MuclumbusService.Room a, @NonNull MuclumbusService.Room b) {
28            return a.address != null && a.address.equals(b.address);
29        }
30
31        @Override
32        public boolean areContentsTheSame(@NonNull MuclumbusService.Room a, @NonNull MuclumbusService.Room b) {
33            return a.equals(b);
34        }
35    };
36
37    public ChannelSearchResultAdapter() {
38        super(DIFF);
39    }
40
41    @NonNull
42    @Override
43    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
44        return new ViewHolder(DataBindingUtil.inflate(LayoutInflater.from(viewGroup.getContext()), R.layout.search_result_item, viewGroup, false));
45    }
46
47    @Override
48    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {
49        final MuclumbusService.Room searchResult = getItem(position);
50        viewHolder.binding.name.setText(searchResult.getName());
51        final String description = searchResult.getDescription();
52        final String language = searchResult.getLanguage();
53        if (TextUtils.isEmpty(description)) {
54            viewHolder.binding.description.setVisibility(View.GONE);
55        } else {
56            viewHolder.binding.description.setText(description);
57            viewHolder.binding.description.setVisibility(View.VISIBLE);
58        }
59        if (language == null || language.length() != 2) {
60            viewHolder.binding.language.setVisibility(View.GONE);
61        } else {
62            viewHolder.binding.language.setText(language.toUpperCase(Locale.ENGLISH));
63            viewHolder.binding.language.setVisibility(View.VISIBLE);
64        }
65        final Jid room = searchResult.getRoom();
66        viewHolder.binding.room.setText(room != null ? room.asBareJid().toString() : "");
67        AvatarWorkerTask.loadAvatar(searchResult, viewHolder.binding.avatar, R.dimen.avatar);
68        viewHolder.binding.getRoot().setOnClickListener(v -> listener.onChannelSearchResult(searchResult));
69    }
70
71    public void setOnChannelSearchResultSelectedListener(OnChannelSearchResultSelected listener) {
72        this.listener = listener;
73    }
74
75
76    public static class ViewHolder extends RecyclerView.ViewHolder {
77
78        private final SearchResultItemBinding binding;
79
80        private ViewHolder(SearchResultItemBinding binding) {
81            super(binding.getRoot());
82            this.binding = binding;
83        }
84    }
85
86    public interface OnChannelSearchResultSelected {
87        void onChannelSearchResult(MuclumbusService.Room result);
88    }
89}