public class ChatAdapter extends FirebaseRecyclerAdapter<ChatMessageModel, ChatAdapter.MyViewHolder> {
public static final int MESSAGE_SENT = 1;
public static final int MESSAGE_RECEIVED = 2;
private ArrayList<ChatMessageModel> list;
public ChatAdapter(FirebaseRecyclerOptions<ChatMessageModel> messages) {
super(messages);
}
@Override
public int getItemViewType(int position) {
switch (position) {
case 1:
return MESSAGE_SENT;
default:
return MESSAGE_RECEIVED;
}
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
int layoutRes = 0;
//if viewType == 1(sent_message int)
switch (viewType) {
case MESSAGE_SENT:
//then layoutRes == 1
layoutRes = R.layout.sent_message_item;
break;
case MESSAGE_RECEIVED:
//else, layoutRes == 2
layoutRes = R.layout.received_message_item;
break;
}
//inflating the view with layoutRes
View view
= LayoutInflater.
from(parent.
getContext()).
inflate(layoutRes, parent,
false);
return new MyViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, ChatMessageModel model) {
//if viewType == 1, set and display message from sent_message view
switch (holder.getItemViewType()) {
case 1:
MyViewHolder viewHolderCurrentSent = (MyViewHolder) holder;
viewHolderCurrentSent.mSentMessage.setText(model.getMessage());
viewHolderCurrentSent.
mSentMessage.
setOnClickListener(new View.
OnClickListener() {
@Override
public void onClick
(View view
) {
deleteMessage(holder.getAbsoluteAdapterPosition());
}
});
break;
//if viewType == 2, set and display message from received_message view
case 2:
MyViewHolder viewHolderCurrentReceived = (MyViewHolder) holder;
viewHolderCurrentReceived.mReceivedMessage.setText(model.getMessage());
viewHolderCurrentReceived.mReceivedMessageUser.setText(model.getMessageUser());
break;
}
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
//views for received_message_item layout
TextView mReceivedMessage, mReceivedMessageUser, mReceivedMessageDate, mReceivedMessageTime;
//views for sent_message_item layout
TextView mSentMessage, mSentMessageTime, mSentMessageDate;
LinearLayout mSentChatContainer;
public MyViewHolder
(@NonNull
View itemView
) {
super(itemView);
//views for received_message_item layout
mReceivedMessage = itemView.findViewById(R.id.message_received);
mReceivedMessageUser = itemView.findViewById(R.id.user);
mReceivedMessageDate = itemView.findViewById(R.id.date_received);
mReceivedMessageTime = itemView.findViewById(R.id.time_received);
//views for sent_message_item layout
mSentMessage = itemView.findViewById(R.id.message);
mSentMessageTime = itemView.findViewById(R.id.time_sent);
mSentMessageDate = itemView.findViewById(R.id.date_sent);
mSentChatContainer = itemView.findViewById(R.id.chat_container);
}
}
public void deleteMessage(int position) {
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
Query messageQuery = databaseReference.child("-N4hRQ_csYYVsSTA6V6Y").orderByChild("message").equalTo(position);
messageQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot messageSnapShot : snapshot.getChildren()) {
messageSnapShot.getRef().removeValue();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}