UserPreviewAdapter.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.widget.RecyclerView;
 7import android.view.LayoutInflater;
 8import android.view.Menu;
 9import android.view.ViewGroup;
10import android.widget.PopupMenu;
11
12import java.util.List;
13
14import eu.siacs.conversations.R;
15import eu.siacs.conversations.databinding.UserPreviewBinding;
16import eu.siacs.conversations.entities.Contact;
17import eu.siacs.conversations.entities.MucOptions;
18import eu.siacs.conversations.ui.XmppActivity;
19import eu.siacs.conversations.ui.util.AvatarWorkerTask;
20import eu.siacs.conversations.ui.util.MucDetailsContextMenuHelper;
21
22public class UserPreviewAdapter extends ListAdapter<MucOptions.User,UserPreviewAdapter.ViewHolder> {
23
24    public UserPreviewAdapter() {
25        super(UserAdapter.DIFF);
26    }
27
28    @NonNull
29    @Override
30    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
31        return new ViewHolder(DataBindingUtil.inflate(LayoutInflater.from(viewGroup.getContext()), R.layout.user_preview, viewGroup, false));
32    }
33
34    @Override
35    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {
36        final MucOptions.User user = getItem(position);
37        AvatarWorkerTask.loadAvatar(user, viewHolder.binding.avatar, R.dimen.media_size);
38        viewHolder.binding.getRoot().setOnClickListener(v -> {
39            final XmppActivity activity = XmppActivity.find(v);
40            if (activity != null) {
41                activity.highlightInMuc(user.getConversation(), user.getName());
42            }
43        });
44        viewHolder.binding.getRoot().setOnLongClickListener(v -> {
45            final XmppActivity activity = XmppActivity.find(v);
46            if (activity == null) {
47                return true;
48            }
49            final PopupMenu popupMenu = new PopupMenu(activity, v);
50            popupMenu.inflate(R.menu.muc_details_context);
51            final Menu menu = popupMenu.getMenu();
52            MucDetailsContextMenuHelper.configureMucDetailsContextMenu(activity, menu, user.getConversation(), user);
53            popupMenu.setOnMenuItemClickListener(menuItem -> MucDetailsContextMenuHelper.onContextItemSelected(menuItem, user, user.getConversation(), activity));
54            popupMenu.show();
55            return true;
56        });
57    }
58
59    public void setUserList(List<MucOptions.User> users) {
60        submitList(users);
61    }
62
63
64    class ViewHolder extends RecyclerView.ViewHolder {
65
66        private final UserPreviewBinding binding;
67
68        private ViewHolder(UserPreviewBinding binding) {
69            super(binding.getRoot());
70            this.binding = binding;
71        }
72    }
73}