package com.way.chat.activity;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.way.Constants;
import com.way.chat.common.bean.ChatMsgEntity;
import com.way.chat.common.bean.TextMessage;
import com.way.chat.common.bean.User;
import com.way.chat.common.tran.bean.TranObject;
import com.way.chat.common.tran.bean.TranObjectType;
import com.way.client.ClientOutputThread;
import com.way.util.MessageDB;
import com.way.util.MyDate;
import com.way.util.SharePreferenceUtil;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
/**
* 聊天Activity
*
* @author way
*/
public class ChatActivity extends SuperView implements OnClickListener {
private Button mBtnSend;// 发送btn
private Button mBtnBack;// 返回btn
private EditText mEditTextContent;
private TextView mFriendName;
private ListView mListView;
private ChatMsgViewAdapter mAdapter;// 消息视图的Adapter
private List<ChatMsgEntity> mDataArrays = new ArrayList<ChatMsgEntity>();// 消息对象数组
private SharePreferenceUtil util;
private User user;
private MessageDB messageDB;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏
setContentView(R.layout.chat);
messageDB = new MessageDB(this);
user = (User) getIntent().getSerializableExtra("user");
util = new SharePreferenceUtil(this, Constants.SAVE_USER);
initView();// 初始化view
initData();// 初始化数据
}
/**
* 初始化view
*/
public void initView() {
mListView = (ListView) findViewById(R.id.listview);
mBtnSend = (Button) findViewById(R.id.chat_send);
mBtnSend.setOnClickListener(this);
mBtnBack = (Button) findViewById(R.id.chat_back);
mBtnBack.setOnClickListener(this);
mFriendName = (TextView) findViewById(R.id.chat_name);
mFriendName.setText(util.getName());
mEditTextContent = (EditText) findViewById(R.id.chat_editmessage);
}
/**
* 加载消息历史,从数据库中读出
*/
public void initData() {
List<ChatMsgEntity> list = messageDB.getMsg(user.getId());
if (list.size() > 0) {
for (ChatMsgEntity entity : list) {
if (entity.getName().equals("")) {
entity.setName(user.getName());
}
if (entity.getImg() < 0) {
entity.setImg(user.getImg());
}
mDataArrays.add(entity);
}
Collections.reverse(mDataArrays);
}
mAdapter = new ChatMsgViewAdapter(this, mDataArrays);
mListView.setAdapter(mAdapter);
mListView.setSelection(mAdapter.getCount() - 1);
}
@Override
protected void onDestroy() {
super.onDestroy();
messageDB.close();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.chat_send:// 发送按钮点击事件
send();
break;
case R.id.chat_back:// 返回按钮点击事件
finish();// 结束,实际开发中,可以返回主界面
break;
}
}
/**
* 发送消息
*/
private void send() {
String contString = mEditTextContent.getText().toString();
if (contString.length() > 0) {
ChatMsgEntity entity = new ChatMsgEntity();
entity.setName(util.getName());
entity.setDate(MyDate.getDateEN());
entity.setMessage(contString);
entity.setImg(util.getImg());// 自己的头像图片暂未处理
entity.setMsgType(false);
messageDB.saveMsg(user.getId(), entity);
mDataArrays.add(entity);
mAdapter.notifyDataSetChanged();// 通知ListView,数据已发生改变
mEditTextContent.setText("");// 清空编辑框数据
mListView.setSelection(mListView.getCount() - 1);// 发送一条消息时,ListView显示选择最后一项
ClientOutputThread out = GetMsgService.client
.getClientOutputThread();
if (out != null) {
TranObject<TextMessage> o = new TranObject<TextMessage>(
TranObjectType.MESSAGE);
TextMessage message = new TextMessage();
message.setMessage(contString);
o.setObject(message);
o.setFromUser(Integer.parseInt(util.getId()));
o.setToUser(user.getId());
out.setMsg(o);
}
}
}
@Override
public void getMessage(TranObject msg) {
// TODO Auto-generated method stub
switch (msg.getType()) {
case MESSAGE:
TextMessage tm = (TextMessage) msg.getObject();
String message = tm.getMessage();
ChatMsgEntity entity = new ChatMsgEntity(user.getName(),
MyDate.getDateEN(), message, user.getImg(), true);// 收到的消息
if (msg.getFromUser() == user.getId() || msg.getFromUser() == 0) {// 如果是正在聊天的好友的消息,或者是服务器的消息
messageDB.saveMsg(user.getId(), entity);
mDataArrays.add(entity);
mAdapter.notifyDataSetChanged();
mListView.setSelection(mListView.getCount() - 1);
} else {
messageDB.saveMsg(msg.getFromUser(), entity);// 保存到数据库
Toast.makeText(ChatActivity.this,
"您有新的消息来自:" + msg.getFromUser() + ":" + message, 0)
.show();// 其他好友的消息,就先提示,并保存到数据库
}
break;
case LOGIN:
User loginUser = (User) msg.getObject();
Toast.makeText(ChatActivity.this, loginUser.getId() + "上线了", 0)
.show();
break;
case LOGOUT:
User logoutUser = (User) msg.getObject();
Toast.makeText(ChatActivity.this, logoutUser.getId() + "下线了", 0)
.show();
break;
default:
break;
}
}
}