1package eu.siacs.conversations.ui.adapter;
2
3import android.view.ContextMenu;
4import android.view.LayoutInflater;
5import android.view.View;
6import android.view.ViewGroup;
7import android.widget.Toast;
8import androidx.annotation.NonNull;
9import androidx.databinding.DataBindingUtil;
10import androidx.recyclerview.widget.ListAdapter;
11import androidx.recyclerview.widget.RecyclerView;
12import eu.siacs.conversations.R;
13import eu.siacs.conversations.databinding.ItemUserPreviewBinding;
14import eu.siacs.conversations.entities.MucOptions;
15import eu.siacs.conversations.ui.XmppActivity;
16import eu.siacs.conversations.ui.util.AvatarWorkerTask;
17import eu.siacs.conversations.ui.util.MucDetailsContextMenuHelper;
18import im.conversations.android.xmpp.model.muc.Role;
19
20public class UserPreviewAdapter extends ListAdapter<MucOptions.User, UserPreviewAdapter.ViewHolder>
21 implements View.OnCreateContextMenuListener {
22
23 private MucOptions.User selectedUser = null;
24
25 public UserPreviewAdapter() {
26 super(UserAdapter.DIFF);
27 }
28
29 @NonNull
30 @Override
31 public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
32 return new ViewHolder(
33 DataBindingUtil.inflate(
34 LayoutInflater.from(viewGroup.getContext()),
35 R.layout.item_user_preview,
36 viewGroup,
37 false));
38 }
39
40 @Override
41 public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {
42 final MucOptions.User user = getItem(position);
43 AvatarWorkerTask.loadAvatar(user, viewHolder.binding.avatar, R.dimen.media_size);
44 viewHolder
45 .binding
46 .getRoot()
47 .setOnClickListener(
48 v -> {
49 final XmppActivity activity = XmppActivity.find(v);
50 if (activity == null) {
51 return;
52 }
53 final var contact = user.getContact();
54 if (user.getRole() == Role.NONE && contact != null) {
55 Toast.makeText(
56 activity,
57 activity.getString(
58 R.string.user_has_left_conference,
59 contact.getDisplayName()),
60 Toast.LENGTH_SHORT)
61 .show();
62 }
63 activity.highlightInMuc(user.getConversation(), user.getName());
64 });
65 viewHolder.binding.getRoot().setOnCreateContextMenuListener(this);
66 viewHolder.binding.getRoot().setTag(user);
67 viewHolder
68 .binding
69 .getRoot()
70 .setOnLongClickListener(
71 v -> {
72 selectedUser = user;
73 return false;
74 });
75 }
76
77 @Override
78 public void onCreateContextMenu(
79 ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
80 MucDetailsContextMenuHelper.onCreateContextMenu(menu, v);
81 }
82
83 public MucOptions.User getSelectedUser() {
84 return selectedUser;
85 }
86
87 class ViewHolder extends RecyclerView.ViewHolder {
88
89 private final ItemUserPreviewBinding binding;
90
91 private ViewHolder(final ItemUserPreviewBinding binding) {
92 super(binding.getRoot());
93 this.binding = binding;
94 }
95 }
96}