sdfsdfsd

 avatar
hacker98
plain_text
5 months ago
7.5 kB
2
Indexable
package com.example.chatappdemo;

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.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.widget.Toolbar;


import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;

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.databinding.ActivityMainBinding;
import com.example.chatappdemo.fragment.FriendRequestFragment;
import com.example.chatappdemo.fragment.MyProfileFragment;
import com.example.chatappdemo.fragment.RecentChatFragment;
import com.example.chatappdemo.fragment.ScanFragment;
import com.example.chatappdemo.global.Global;
import com.example.chatappdemo.model.Conversation;
import com.example.chatappdemo.model.Myinfo;
import com.example.chatappdemo.model.ReceiveRequest;
import com.example.chatappdemo.socket.SocketServerService;
import com.google.android.material.navigation.NavigationView;


import java.util.List;
import java.util.Random;


public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    private DrawerLayout drawerLayout;
    private NavigationView navigationView;
    private Toolbar toolbar;

    private static final String TAG = "SocketServerClient";

    private TextView txtNavMyName;
    //   service
    private BroadcastReceiver updateNameReceiver;

    private ActivityMainBinding binding;
    private MyinfoDAO myinfoDAO;
    private Myinfo myinfo;
    static {
        System.loadLibrary("cal-lib");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        setViewReference();
        ConversationDAO conversationDAO = new ConversationDAO(this);
        ReceiveRequestDAO receiveRequestDAO = new ReceiveRequestDAO(this);
        SentRequestDAO sentRequestDAO = new SentRequestDAO(this);
        myinfoDAO = new MyinfoDAO(this);
        setUpSideBar(savedInstanceState);

        // Create new my account if it's not exist
        createMyAccount();

        runServerSocket();

        loadUI();

        registerReceiver();
    }

    private void registerReceiver() {
        // User change name
        String name;
        updateNameReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Log.d(">>> Receive change name", intent.getStringExtra("My name"));
                txtNavMyName.setText(intent.getStringExtra("My name"));
            }
        };
        IntentFilter filter = new IntentFilter("com.example.chatappdemo.CHANGE_NAME");
        registerReceiver(updateNameReceiver, filter);
    }

    private void loadUI() {
       View navHeader = binding.navView.getHeaderView(0);
       txtNavMyName = (TextView) navHeader.findViewById(R.id.nav_my_name);
       txtNavMyName.setText(Global.myInfo.getName());
       TextView txtNavMyIp = (TextView) navHeader.findViewById(R.id.nav_my_ip);
       txtNavMyIp.setText(Global.myInfo.getMyIP());
    }

    private void runServerSocket() {
        Intent serviceIntent = new Intent(this, SocketServerService.class);
        startService(serviceIntent);
    }

    private void createMyAccount() {
        String myIP = Global.getDevicesIP();
        javaExternal func = new javaExternal();
        MyinfoDAO myinfoDAO = new MyinfoDAO(this);
        Log.i("TAG", myIP);
        myinfo = myinfoDAO.getInfoByIP(myIP);
        if (myinfo == null) {
            RSAKey rsaKey = func.generateKeyRSAObject();
            Log.i(TAG, "khoa cong khai: " + rsaKey.getPublicKey());
            Log.i(TAG, "khoa bi mat: " + rsaKey.getPrivateKey());
            Random random = new Random();
            String randomName = "User " + random.nextInt(1000000);
            myinfo = new Myinfo(myIP, randomName, rsaKey.getPublicKey(), rsaKey.getPrivateKey());
            myinfoDAO.insertMyModel(myinfo);
        }
        Global.myInfo = myinfo;
    }


    private void setUpSideBar(Bundle savedInstanceState) {
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open_nav,
                R.string.close_nav);
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new RecentChatFragment()).commit();
            navigationView.setCheckedItem(R.id.nav_recent_chat);
        }
    }

    private void setViewReference() {
        drawerLayout = findViewById(R.id.drawer_layout);
        navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        toolbar = findViewById(R.id.toolbar); //Ignore red line errors
        setSupportActionBar(toolbar);
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.nav_scan:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ScanFragment()).commit();
                break;
            case R.id.nav_recent_chat:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new RecentChatFragment()).commit();
                break;
            case R.id.nav_my_profile:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new MyProfileFragment()).commit();
                break;
            case R.id.nav_friend_request:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new FriendRequestFragment()).commit();
                break;
            default:
                break;
        }
        drawerLayout.closeDrawer(GravityCompat.START);


        return true;
    }

    @Override
    public void onBackPressed() {
        Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
        if(currentFragment instanceof RecentChatFragment){
            super.onBackPressed();
        }else{
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new RecentChatFragment()).commit();
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        // Hủy đăng ký BroadcastReceiver khi Fragment bị hủy
        Log.i("Socket", "fragment bi huy");
        if (updateNameReceiver != null) {
           unregisterReceiver(updateNameReceiver);
        }
    }
}
Editor is loading...
Leave a Comment