PrivateChatActivity.java 10.6 KB
package com.cnlive.im.ui;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;

import com.cnlive.im.R;
import com.cnlive.im.adapter.ChatListAdapter;
import com.cnlive.libs.util.chat.ChatUtil;
import com.cnlive.libs.util.chat.base.IChat;
import com.cnlive.libs.util.chat.model.CNMessage;
import com.cnlive.libs.util.chat.model.CNUserInfo;

import java.util.ArrayList;

import static com.cnlive.im.R.id.opposite_id_edit;


/**
 * @author 陈硕
 * @time 2017/3/7  14:36
 * @desc ${TODD}
 */
public class PrivateChatActivity extends AppCompatActivity implements View.OnClickListener {


    private static final String TAG = "PrivateChatActivity";
    private ListView chatListView;
    private EditText messageContent;
    private Button sendMessageBtn;
    private ChatListAdapter chatListAdapter;
    private ArrayList<ChatRoomActivity.CNMessageInfo> messageList = new ArrayList<>();
    private CNMessage cnMessage;
    private LinearLayout linearLayoutUseID;
    private EditText user_id_edit;
    private Button userId_btn_top;
    private String oppositeID;
    private LinearLayout edit_layout;
    private Handler mHandler;
    private EditText opposite_name_edit;
    private String user_name_string;
    private String user_id_string;
    private int sendInfo = 1;
    private Button agree_btn;
    private Button reject_btn;
    private LinearLayout agree_reject_lin;
    boolean isCanSendMeaasge = false;
    private Button vistor_btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_private_chat);
        initView();
        mHandler = new Handler();
        ChatUtil.setConnectStatusListener(connectStatusListener);
        ChatUtil.setOnReceiveMessageListener(receiveMessageListener);
    }

    private void initView() {
        opposite_name_edit = (EditText) findViewById(R.id.opposite_name_edit);
        chatListView = (ListView) findViewById(R.id.private_list_view);
        chatListView.setAdapter(chatListAdapter);
        messageContent = (EditText) findViewById(R.id.message_content);
        sendMessageBtn = (Button) findViewById(R.id.send_message);
        sendMessageBtn.setOnClickListener(this);
        linearLayoutUseID = (LinearLayout) findViewById(R.id.opposite_liner_useID);
        userId_btn_top = (Button) findViewById(R.id.userId_btn_top);
        userId_btn_top.setOnClickListener(this);
        edit_layout = (LinearLayout) findViewById(R.id.edit_layout);
        user_id_edit = (EditText) findViewById(opposite_id_edit);
        Intent intent = getIntent();
        user_name_string = intent.getStringExtra("user_name_string");
        user_id_string = intent.getStringExtra("user_id_string");
        agree_btn = (Button) findViewById(R.id.agree_btn);
        reject_btn = (Button) findViewById(R.id.reject_btn);
        agree_btn.setOnClickListener(this);
        reject_btn.setOnClickListener(this);
        agree_reject_lin = (LinearLayout) findViewById(R.id.agree_reject_lin);
        vistor_btn = (Button) findViewById(R.id.vistor_Btn);
        vistor_btn.setOnClickListener(this);
        chatListAdapter = new ChatListAdapter(this);

    }


    @Override
    public void onClick(View v) {

        switch (v.getId()) {
            case R.id.send_message:
                //发送私聊消息,需要传入目标ID与发送的消息内容
                if (sendInfo == 2) {
                    Toast.makeText(this, "等待对方接受邀请", Toast.LENGTH_SHORT).show();

                } else if (sendInfo == 4) {
                    Toast.makeText(this, "对方已经拒绝不能发送", Toast.LENGTH_SHORT).show();

                } else {

                    if (messageContent.getText().toString().isEmpty()) {
                        Toast.makeText(this, "不能发送空消息呦~", Toast.LENGTH_SHORT).show();
                    } else {
                        ChatUtil.sendMessage(IChat.PRIVATE, oppositeID, messageContent.getText().toString(), sendMessageListener);
                        messageContent.setText("");
                    }


                }

                break;
            case R.id.userId_btn_top:
                //发送私聊消息,需要传入目标ID与发送的消息内容
                if (user_id_edit.getText().toString().isEmpty()) {
                    Toast.makeText(this, "对方ID不能为空", Toast.LENGTH_SHORT).show();
                } else if (opposite_name_edit.getText().toString().isEmpty()) {
                    Toast.makeText(this, "对方name不能为空", Toast.LENGTH_SHORT).show();
                } else {

                    oppositeID = user_id_edit.getText().toString();
                    linearLayoutUseID.setVisibility(View.INVISIBLE);
                    edit_layout.setVisibility(View.VISIBLE);
                    chatListView.setVisibility(View.VISIBLE);
                    CNUserInfo cnName = new CNUserInfo(user_id_string, user_name_string, "");
                    ChatUtil.login(cnName, connectListener);

                }

                break;

            case R.id.agree_btn:
                ChatUtil.sendMessage(IChat.PRIVATE, oppositeID, "同意", sendMessageListener);
                agree_reject_lin.setVisibility(View.GONE);
                break;

            case R.id.reject_btn:
                ChatUtil.sendMessage(IChat.PRIVATE, oppositeID, "拒绝", sendMessageListener);
                agree_reject_lin.setVisibility(View.GONE);
                break;
            case R.id.vistor_Btn:
                ChatUtil.sendMessage(IChat.PRIVATE, oppositeID, "你好我们可以进行私聊吗", sendMessageListener);

                break;
        }
    }


    //连接监听
    private IChat.OnConnectListener connectListener = new IChat.OnConnectListener() {
        @Override
        public void onTokenIncorrect() {
            Log.e(TAG, "ConnectListener TokenIncorrect");
            Toast.makeText(PrivateChatActivity.this, "TokenIncorrect", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onSuccess(String s) {
            Log.e(TAG, "ConnectListener 连接监听" + s);
            Toast.makeText(PrivateChatActivity.this, s, Toast.LENGTH_SHORT).show();

        }

        @Override
        public void onError(int i, String s) {
            Log.e(TAG, "ConnectListener errorCode : " + i + " : errorMessage : " + s);
            Toast.makeText(PrivateChatActivity.this, s, Toast.LENGTH_SHORT).show();

        }
    };




    /**
     * 发送消息监听
     */
    private IChat.OnSendMessageListener sendMessageListener = new IChat.OnSendMessageListener() {

        @Override
        public void onAttached(CNMessage cnMessage) {
            Log.v(TAG, "私聊SendMessageListener onAttached" + cnMessage.getTargetId() + cnMessage.getUserInfo().getUserName());

        }

        @Override
        public void onSuccess(final CNMessage cnMessage) {

            if(View.VISIBLE==vistor_btn.getVisibility()){
                vistor_btn.setVisibility(View.GONE);
            }
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(PrivateChatActivity.this, "发送消息成功", Toast.LENGTH_SHORT).show();
                    if (messageList.size() == 0 && cnMessage.getContent().equals("你好我们可以进行私聊吗")) {
                        sendInfo = 2;
                        Toast.makeText(PrivateChatActivity.this, "申请已发送等待对方验证", Toast.LENGTH_SHORT).show();
                    } else if (messageList.size() == 0 && cnMessage.getContent().equals("拒绝")) {
                    } else if (messageList.size() == 0 && cnMessage.getContent().equals("同意")) {
                    } else {
                        messageList.add(new ChatRoomActivity.CNMessageInfo(cnMessage,true));
                        chatListAdapter.updateItems(messageList);
                        chatListAdapter.notifyDataSetChanged();
                    }

                }
            });

            Log.v(TAG, "私聊SendMessageListener SUCCESSES" + cnMessage.getTargetId() + cnMessage.getUserInfo().getUserName());


        }

        @Override
        public void onError(CNMessage cnMessage, int i, String s) {
            Log.v(TAG, "私聊SendMessageListener 失败 " + i + "    s" + s);
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(PrivateChatActivity.this, "发送消息失败", Toast.LENGTH_SHORT).show();
                    vistor_btn.setText("重新邀请");

                }
            });

        }
    };

    //连接状态监听
    private IChat.OnConnectStatusListener connectStatusListener = new IChat.OnConnectStatusListener() {
        @Override
        public void onConnectStatus(int i, String s) {
            Log.i(TAG, "私聊连接状态监听私聊" + i + "   " + s);


        }
    };
    //接收消息监听
    private IChat.OnReceiveMessageListener receiveMessageListener = new IChat.OnReceiveMessageListener() {
        @Override
        public void processMessage(final CNMessage cnMessage) {
            Log.v(TAG, "私聊receiveMessageListener" + "   " + cnMessage.getTargetId() + "   " + cnMessage.getContent());
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    vistor_btn.setVisibility(View.GONE);
                    if (messageList.size() == 0 && cnMessage.getContent().equals("你好我们可以进行私聊吗")) {
                        agree_reject_lin.setVisibility(View.VISIBLE);
                    } else if (messageList.size() == 0 && cnMessage.getContent().equals("拒绝")) {
                        sendInfo = 4;
                        Toast.makeText(PrivateChatActivity.this, "对方已经决绝了您", Toast.LENGTH_SHORT).show();
                    } else if (messageList.size() == 0 && cnMessage.getContent().equals("同意")) {
                        Toast.makeText(PrivateChatActivity.this, "对方已经同意了您", Toast.LENGTH_SHORT).show();
                        sendInfo = 5;
                    } else {
                        messageList.add(new ChatRoomActivity.CNMessageInfo(cnMessage,false));
                        chatListAdapter.updateItems(messageList);
                        chatListAdapter.notifyDataSetChanged();
                    }

                }
            });

        }
    };


}