Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.gypsy;
- import androidx.annotation.NonNull;
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.recyclerview.widget.LinearLayoutManager;
- import androidx.recyclerview.widget.RecyclerView;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.widget.EditText;
- import android.widget.ImageButton;
- import android.widget.TextView;
- import com.google.firebase.auth.FirebaseAuth;
- import com.google.firebase.auth.FirebaseUser;
- import com.google.firebase.database.ChildEventListener;
- import com.google.firebase.database.DataSnapshot;
- import com.google.firebase.database.DatabaseError;
- import com.google.firebase.database.DatabaseReference;
- import com.google.firebase.database.FirebaseDatabase;
- import com.google.firebase.database.ValueEventListener;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Locale;
- import java.util.Map;
- import java.util.Objects;
- import java.util.UUID;
- import java.util.stream.Collectors;
- import java.util.stream.Stream;
- public class TouristHotelChat extends AppCompatActivity {
- private RecyclerView messageRecyclerView;
- private MessageAdapter messageAdapter;
- private List<MessageModel> messageList;
- private EditText messageEditText;
- private ImageButton sendButton;
- private DatabaseReference databaseReference;
- private FirebaseUser currentUser;
- private String recipientUserId;
- private String chatRoomId;
- private String currentUserName;
- private String recipientUserName;
- private String senderProfilePic;
- private String recipientProfilePic;
- private TextView recipientNameTextView;
- private static final String TAG= "TouristHotelChat";
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_tourist_hotel_chat);
- databaseReference = FirebaseDatabase.getInstance().getReference();
- currentUser = FirebaseAuth.getInstance().getCurrentUser();
- recipientUserId = getIntent().getStringExtra("recipientUserId"); // nanggaling sa DynamicHotel at BookingDetail
- recipientUserName = getIntent().getStringExtra("recipientUserName"); // nanggaling sa DynamicHotel at BookingDetail
- currentUserName = getIntent().getStringExtra("currentUserName");
- Log.d(TAG, "Recipient recipient user ID: " + recipientUserId);
- Log.d(TAG, "Recipient Current user name: " + currentUserName);
- Log.d(TAG, "Recipient recipient user name: " + recipientUserName);
- chatRoomId = generateUniqueChatRoomId(currentUser.getUid(), recipientUserId);
- Log.d(TAG, "Generated Chat Room ID: " + chatRoomId);
- createChatRoom(chatRoomId);
- messageRecyclerView = findViewById(R.id.messageRecyclerView);
- LinearLayoutManager layoutManager = new LinearLayoutManager(this);
- layoutManager.setStackFromEnd(true);
- messageRecyclerView.setLayoutManager(layoutManager);
- messageList = new ArrayList<>();
- messageAdapter = new MessageAdapter(messageList, currentUser.getUid());
- messageRecyclerView.setAdapter(messageAdapter);
- messageEditText = findViewById(R.id.messageEditText);
- sendButton = findViewById(R.id.sendButton);
- sendButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- sendMessage();
- }
- });
- listenForMessages(chatRoomId);
- DatabaseReference categoryRef = databaseReference.child("users");
- categoryRef.addListenerForSingleValueEvent(new ValueEventListener() {
- @Override
- public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
- if (dataSnapshot != null && dataSnapshot.exists()) {
- DataSnapshot hotelSnapshot = dataSnapshot.child("Hotel");
- DataSnapshot touristSnapshot = dataSnapshot.child("Tourist");
- DataSnapshot restaurantSnapshot = dataSnapshot.child("Restaurant");
- if (recipientUserId != null) {
- if (hotelSnapshot != null && hotelSnapshot.exists() && hotelSnapshot.hasChild(recipientUserId)) {
- retrieveRecipientName("Hotel", recipientUserId);
- } else if (touristSnapshot != null && touristSnapshot.exists() && touristSnapshot.hasChild(recipientUserId)) {
- retrieveRecipientName("Tourist", recipientUserId);
- } else if (restaurantSnapshot != null && restaurantSnapshot.exists() && restaurantSnapshot.hasChild(recipientUserId)) {
- retrieveRecipientName("Restaurant", recipientUserId);
- }
- }
- }
- }
- @Override
- public void onCancelled(@NonNull DatabaseError databaseError) {
- }
- });
- }
- private void sendMessage() {
- String messageText = messageEditText.getText().toString().trim();
- if (!messageText.isEmpty()) {
- String messageId = generateId();
- long timestamp = System.currentTimeMillis();
- MessageModel message = new MessageModel(messageText, currentUser.getUid(), recipientUserId, currentUserName, recipientUserName, messageId, timestamp, senderProfilePic, recipientProfilePic);
- String chatRoomPath = "chat_rooms/" + chatRoomId + "/messages";
- DatabaseReference chatRoomRef = databaseReference.child(chatRoomPath);
- chatRoomRef.child(messageId).setValue(message);
- messageEditText.setText("");
- Log.d(TAG, "Sent Message:");
- Log.d(TAG, "Message Text: " + messageText);
- Log.d(TAG, "Message ID: " + messageId);
- Log.d(TAG, "Sender ID: " + currentUser);
- }
- }
- private void listenForMessages(String chatRoomId) {
- String chatRoomPath = "chat_rooms/" + chatRoomId + "/messages";
- DatabaseReference chatRoomRef = databaseReference.child(chatRoomPath);
- chatRoomRef.addChildEventListener(new ChildEventListener() {
- @Override
- public void onChildAdded(@NonNull DataSnapshot dataSnapshot, String s) {
- MessageModel message = dataSnapshot.getValue(MessageModel.class);
- if (message != null) {
- messageList.add(message);
- messageAdapter.notifyDataSetChanged();
- messageRecyclerView.scrollToPosition(messageList.size() - 1);
- }
- }
- @Override
- public void onChildChanged(@NonNull DataSnapshot dataSnapshot, String s) {
- }
- @Override
- public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
- }
- @Override
- public void onChildMoved(@NonNull DataSnapshot dataSnapshot, String s) {
- }
- @Override
- public void onCancelled(@NonNull DatabaseError databaseError) {
- }
- });
- }
- private String generateUniqueChatRoomId(String senderId, String receiverId) {
- senderId = (senderId != null) ? senderId : "";
- receiverId = (receiverId != null) ? receiverId : "";
- String sortedUserIds = Stream.of(senderId, receiverId)
- .filter(Objects::nonNull)
- .sorted()
- .collect(Collectors.joining("_"));
- return "chat_" + sortedUserIds;
- }
- private void createChatRoom(String chatRoomId) {
- String chatRoomPath = "chat_rooms/" + chatRoomId;
- DatabaseReference chatRoomRef = databaseReference.child(chatRoomPath);
- chatRoomRef.addListenerForSingleValueEvent(new ValueEventListener() {
- @Override
- public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
- if (currentUser != null && recipientUserId != null && !dataSnapshot.exists()) {
- Map<String, Object> participants = new HashMap<>();
- participants.put(currentUser.getUid(), true);
- participants.put(recipientUserId, true);
- Map<String, Object> chatRoom = new HashMap<>();
- chatRoom.put("participants", participants);
- chatRoomRef.setValue(chatRoom);
- }
- }
- @Override
- public void onCancelled(@NonNull DatabaseError databaseError) {
- }
- });
- }
- private String generateId() {
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS", Locale.getDefault());
- Date currentDate = new Date();
- return "message_" + dateFormat.format(currentDate);
- }
- private void retrieveRecipientName(String category, String userId) {
- String recipientNamePath = "users/" + category + "/" + userId + "/name";
- DatabaseReference recipientNameRef = databaseReference.child(recipientNamePath);
- recipientNameRef.addListenerForSingleValueEvent(new ValueEventListener() {
- @Override
- public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
- Log.d("TouristHotelChat", "onDatachange called ");
- if (dataSnapshot.exists()) {
- String recipientName = dataSnapshot.getValue(String.class);
- TextView recipientNameTextView = findViewById(R.id.recipientNameTextView);
- recipientNameTextView.setText(recipientName);
- Log.d("TouristHotelChat", "recipientName: " + recipientName);
- }
- }
- @Override
- public void onCancelled(@NonNull DatabaseError databaseError) {
- }
- });
- }
- public void goBack(View view) {
- onBackPressed();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement