ChatActivity

 avatar
hacker98
plain_text
6 months ago
11 kB
1
Indexable
main
package com.example.chatappdemo;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;


import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.chatappdemo.DAO.ConversationDAO;
import com.example.chatappdemo.DAO.MyinfoDAO;
import com.example.chatappdemo.DAO.ReceiveRequestDAO;
import com.example.chatappdemo.DAO.SentRequestDAO;
import com.example.chatappdemo.model.Conversation;
import com.example.chatappdemo.model.Myinfo;
import com.example.chatappdemo.model.ReceiveRequest;
import com.example.chatappdemo.model.SentRequest;

import org.json.JSONObject;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;


public class ChatActivity extends AppCompatActivity {
    private Button AddFriend,ButtonAccept,ButtonRefuse;
    private javaExternal func = new javaExternal();
    private BroadcastReceiver newRespond;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);

        AddFriend = findViewById(R.id.AddFriendLayout);
        ButtonAccept = findViewById(R.id.Accept);
        ButtonRefuse=findViewById(R.id.refuse);
        String myIP=getDeviceIpAddress();

        Intent intent=getIntent();
        String conversation_IP=intent.getStringExtra("conversation_IP");
        ConversationDAO conversationDAO=new ConversationDAO(this);
        ReceiveRequestDAO receiveRequestDAO = new ReceiveRequestDAO(this);
        SentRequestDAO sentRequestDAO = new SentRequestDAO(this);
        MyinfoDAO myinfoDAO = new MyinfoDAO(this);

        Conversation conversation= conversationDAO.getConversationByIPReceive(conversation_IP);
        ReceiveRequest receiveRequest = receiveRequestDAO.getReceiveRequestByIP(conversation_IP);
        SentRequest sentRequest = sentRequestDAO.getSentRequestByIP(conversation_IP);
        Myinfo myinfo = myinfoDAO.getInfoByIP(myIP);
//        set up tham so cho fragment
        Fragment fragment = new ChatFragment();
        Bundle bundle = new Bundle();
        bundle.putString("conversation_IP",conversation_IP);
        bundle.putString("MyIP",myIP);
        fragment.setArguments(bundle);
        // Hiển thị ChatFragmentcv
        if (conversation != null) {
            findViewById(R.id.fragment_container).setVisibility(View.VISIBLE);
            findViewById(R.id.SentRequestLayout).setVisibility(View.GONE);
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.fragment_container, fragment)
                    .commit();

        }else if(receiveRequest !=null || sentRequest!=null){
            if(sentRequest != null){
                findViewById(R.id.fragment_container).setVisibility(View.GONE);
                findViewById(R.id.SentRequestLayout).setVisibility(View.VISIBLE);
            }else{
                findViewById(R.id.fragment_container).setVisibility(View.GONE);
                findViewById(R.id.RequestAddFriendLayout).setVisibility(View.VISIBLE);
            }
        }else{
            findViewById(R.id.fragment_container).setVisibility(View.GONE);
            findViewById(R.id.AddFriendLayout).setVisibility(View.VISIBLE);
        }
//       Dang ky nhan respond
        newRespond = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String ClientIP = intent.getStringExtra("ClientIP");
                String status= intent.getStringExtra("status");
                if(ClientIP.equals(conversation_IP)){
                    Toast.makeText(ChatActivity.this,"Dia chi IP "+ClientIP+" da chap nhan loi moi ket ban",Toast.LENGTH_SHORT).show();
                    if(status.equals("ACCEPT")){
                        findViewById(R.id.SentRequestLayout).setVisibility(View.GONE);
                        findViewById(R.id.fragment_container).setVisibility(View.VISIBLE);
                        getSupportFragmentManager().beginTransaction()
                                .replace(R.id.fragment_container, fragment)
                                .commit();
                    }
                }else{
                    Toast.makeText(ChatActivity.this,"Dia chi IP "+ClientIP+" da tu choi loi moi ket ban",Toast.LENGTH_SHORT).show();
                    findViewById(R.id.SentRequestLayout).setVisibility(View.GONE);
                    findViewById(R.id.AddFriendLayout).setVisibility(View.VISIBLE);
                }
            }
        };
        IntentFilter filter = new IntentFilter("com.example.chatappdemo.CHANGE_ADAPTER_ACCEPT");
        IntentFilter filter1 = new IntentFilter("com.example.chatappdemo.CHANGE_ADAPTER_REFUSE");
        registerReceiver(newRespond,filter);
        registerReceiver(newRespond,filter1);
        AddFriend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                JSONObject messageJson = new JSONObject();
                JSONObject messageContentJson = new JSONObject();
                try{
                    messageJson.put("type", "FRIEND_REQUEST");
                    messageContentJson.put("IPRequest",myIP);
                    messageContentJson.put("name",myinfo.getName());
                    messageContentJson.put("publicKey",myinfo.getPublicKey());
                    messageJson.put("content",messageContentJson);
//                    luu vao database
                    SentRequest sentRequest1=new SentRequest(conversation_IP,"tung","pending");
                    sentRequestDAO.insertSentRequest(sentRequest1);
//                    SEND
                    ChatClient chatClient = new ChatClient(conversation_IP,1234,messageJson.toString());
                    chatClient.start();
//                    Change Layout
                    findViewById(R.id.AddFriendLayout).setVisibility(View.GONE);
                    findViewById(R.id.SentRequestLayout).setVisibility(View.VISIBLE);
                }catch (Exception e){
                    e.printStackTrace();
                    Log.e("Socket",e.getMessage());
                }

            }
        });
        ButtonAccept.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                JSONObject messageJson = new JSONObject();
                JSONObject messageContentJson = new JSONObject();
                try {
//                    tao khoa ma hoa
                    String keyEncrypt128 = func.generateKey128();
                    String keyEncrypt256=func.generateKey256();
                    String keyEncryptRSA128 = func.encryptRSA(keyEncrypt128,receiveRequest.getPublicKey());
                    String keyEncryptRSA256 = func.encryptRSA(keyEncrypt256,receiveRequest.getPublicKey());
//                    tao json gui phan hoi
                    messageJson.put("type","FRIEND_RESPONSE");
                    messageContentJson.put("IPSent",myIP);
                    messageContentJson.put("name",myinfo.getName());
                    messageContentJson.put("key128",keyEncryptRSA128);
                    messageContentJson.put("key256",keyEncryptRSA256);
                    messageContentJson.put("status","ACCEPT");
                    messageJson.put("content",messageContentJson);
//                    save database
                    Conversation conversation1= new Conversation(conversation_IP,receiveRequest.getName()," "," ",keyEncrypt128,keyEncrypt256,"AES128");
                    conversationDAO.insertConversation(conversation1);
                    receiveRequestDAO.deleteReceiveRequestByIP(conversation_IP);

                    ChatClient chatClient = new ChatClient(conversation_IP,1234,messageJson.toString());
                    chatClient.start();
                    findViewById(R.id.RequestAddFriendLayout).setVisibility(View.GONE);
                    findViewById(R.id.fragment_container).setVisibility(View.VISIBLE);
                    getSupportFragmentManager().beginTransaction()
                            .replace(R.id.fragment_container, fragment)
                            .commit();
                }catch (Exception e){
                    e.printStackTrace();
                    Log.e("socket",e.getMessage());
                }
            }
        });
        ButtonRefuse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                JSONObject messageJson = new JSONObject();
                JSONObject messageContentJson = new JSONObject();
                try {
                    messageJson.put("type","FRIEND_RESPONSE");
                    messageContentJson.put("IPSent",conversation_IP);
                    messageContentJson.put("name",myinfo.getName());
                    messageContentJson.put("key"," ");
                    messageContentJson.put("status","REFUSE");
                    messageJson.put("content",messageContentJson);

                    receiveRequestDAO.deleteReceiveRequestByIP(conversation_IP);

                    ChatClient chatClient = new ChatClient(conversation_IP,1234,messageJson.toString());
                    chatClient.start();
                    findViewById(R.id.RequestAddFriendLayout).setVisibility(View.GONE);
                    findViewById(R.id.AddFriendLayout).setVisibility(View.VISIBLE);
                }catch (Exception e){
                    e.printStackTrace();
                    Log.e("socket",e.getMessage());
                }
            }
        });
    }
    private String getDeviceIpAddress() {
        try {
            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
                NetworkInterface intf = en.nextElement();
                for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                    if (!inetAddress.isLoopbackAddress() && inetAddress.getHostAddress().matches("\\d+\\.\\d+\\.\\d+\\.\\d+")) {
                        return inetAddress.getHostAddress();
                    }
                }
            }
        } catch (Exception ex) {
            Log.e("Socket", "Không thể lấy địa chỉ IP của thiết bị", ex);
        }
        return null;
    }


}
Editor is loading...
Leave a Comment