ChatRoomActivity.java 6.17 KB
package com.cnlive.chat.ui;

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

import com.cnlive.chat.R;
import com.cnlive.chat.adapter.ChatListAdapter;

import java.util.ArrayList;
import java.util.StringTokenizer;

import io.rong.imlib.Chat;
import io.rong.imlib.model.CNMessage;
import io.rong.imlib.ChatUtil;
import io.rong.imlib.base.IChat;
import io.rong.imlib.model.CNUserInfo;
import io.rong.imlib.model.UserInfo;

public class ChatRoomActivity extends AppCompatActivity implements View.OnClickListener, IChat.OnMessageListener, IChat.OnConnectStatusListener, IChat.OnChatRoomActionListener {

    private static final String TAG = "ChatRoomActivity";
    private ListView chatListView;
    private EditText messageContent;
    private Button sendMessageBtn;
    private Button changeUserInfo;

    private String roomId;

    private ChatListAdapter chatListAdapter;
    private ArrayList<CNMessage> messageList = new ArrayList<>();
    private CNMessage cnMessage;

    private Handler mHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat_room);
        mHandler = new Handler(this.getMainLooper());
        initView();
        ChatUtil.setOnSendMessageListener(onSendMessageListener);
        ChatUtil.setOnOperationListener(onOperationListener);
        ChatUtil.setOnResultListener(onResultListener);
        joinChatRoom();
        ChatUtil.setOnMessageListener(this);
        ChatUtil.setConnectStatusListener(this);
        ChatUtil.setOnChatRoomActionListener(this);
    }

    private void initView() {
        chatListView = (ListView) findViewById(R.id.chat_list_view);
        chatListAdapter = new ChatListAdapter(this);
        chatListView.setAdapter(chatListAdapter);
        messageContent = (EditText) findViewById(R.id.message_content);
        sendMessageBtn = (Button) findViewById(R.id.send_message);
        sendMessageBtn.setOnClickListener(this);
        changeUserInfo = (Button) findViewById(R.id.change_user_info);
        changeUserInfo.setOnClickListener(this);
    }

    //加入聊天室
    private void joinChatRoom() {
        roomId = "ChatRoom01";
        joinChatRoom(roomId);
    }

    private void joinChatRoom(final String roomId) {
        ChatUtil.joinExistChatRoom(roomId, 20);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.send_message:
                ChatUtil.sendChatRoomMessage(messageContent.getText().toString());
                messageContent.setText("");
                break;
            case R.id.change_user_info:
                ChatUtil.currentUser().setName("Ha");
                break;
        }
    }

    @Override
    public void processMessage(final CNMessage message) {

        Log.e("DemoView", message.getUserInfo().getUserName() + " : " + message.getContent());

        mHandler.post(new Runnable() {
            @Override
            public void run() {
                messageList.add(message);
                chatListAdapter.updateItems(messageList);
                chatListAdapter.notifyDataSetChanged();
            }
        });
    }

    @Override
    public void onConnectStatus(int what, String extra) {
        Log.e(TAG, "status : what " + what + " extra : " + extra);
    }

    @Override
    public void onJoining(String s) {
        Log.e("DemoView", "onJoining + : " + s);
    }

    @Override
    public void onJoined(String s) {
        Log.e("DemoView", "onJoined + : " + s);
    }

    @Override
    public void onQuited(String s) {
        Log.e(TAG, "onQuited + : " + s);
    }

    @Override
    public void onError(String s, int errorCode, String errorMessage) {
        Log.e("DemoView", "onError + : " + s);
    }

    private IChat.OnSendMessageListener onSendMessageListener = new IChat.OnSendMessageListener() {
        @Override
        public void onSuccess(Integer integer) {
            Log.i(TAG, "SendMessageListener SUCCESS");
            //聊天SDK屏蔽用户自己发送的消息,所以在发送消息成功的时候需要根据需要处理自己的消息

            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    messageList.add(cnMessage);
                    chatListAdapter.updateItems(messageList);
                    chatListAdapter.notifyDataSetChanged();
                }
            });
        }

        @Override
        public void onError(Integer integer, int what, String extra) {
            Log.e(TAG, "SendMessageListener errorCode : " + what + " errorMessage : " + extra);
        }
    };

    private IChat.OnOperationListener onOperationListener = new IChat.OnOperationListener() {
        @Override
        public void onSuccess(int what, String extra) {
            switch (what) {
                case IChat.SUCCESS_JOIN_EXIST_CHATROOM:
                    Log.i(TAG, "加入聊天室成功");
                    break;
                case IChat.SUCCESS_QUIT_CHATROOM:
                    Log.i(TAG, "退出聊天室成功");
                    ChatUtil.disconnect(false);
                    break;
            }
        }

        @Override
        public void onError(int what, String extra) {
            Log.e(TAG, "OperationListener errorCode : " + what + " errorMessage : " + extra);
        }
    };

    private IChat.OnResultListener onResultListener = new IChat.OnResultListener() {
        @Override
        public void onSuccess(CNMessage message) {
            Log.i(TAG, "ResultListener SUCCESS " + message.getContent());
            cnMessage = message;
        }

        @Override
        public void onError(int what, String extra) {
            Log.e(TAG, "ResultListener errorCode : " + what + " errorMessage : " + extra);
        }
    };

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        ChatUtil.quitChatRoom();
    }
}