samarthshah-47 / chatapp

0 stars 0 forks source link

Delete for Everyone" Functionality Only Deletes for Sender #1

Open samarthshah-47 opened 3 weeks ago

samarthshah-47 commented 3 weeks ago

package com.Adepter;

import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView;

import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView;

import com.Model.MessageModel; import com.Model.User; import com.example.chatapp.R; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.database.FirebaseDatabase;

import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Locale;

public class ChatAdapter extends RecyclerView.Adapter {

ArrayList<MessageModel> messageModels;
Context context;

String receiverId;

// Log tag for easier identification of logs related to ChatAdapter

public ChatAdapter(ArrayList<MessageModel> messageModels, Context context) {
    this.messageModels = messageModels;
    this.context = context;
}

public ChatAdapter(ArrayList<MessageModel> messageModels, Context context, String receiverId) {
    this.messageModels = messageModels;
    this.context = context;
    this.receiverId = receiverId;
}

int Sender_View_Type = 1;
int Reciver_View_Type = 2;

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    Log.d("chatAdepter", "onCreateViewHolder called with viewType: " + viewType);
    if (viewType == Sender_View_Type) {
        View view = LayoutInflater.from(context).inflate(R.layout.layout_sender, parent, false);
        return new SenderViewHolder(view);
    } else {
        View view = LayoutInflater.from(context).inflate(R.layout.layout_reciver, parent, false);
        return new ReciverViewHolder(view);
    }
}

@Override
public int getItemViewType(int position) {
    Log.d("chatAdepter", "getItemViewType called for position: " + position);
    if (messageModels.get(position).getuId().equals(FirebaseAuth.getInstance().getUid())) {
        return Sender_View_Type;
    } else {
        return Reciver_View_Type;
    }
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
    MessageModel messageModel = messageModels.get(position);
    Log.d("chatAdepter", "onBindViewHolder called for position: " + position + ", message: " + messageModel.getMessage());

    if (messageModel == null) {
        Log.e("chatAdepter", "MessageModel is null at position: " + position);
        return; // Skip if messageModel is null
    }

    long timestamp = messageModel.getTimestemp();
    SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a", Locale.getDefault());
    String time = sdf.format(new Date(timestamp));

    if (holder.getClass() == SenderViewHolder.class) {
        ((SenderViewHolder) holder).senderMsg.setText(messageModel.getMessage());
        ((SenderViewHolder) holder).senderTime.setText(time);

        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                Log.d("chatAdepter", "Sender message long-clicked. Message: " + messageModel.getMessage());

                new AlertDialog.Builder(context).setTitle("Delete Message?")
                        .setItems(new CharSequence[]{"Delete", "Delete for Everyone", "Cancel"}, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                FirebaseDatabase database = FirebaseDatabase.getInstance();
                                String senderRoom = FirebaseAuth.getInstance().getUid() + receiverId;
                                String receiverRoom = receiverId+ FirebaseAuth.getInstance().getUid();

                                switch (i) {
                                    case 0:
                                        Log.d("chatAdepter", "Delete option selected for message: " + messageModel.getMessage());
                                        database.getReference().child("Chats").child(senderRoom).child(messageModel.getMessageId()).removeValue();
                                        break;

                                    case 1:
                                        Log.d("chatAdepter", "Delete for Everyone option selected for message: " + messageModel.getMessage());
                                        database.getReference().child("Chats").child(senderRoom).child(messageModel.getMessageId()).removeValue();
                                        database.getReference().child("Chats").child(receiverRoom).child(messageModel.getMessageId()).removeValue();
                                        break;

                                    case 2: // Cancel
                                        Log.d("chatAdepter", "Cancel option selected");
                                        dialogInterface.dismiss();
                                        break;
                                }
                            }
                        }).show();

                return true;
            }
        });
    } else {
        ((ReciverViewHolder) holder).reciverMsg.setText(messageModel.getMessage());
        ((ReciverViewHolder) holder).reciverTime.setText(time);

        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                Log.d("chatAdepter", "Receiver message long-clicked. Message: " + messageModel.getMessage());

                new AlertDialog.Builder(context).setTitle("Delete Message")
                        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                FirebaseDatabase database = FirebaseDatabase.getInstance();
                                String senderRoom = FirebaseAuth.getInstance().getUid() + receiverId;
                                Log.d("chatAdepter", "Delete option selected for receiver message: " + messageModel.getMessage());
                                database.getReference().child("Chats").child(senderRoom).child(messageModel.getMessageId()).setValue(null);
                            }
                        })
                        .setNegativeButton("No", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                Log.d("chatAdepter", "Cancel delete for receiver message.");
                                dialogInterface.dismiss();
                            }
                        }).show();

                return false;
            }
        });
    }
}

@Override
public int getItemCount() {
    return messageModels.size();
}

public class ReciverViewHolder extends RecyclerView.ViewHolder {
    TextView reciverMsg, reciverTime;

    public ReciverViewHolder(@NonNull View itemView) {
        super(itemView);
        reciverMsg = itemView.findViewById(R.id.receiver_message_text);
        reciverTime = itemView.findViewById(R.id.receiver_message_time);
    }
}

public class SenderViewHolder extends RecyclerView.ViewHolder {
    TextView senderMsg, senderTime;

    public SenderViewHolder(@NonNull View itemView) {
        super(itemView);
        senderMsg = itemView.findViewById(R.id.sender_message_text);
        senderTime = itemView.findViewById(R.id.sender_message_time);
    }
}

}

When I click "Delete for Everyone" in my chat application, the message is only deleted on the sender's side. It does not get deleted on the receiver's side.

samarthshah-47 commented 1 week ago

hi