package com.mianasad.chatsapp.Activities;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import com.bumptech.glide.Glide;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
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.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.mianasad.chatsapp.Adapters.MessagesAdapter;
import com.mianasad.chatsapp.Models.Message;
import com.mianasad.chatsapp.R;
import com.mianasad.chatsapp.databinding.ActivityChatBinding;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class ChatActivity extends AppCompatActivity {
ActivityChatBinding binding;
MessagesAdapter adapter;
ArrayList<Message> messages;
String senderRoom, receiverRoom;
FirebaseDatabase database;
FirebaseStorage storage;
ProgressDialog dialog;
String senderUid;
String receiverUid;
String token;
String name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityChatBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
database = FirebaseDatabase.getInstance();
storage = FirebaseStorage.getInstance();
dialog = new ProgressDialog(this);
dialog.setMessage("Uploading image...");
dialog.setCancelable(false);
messages = new ArrayList<>();
String name = getIntent().getStringExtra("name");
String profile = getIntent().getStringExtra("image");
String token = getIntent().getStringExtra("token");
//Toast.makeText(this, token, Toast.LENGTH_SHORT).show();
binding.name.setText(name);
Glide.with(ChatActivity.this).load(profile)
.placeholder(R.drawable.avatar)
.into(binding.profile);
binding.imageView2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
receiverUid = getIntent().getStringExtra("uid");
senderUid = FirebaseAuth.getInstance().getUid();
database.getReference().child("presence").child(receiverUid).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(snapshot.exists()) {
String status = snapshot.getValue(String.class);
if(!status.isEmpty()) {
if(status.equals("Offline")) {
binding.status.setVisibility(View.GONE);
} else {
binding.status.setText(status);
binding.status.setVisibility(View.VISIBLE);
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
senderRoom = senderUid + receiverUid;
receiverRoom = receiverUid + senderUid;
adapter = new MessagesAdapter(this, messages, senderRoom, receiverRoom);
binding.recyclerView.setLayoutManager(new LinearLayoutManager(this));
binding.recyclerView.setAdapter(adapter);
database.getReference().child("chats")
.child(senderRoom)
.child("messages")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
messages.clear();
for(DataSnapshot snapshot1 : snapshot.getChildren()) {
Message message = snapshot1.getValue(Message.class);
message.setMessageId(snapshot1.getKey());
messages.add(message);
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
binding.sendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String messageTxt = binding.messageBox.getText().toString();
Date date = new Date();
Message message = new Message(messageTxt, senderUid, date.getTime());
binding.messageBox.setText("");
String randomKey = database.getReference().push().getKey();
HashMap<String, Object> lastMsgObj = new HashMap<>();
lastMsgObj.put("lastMsg", message.getMessage());
lastMsgObj.put("lastMsgTime", date.getTime());
database.getReference().child("chats").child(senderRoom).updateChildren(lastMsgObj);
database.getReference().child("chats").child(receiverRoom).updateChildren(lastMsgObj);
database.getReference().child("chats")
.child(senderRoom)
.child("messages")
.child(randomKey)
.setValue(message).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
database.getReference().child("chats")
.child(receiverRoom)
.child("messages")
.child(randomKey)
.setValue(message).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
sendNotification(name, message.getMessage(), token);
}
});
}
});
}
});
binding.attachment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 25);
}
});
final Handler handler = new Handler();
binding.messageBox.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
没有合适的资源?快使用搜索试试~ 我知道了~
聊天应用Youtube教程_Java_下载.zip
共99个文件
xml:48个
png:20个
java:17个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 50 浏览量
2023-04-24
13:46:11
上传
评论
收藏 969KB ZIP 举报
温馨提示
聊天应用Youtube教程_Java_下载.zip
资源推荐
资源详情
资源评论
收起资源包目录
聊天应用Youtube教程_Java_下载.zip (99个子文件)
ChatsApp-master
gradle.properties 1KB
gradle
wrapper
gradle-wrapper.jar 53KB
gradle-wrapper.properties 230B
app
src
androidTest
java
com
mianasad
chatsapp
ExampleInstrumentedTest.java 756B
test
java
com
mianasad
chatsapp
ExampleUnitTest.java 382B
main
java
com
mianasad
chatsapp
MyFirstbaseService.java 2KB
Adapters
UsersAdapter.java 4KB
MessagesAdapter.java 13KB
TopStatusAdapter.java 4KB
GroupMessagesAdapter.java 13KB
Activities
PhoneNumberActivity.java 1KB
GroupChatActivity.java 6KB
SetupProfileActivity.java 7KB
OTPActivity.java 4KB
ChatActivity.java 15KB
MainActivity.java 13KB
Models
Message.java 1KB
Status.java 589B
User.java 1KB
UserStatus.java 1KB
res
mipmap-xxhdpi
ic_launcher_round.png 14KB
ic_launcher.png 9KB
mipmap-hdpi
ic_launcher_round.png 5KB
ic_launcher.png 3KB
drawable-v24
receive_drawable.xml 270B
ic_launcher_foreground.xml 2KB
font
roboto_light.xml 375B
menu
chat_menu.xml 526B
topmenu.xml 557B
menu.xml 466B
values-night
themes.xml 830B
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 2KB
mipmap-xxxhdpi
ic_launcher_round.png 19KB
ic_launcher.png 13KB
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 5KB
values
colors.xml 502B
preloaded_fonts.xml 173B
strings.xml 70B
themes.xml 2KB
font_certs.xml 3KB
layout
demo_status.xml 403B
activity_o_t_p.xml 3KB
item_status.xml 1KB
item_sent.xml 2KB
activity_chat.xml 6KB
activity_group_chat.xml 3KB
row_conversation.xml 2KB
item_sent_group.xml 2KB
activity_setup_profile.xml 3KB
activity_main.xml 3KB
item_receive.xml 2KB
item_receive_group.xml 2KB
activity_phone_number.xml 3KB
demo_layout.xml 1KB
delete_dialog.xml 1KB
drawable
ic_launcher_background.xml 5KB
ic_fb_angry.png 11KB
ic_call.xml 702B
ic_chats.xml 1KB
ic_fb_laugh.png 12KB
circle_bg.xml 168B
textbox_outline.xml 204B
ic_camera.xml 757B
mobile_auth.png 20KB
ic_attachment.xml 828B
sent_drawable.xml 269B
ic_fb_like.png 9KB
avatar.png 2KB
ic_fb_sad.png 13KB
bg.png 682KB
ic_search.xml 945B
circle_green.xml 178B
ic_send.xml 390B
ic_fb_love.png 11KB
ic_status.xml 1KB
ic_fb_wow.png 13KB
ic_video.xml 807B
otp_verify.png 20KB
placeholder.jpg 4KB
ic_left_arrow.xml 847B
AndroidManifest.xml 2KB
proguard-rules.pro 750B
google-services.json 997B
build.gradle 2KB
.gitignore 6B
gradlew.bat 2KB
build.gradle 629B
.idea
jarRepositories.xml 1KB
runConfigurations.xml 337B
vcs.xml 180B
misc.xml 371B
compiler.xml 169B
gradle.xml 863B
.gitignore 47B
settings.gradle 44B
gradlew 5KB
.gitignore 225B
共 99 条
- 1
资源评论
快撑死的鱼
- 粉丝: 1w+
- 资源: 9154
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功