public class ChatRecyclerViewAdapter extends RecyclerView.Adapter<ChatRecyclerViewAdapter.ViewHolder> {
private List<Message> messageList;
private String currentUserId;
private ObjectMapper objectMapper = new ObjectMapper();
public ChatRecyclerViewAdapter(
List<Message> messageList,
this.messageList = messageList;
this.currentUserId = currentUserId;
public ChatRecyclerViewAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(
return new ViewHolder(itemView, viewType);
public void onBindViewHolder(@NonNull ChatRecyclerViewAdapter.ViewHolder holder, int position) {
Message message = messageList.get(position);
PickedDate pickedDate = null;
if (!message.getMessageData().isEmpty() && message.getMessageData().get(0).getData() != null) {
pickedDate = objectMapper.treeToValue(message.getMessageData().get(0).getData(), PickedDate.class);
} catch (JsonProcessingException jpe) {
switch (holder.getItemViewType()) {
case MessageTypes.SELF_PLAIN_MESSAGE:
holder.selfMessageText.setText(message.getTextPayload());
case MessageTypes.OTHER_PLAIN_MESSAGE:
holder.otherMessageText.setText(message.getTextPayload());
case MessageTypes.SELF_DATE_MESSAGE:
holder.selfDateMessageText.setText(message.getTextPayload());
holder.selfDate.setText("On: " + pickedDate != null ? pickedDate.getDate() : "");
case MessageTypes.OTHER_DATE_MESSAGE:
holder.dateMessageText.setText(message.getTextPayload());
holder.date.setText("On: " + pickedDate != null ? pickedDate.getDate() : "");
public int getItemCount() {
return messageList != null ? messageList.size() : 0;
public int getItemViewType(int position) {
if (messageList.get(position).getSenderId().domainId().equals(currentUserId)) {
Message message = messageList.get(position);
if (message.getMessageData().isEmpty()) {
return MessageTypes.SELF_PLAIN_MESSAGE;
return MessageTypes.SELF_DATE_MESSAGE;
Message message = messageList.get(position);
if (message.getMessageData().isEmpty()) {
return MessageTypes.OTHER_PLAIN_MESSAGE;
return MessageTypes.OTHER_DATE_MESSAGE;
static final int SELF_PLAIN_MESSAGE = 0;
static final int OTHER_PLAIN_MESSAGE = 1;
static final int SELF_DATE_MESSAGE = 2;
static final int OTHER_DATE_MESSAGE = 3;
private int getLayoutId(int viewType) {
case MessageTypes.SELF_PLAIN_MESSAGE:
return R.layout.item_message_self;
case MessageTypes.SELF_DATE_MESSAGE:
return R.layout.item_message_date_self;
case MessageTypes.OTHER_DATE_MESSAGE:
return R.layout.item_message_date;
return R.layout.item_message_other;
class ViewHolder extends RecyclerView.ViewHolder {
private TextView selfMessageText;
private TextView otherMessageText;
private TextView selfDateMessageText;
private TextView selfDate;
private TextView dateMessageText;
public ViewHolder(View itemView, int viewType) {
case MessageTypes.SELF_PLAIN_MESSAGE:
selfMessageText = itemView.findViewById(R.id.selfMessageText);
case MessageTypes.OTHER_PLAIN_MESSAGE:
otherMessageText = itemView.findViewById(R.id.otherMessageText);
case MessageTypes.SELF_DATE_MESSAGE:
selfDateMessageText = itemView.findViewById(R.id.selfDateMessageText);
selfDate = itemView.findViewById(R.id.selfDate);
case MessageTypes.OTHER_DATE_MESSAGE:
dateMessageText = itemView.findViewById(R.id.dateMessageText);
date = itemView.findViewById(R.id.date);