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