UserPreviewAdapter.java

 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}