package com.mailssenger.adapter;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ImageSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.TextView.BufferType;
import com.google.gson.Gson;
import com.mailssenger.CommonApplication;
import com.mailssenger.R;
import com.mailssenger.activity.MailContentActivity;
import com.mailssenger.activity.UserInfoActivity;
import com.mailssenger.model.MailModel;
import com.mailssenger.model.MsgModel;
import com.mailssenger.model.UserModel;
import com.mailssenger.util.L;
import com.mailssenger.util.SharedPreferencesUtil;
import com.mailssenger.util.T;
import com.mailssenger.util.TimeUtil;
public class MessageAdapter extends BaseAdapter {
MailModel mailModel;
public static final Pattern EMOTION_URL = Pattern.compile("\\[(\\S+?)\\]");
private Context mContext;
private LayoutInflater mInflater;
private List<MsgModel> mMsgList;
private SharedPreferencesUtil mSpUtil;
private Gson mGson;
private UserModel hisUserModel;
public static final int TYPE_TEXT_LEFT = 0;//7种不同的布局
public static final int TYPE_TEXT_RIGHT = 1;
public static final int TYPE_MAIL_LEFT = 2;
public static final int TYPE_MAIL_RIGHT = 3;
public MessageAdapter(Context context, List<MsgModel> msgList,UserModel hisUserModel) {
// TODO Auto-generated constructor stub
this.mContext = context;
mMsgList = msgList;
this.hisUserModel = hisUserModel;
mInflater = LayoutInflater.from(context);
mSpUtil = CommonApplication.getInstance().getSpUtil();
mGson = CommonApplication.getInstance().getGson();
}
public void removeHeadMsg() {
L.i("before remove mMsgList.size() = " + mMsgList.size());
if (mMsgList.size() - 10 > 10) {
for (int i = 0; i < 10; i++) {
mMsgList.remove(i);
}
notifyDataSetChanged();
}
L.i("after remove mMsgList.size() = " + mMsgList.size());
}
public void setMessageList(List<MsgModel> msgList) {
mMsgList = msgList;
notifyDataSetChanged();
}
public void upDateMsg(MsgModel msg) {
mMsgList.add(msg);
notifyDataSetChanged();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mMsgList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mMsgList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
MsgModel item = mMsgList.get(position);
boolean isCome = mSpUtil.getEmail().equals(item.getReceiver());
int msgType = item.getMsgType();
ViewHolder holder;
if(msgType == MsgModel.MESSAGE_TYPE_MAIL){
convertView = mInflater.inflate(R.layout.chat_item_left_mail, null);
holder = new ViewHolder();
holder.head = (ImageView) convertView.findViewById(R.id.icon);
holder.time = (TextView) convertView.findViewById(R.id.datetime);
holder.message_body = (RelativeLayout)convertView.findViewById(R.id.message_body);
holder.message_title = (TextView) convertView.findViewById(R.id.message_title);
holder.message_content = (TextView) convertView.findViewById(R.id.message_content);
holder.progressBar = (ProgressBar) convertView.findViewById(R.id.progressBar1);
convertView.setTag(R.drawable.ic_launcher + position);
holder.time.setText(TimeUtil.getChatTime(item.getTime()));
// L.i("time: " + item.getDate());
holder.time.setVisibility(View.VISIBLE);
holder.head.setImageResource(CommonApplication.heads[item.getSender().charAt(1)%18]);//头像设置
if ( !mSpUtil.getShowHead()) {
holder.head.setVisibility(View.GONE);
}
String msg = item.getMessage();
mailModel = CommonApplication.getInstance().getGson().fromJson(msg, MailModel.class);
holder.message_title.setText(mailModel.getSubject());
String mail_content = mailModel.getContent();
if(mail_content!=null&&!mail_content.equals("")&&mail_content.length()>90){
mail_content = mail_content.substring(0, 90);
}
holder.message_content.setText(mail_content);
holder.progressBar.setVisibility(View.GONE);
holder.progressBar.setProgress(50);
holder.message_body
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MsgModel item = (MsgModel) getItem(position);
Bundle bundle = new Bundle();
bundle.putString("mail",item.getMessage());
Intent mainIntent = new
Intent(mContext,MailContentActivity.class);
mainIntent.putExtras(bundle);
mContext.startActivity(mainIntent);
}
});
holder.head.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//将用户对象传给 UserInfoActivity.class
Intent intent = new Intent(mContext,UserInfoActivity.class);
intent.putExtra("hisEmail", hisUserModel.getEmail());
mContext.startActivity(intent);
}
});
}
if(msgType == MsgModel.MESSAGE_TYPE_TEXT){
if (convertView == null|| convertView.getTag(R.drawable.ic_launcher + position) == null) {
holder = new ViewHolder();
if (isCome) {
convertView = mInflater.inflate(R.layout.chat_item_left, null);
} else {
convertView = mInflater.inflate(R.layout.chat_item_right, null);
}
holder.head = (ImageView) convertView.findViewById(R.id.icon);
holder.time = (TextView) convertView.findViewById(R.id.datetime);
holder.msg = (TextView) convertView.findViewById(R.id.textView2);
holder.progressBar = (ProgressBar) convertView
.findViewById(R.id.progressBar1);
convertView.setTag(R.drawable.ic_launcher + position);
} else {
holder = (ViewHolder) convertView.getTag(R.drawable.ic_launcher
+ position);
}
holder.time.setText(TimeUtil.getChatTime(item.getTime()));
// L.i("time: " + item.getDate());
holder.time.setVisibility(View.VISIBLE);
// holder.head.setBackgroundResource(CommonApplication.heads[item
// .getHeadImg()]);
holder.head.setImageResource(CommonApplication.heads[item.getSender().charAt(1)%18]);//头像设置
if ( !mSpUtil.getShowHead()) {
holder.head.setVisibility(View.GONE);
}
holder.msg.setText(
convertNormalStringToSpannableString(item.getMessage()),
BufferType.SPANNABLE);
holder.progressBar.setVisibility(View.GONE);
holder.progressBar.setProgress(50);
holder.head.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//将用户对象传给 UserInfoActivity.class
Intent intent = new Intent(mContext,UserInfoActivity.class);
intent.putExtra("hisEmail", hisUserModel.getEmail());
mContext.startActivity(intent);
}
});
}
return convertView;
}
/**
* 另外一种方法解析表情
*
* @param message
* 传入的需要处理的String
* @return
*/
private CharSequence convertNormalStringToSpannableString(String message) {
// TODO Auto-generated method stub
String hackTxt;
if (message.startsWith("[") && message.endsWith("]")) {
hackTxt = message + " ";
} else {
hackTxt = message;
}
SpannableString value = SpannableString.valueOf(hackTxt);
Matcher localMatcher = EMOTION_URL.matcher(value);
while (localMatcher.find()) {
String str2 = localMatcher.group(0);
int k = localMatcher.start();
int m = localMatcher.end();
// k = str2.lastIndexOf("[");
// Log.i("way", "str2.length = "+str2.length()+", k = " + k);
// str2 = str2.substring(k, m);
if (m - k < 8) {
if (CommonApplication.getInstance().getFaceMap()
.containsKey(str2)) {
int face = CommonApplication.getInstance().getFaceMap()
.get(str2);
Bitmap bitmap = BitmapFactory.decodeResource(
mContext.getResources(), face);
if (bitmap != null) {
ImageSpan localImageSpan = new ImageSpan(mContext,
bitmap, ImageSpan.ALIGN_BASELINE);
value.setSpan(localImageSpan, k, m,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
}
return value;
}
static class ViewHolder {
ImageView head;
TextView time;
TextView msg;
RelativeLayout message_body;
TextView message;
TextView message_title;
TextView message_content;
ImageView imageView;
ProgressBar progressBar;
}
}