package org.mercury_im.messenger.ui.roster; import android.content.Context; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import butterknife.BindView; import butterknife.ButterKnife; import de.hdodenhof.circleimageview.CircleImageView; import org.jivesoftware.smackx.colors.ConsistentColor; import org.jxmpp.jid.EntityBareJid; import org.mercury_im.messenger.R; import org.mercury_im.messenger.persistence.room.model.RoomContactModel; import org.mercury_im.messenger.ui.chat.ChatActivity; import org.mercury_im.messenger.ui.util.AbstractRecyclerViewAdapter; import org.mercury_im.messenger.util.ColorUtil; import java.util.Objects; public class RosterRecyclerViewAdapter extends AbstractRecyclerViewAdapter { public RosterRecyclerViewAdapter() { super(new ContactDiffCallback()); } @NonNull @Override public RosterItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { return new RosterItemViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()) .inflate(R.layout.recycler_view_item_roster_entry, parent, false)); } @Override public void onBindViewHolder(@NonNull RosterItemViewHolder holder, int position) { RoomContactModel model = getModelAt(position); holder.bind(model); } public class RosterItemViewHolder extends RecyclerView.ViewHolder { private View view; @BindView(R.id.roster_entry__jid) TextView jidView; @BindView(R.id.roster_entry__name) TextView nameView; @BindView(R.id.roster_entry__avatar) CircleImageView avatarView; Context context; public RosterItemViewHolder(Context context, View itemView) { super(itemView); this.context = context; this.view = itemView; ButterKnife.bind(this, view); } void bind(RoomContactModel contactModel) { String name = contactModel.getRosterName(); nameView.setText(name != null ? name : contactModel.getEntity().getJid().getLocalpart().asUnescapedString()); EntityBareJid jid = contactModel.getEntity().getJid(); jidView.setText(jid.toString()); jidView.setTextColor(ColorUtil.consistentColor(jid.toString(), new ConsistentColor.ConsistentColorSettings(ConsistentColor.Deficiency.none))); view.setOnClickListener(view -> { Intent intent = new Intent(context, ChatActivity.class); intent.putExtra("JID", jid.toString()); intent.putExtra("ACCOUNT", contactModel.getEntity().getAccountId()); context.startActivity(intent); }); } } private static class ContactDiffCallback extends AbstractDiffCallback { ContactDiffCallback() { super(true); } @Override public boolean areItemsTheSame(RoomContactModel oldItem, RoomContactModel newItem) { return oldItem.getId() == newItem.getId(); } @Override public boolean areContentsTheSame(RoomContactModel oldItem, RoomContactModel newItem) { return areItemsTheSame(oldItem, newItem) && Objects.equals(oldItem.getRosterName(), newItem.getRosterName()); } } }