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}