PrivateChatActivity.java 6.35 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.support.v7.widget.ListViewCompat;
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.Collections;
import java.util.List;

import io.rong.imlib.RongIMClient;
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 PrivateChatActivity extends AppCompatActivity implements View.OnClickListener, IChat.OnMessageListener, IChat.OnConnectStatusListener {

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

    private String targetId;

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

    private CNMessage cnMessage;

    private Handler mHandler;
    private CNUserInfo userInfo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat_room);

        userInfo = new CNUserInfo("2017010102", "J", "http://7xs9j5.com1.z0.glb.clouddn.com/liveapp/guojunwang.jpg");
        ChatUtil.connect(userInfo);

        targetId = "2017010101";
        mHandler = new Handler();
        ChatUtil.setOnResultListener(onResultListener);
        ChatUtil.setOnSendMessageListener(onSendMessageListener);
        ChatUtil.setOnLatestMessageListener(latestMessageListener);
        ChatUtil.getLatestMessages(targetId, 20);
        initView();
        ChatUtil.setOnMessageListener(this);
        ChatUtil.setConnectStatusListener(this);
//        Intent intent = getIntent();
//        getPushMessage(intent);
    }


    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);
    }

//    @Override
//    protected void onNewIntent(Intent intent) {
//        super.onNewIntent(intent);
//        getPushMessage(intent);
//    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.send_message:
                ChatUtil.sendPrivateMessage(targetId, messageContent.getText().toString());
                messageContent.setText("");
                break;
        }
    }

    @Override
    public void onConnectStatus(int what, String extra) {
        Log.e("DemoView", "errorCode : " + what + " errorMessage : " + extra);

    }

    private IChat.OnSendMessageListener onSendMessageListener = new IChat.OnSendMessageListener() {
        @Override
        public void onSuccess(Integer integer) {

            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    messageList.add(cnMessage);
                    chatListAdapter.updateItems(messageList);
                    chatListAdapter.notifyDataSetChanged();
                }
            });
            Log.i(TAG, "SendMessageListener SUCCESS");
        }

        @Override
        public void onError(Integer integer, int what, String extra) {
            Log.e(TAG, "SendMessageListener 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);
        }
    };

    //单聊的历史消息,按照时间顺序从新到旧排列
    private IChat.OnLatestMessageListener latestMessageListener = new IChat.OnLatestMessageListener() {
        @Override
        public void onSuccess(final List<CNMessage> messages) {
            for (CNMessage cnMessage : messages) {
                Log.i(TAG, "latestMessage" + cnMessage.getContent());
            }

            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    messageList.addAll(messages);
                    Collections.reverse(messageList);
                    chatListAdapter.updateItems(messageList);
                    chatListAdapter.notifyDataSetChanged();
                }
            });
        }

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

    @Override
    public void processMessage(final CNMessage message) {
        Log.e("DemoView", message.getContent());

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

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

//    /**
//     * push消息
//     */
//    private void getPushMessage(Intent intent) {
//        if (intent != null && intent.getData() != null && intent.getData().getScheme().equals("rong")) {
//            String content = intent.getData().getQueryParameter("pushContent");
//            String id = intent.getData().getQueryParameter("pushId");
//            String extra = intent.getData().getQueryParameter("extra");
//            RongIMClient.getInstance().recordNotificationEvent(id);
//
//            Log.e("DemoView", "--content--" + content + "--id--" + id + "--extra--" + extra);
//        }
//    }

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