|
@@ -0,0 +1,152 @@
|
|
|
+package com.example.chatapp;
|
|
|
+
|
|
|
+import androidx.annotation.NonNull;
|
|
|
+import androidx.appcompat.app.AppCompatActivity;
|
|
|
+import androidx.appcompat.widget.Toolbar;
|
|
|
+import androidx.recyclerview.widget.LinearLayoutManager;
|
|
|
+import androidx.recyclerview.widget.RecyclerView;
|
|
|
+
|
|
|
+import android.content.Intent;
|
|
|
+import android.os.Bundle;
|
|
|
+import android.view.View;
|
|
|
+import android.widget.EditText;
|
|
|
+import android.widget.ImageButton;
|
|
|
+import android.widget.TextView;
|
|
|
+import android.widget.Toast;
|
|
|
+
|
|
|
+import com.example.chatapp.adapter.MessageAdapter;
|
|
|
+import com.example.chatapp.model.Chat;
|
|
|
+import com.example.chatapp.model.User;
|
|
|
+import com.google.firebase.auth.FirebaseAuth;
|
|
|
+import com.google.firebase.auth.FirebaseUser;
|
|
|
+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 com.squareup.picasso.Picasso;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+import de.hdodenhof.circleimageview.CircleImageView;
|
|
|
+
|
|
|
+public class MessageActivity extends AppCompatActivity {
|
|
|
+
|
|
|
+ private CircleImageView circleImageView;
|
|
|
+ private TextView username;
|
|
|
+ private FirebaseUser firebaseUser;
|
|
|
+ private DatabaseReference reference;
|
|
|
+ private Intent intent;
|
|
|
+ private EditText sendInput;
|
|
|
+ private ImageButton sendButton;
|
|
|
+ MessageAdapter messageAdapter;
|
|
|
+ List<Chat> mChat;
|
|
|
+ RecyclerView recyclerView;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void onCreate(Bundle savedInstanceState) {
|
|
|
+ super.onCreate(savedInstanceState);
|
|
|
+ setContentView(R.layout.activity_message);
|
|
|
+
|
|
|
+ intent = getIntent();
|
|
|
+ final String userId = intent.getStringExtra("userId");
|
|
|
+
|
|
|
+ final Toolbar toolbar = findViewById(R.id.toolbarMessage);
|
|
|
+ setSupportActionBar(toolbar);
|
|
|
+ getSupportActionBar().setTitle("");
|
|
|
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
|
|
+ toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ finish();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ recyclerView = findViewById(R.id.messagesList);
|
|
|
+ recyclerView.setHasFixedSize(true);
|
|
|
+ LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
|
|
|
+ linearLayoutManager.setStackFromEnd(true);
|
|
|
+ recyclerView.setLayoutManager(linearLayoutManager);
|
|
|
+
|
|
|
+ circleImageView = findViewById(R.id.titleCircleImageViewMessage);
|
|
|
+ username = findViewById(R.id.titleRegistrationMessage);
|
|
|
+
|
|
|
+ firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
|
|
|
+ reference = FirebaseDatabase.getInstance().getReference("Users").child(userId);
|
|
|
+
|
|
|
+ sendInput = findViewById(R.id.sendInput);
|
|
|
+ sendButton = findViewById(R.id.sendButton);
|
|
|
+ sendButton.setOnClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ String message = sendInput.getText().toString();
|
|
|
+ if (!message.equals("")) {
|
|
|
+ sendMessage(firebaseUser.getUid(), userId, message);
|
|
|
+ } else {
|
|
|
+ Toast.makeText(MessageActivity.this, "Enter message", Toast.LENGTH_SHORT).show();
|
|
|
+ }
|
|
|
+ sendInput.setText("");
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ reference.addValueEventListener(new ValueEventListener() {
|
|
|
+ @Override
|
|
|
+ public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
|
|
|
+ User user = dataSnapshot.getValue(User.class);
|
|
|
+ username.setText(user.getUsername());
|
|
|
+ Picasso.get().load(user.getImageURL()).into(circleImageView);
|
|
|
+
|
|
|
+ readMessage(firebaseUser.getUid(), userId, user.getImageURL());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onCancelled(@NonNull DatabaseError databaseError) {
|
|
|
+
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void sendMessage(String sender, String receiver, String message) {
|
|
|
+
|
|
|
+ DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
|
|
|
+
|
|
|
+ HashMap<String, Object> hashMap = new HashMap<>();
|
|
|
+ hashMap.put("sender", sender);
|
|
|
+ hashMap.put("receiver", receiver);
|
|
|
+ hashMap.put("message", message);
|
|
|
+
|
|
|
+ reference.child("Chats").push().setValue(hashMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void readMessage(final String myId, final String userId, final String imageUrl) {
|
|
|
+
|
|
|
+ mChat = new ArrayList<>();
|
|
|
+
|
|
|
+ reference = FirebaseDatabase.getInstance().getReference("Chats");
|
|
|
+ reference.addValueEventListener(new ValueEventListener() {
|
|
|
+ @Override
|
|
|
+ public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
|
|
|
+ mChat.clear();
|
|
|
+ for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
|
|
|
+ Chat chat = snapshot.getValue(Chat.class);
|
|
|
+ if (chat.getReceiver().equals(myId) && chat.getSender().equals(userId) ||
|
|
|
+ chat.getReceiver().equals(userId) && chat.getSender().equals(myId)) {
|
|
|
+ mChat.add(chat);
|
|
|
+ }
|
|
|
+ messageAdapter = new MessageAdapter(getApplicationContext(), mChat, imageUrl);
|
|
|
+ recyclerView.setAdapter(messageAdapter);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onCancelled(@NonNull DatabaseError databaseError) {
|
|
|
+
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|