package com.sogou.sogouchat.ui;
import android.R.integer;
import android.content.Context;
import android.database.DataSetObserver;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.text.format.Time;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import com.sogou.sogouchat.R;
import com.sogou.sogouchat.SogouChatApp;
import com.sogou.sogouchat.bean.ContactNode;
import com.sogou.sogouchat.bean.DownNode;
import com.sogou.sogouchat.bean.MsgNode;
import com.sogou.sogouchat.bean.TelNode;
import com.sogou.sogouchat.os.ChatAppConstant;
public class ChatMsgViewAdapter extends BaseAdapter {
static class ViewHolder {
public TextView mSendTime;
public TextView mUserName;
public TextView mTextContent;
public ImageView mImageContent;
}
private static final String TAG = ChatMsgViewAdapter.class.getSimpleName();
public static interface IMsgViewType{
int MSG_COME = 0;
int MSG_TO = 1;
}
public static interface IMsgContentType{
int MSG_TEXT = 0;
int MSG_IMAGE = 1;
int MSG_AUDIO = 2;
}
public List<ChatMsgEntity> mData = new ArrayList<ChatMsgEntity>();
private Context mCtx;
private LayoutInflater mInflater;
private SogouChatApp mApp;
private String mTel;
public ChatMsgViewAdapter(Context context, SogouChatApp app) {
mCtx = context;
mInflater = LayoutInflater.from(context);
mApp = app;
}
public void setChatTel(String tel){
mTel = tel;
extraList();
notifyDataSetChanged();
}
private void extraList() {
mData.clear();
mApp.mDownList.clear();
Iterator<TelNode> telIt = mApp.mTelList.iterator();
while (telIt.hasNext()) {
TelNode telNode = telIt.next();
if (telNode.mTel.equals(mTel)) {
if (telNode.mMsgCnt > 0) {
Iterator<MsgNode> msgIt = telNode.mMsgList.iterator();
while (msgIt.hasNext()) {
MsgNode msgNode = msgIt.next();
ChatMsgEntity msgEn = new ChatMsgEntity(msgNode,
telNode.mName);
mData.add(msgEn);
if (msgEn.mLoad == false
&& msgEn.mType > IMsgContentType.MSG_TEXT) {
DownNode downNode = new DownNode();
downNode.mType = msgEn.mType;
downNode.mDate = msgEn.mDate;
downNode.mShortUrl = msgEn.mShortUrl;
mApp.mDownList.add(downNode);
}
}
mApp.syncDownList();
}
}
}
}
public void updateNewMsgList(){
Iterator<MsgNode> msgIt = mApp.mMsgList.iterator();
while (msgIt.hasNext()) {
MsgNode msgNode = msgIt.next();
ChatMsgEntity msgEn = new ChatMsgEntity(msgNode, mTel);
mData.add(msgEn);
}
}
public int getCount() {
return mData.size();
}
public Object getItem(int position) {
return mData.get(position);
}
public long getItemId(int position) {
return position;
}
/* type
ALL = 0;
INBOX = 1;
SENT = 2;
DRAFT = 3;
OUTBOX = 4;
FAILED = 5;
QUEUED = 6; */
public int getItemViewType(int position) {
// TODO Auto-generated method stub
ChatMsgEntity entity = mData.get(position);
return entity.mCome;
}
public int getViewTypeCount() {
// TODO Auto-generated method stub
return 2;
}
public View getView(int position, View convertView, ViewGroup parent) {
ChatMsgEntity entity = mData.get(position);
// Log.i(TAG, "getView"+entity.mContent+"pos ="+position);
ViewHolder viewHolder = null;
if (convertView == null) {
if (entity.mCome == IMsgViewType.MSG_COME) {
convertView = mInflater.inflate(
R.layout.chatting_item_msg_text_right, null);
}
else if (entity.mCome == IMsgViewType.MSG_TO){
convertView = mInflater.inflate(
R.layout.chatting_item_msg_text_left, null);
}
viewHolder = new ViewHolder();
viewHolder.mSendTime = (TextView) convertView.findViewById(R.id.tv_sendtime);
viewHolder.mUserName = (TextView) convertView.findViewById(R.id.tv_username);
viewHolder.mTextContent = (TextView) convertView.findViewById(R.id.tv_chatcontent);
viewHolder.mImageContent = (ImageView) convertView.findViewById(R.id.img_chatcontent);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.mTextContent.setText(entity.mContent);
viewHolder.mSendTime.setText(formatTimes(entity.mDate));
if (entity.mType == IMsgContentType.MSG_IMAGE) {
viewHolder.mTextContent.setVisibility(View.INVISIBLE);
viewHolder.mImageContent.setVisibility(View.VISIBLE);
// if (!entity.mLoad)
{
String filePath = Environment.getExternalStorageDirectory() + ChatAppConstant.SAVE_PATH
+ entity.mDate+".png";
File file = new File(filePath);
if (file.exists()){
// load imge
Bitmap bitmap = getLoacalBitmap(file);
viewHolder.mImageContent.setImageBitmap(bitmap);
entity.mLoad = true;
}
else{
// Log.i(TAG, "set horse"+entity.mContent);
viewHolder.mImageContent.setImageResource(R.drawable.horse1);
entity.mLoad = false;
}
}
}
else if (entity.mType == IMsgContentType.MSG_AUDIO){
viewHolder.mTextContent.setVisibility(View.INVISIBLE);
viewHolder.mImageContent.setVisibility(View.VISIBLE);
if (entity.mCome == IMsgViewType.MSG_COME) {
// Log.i(TAG, "set audio"+entity.mContent);
viewHolder.mImageContent.setImageResource(R.drawable.chathistory_send_voice_spk_04);
}
else if (entity.mCome == IMsgViewType.MSG_TO){
// Log.i(TAG, "set audio"+entity.mContent);
viewHolder.mImageContent.setImageResource(R.drawable.chathistory_receive_voice_spk_04);
}
if (!entity.mLoad){
String filePath = Environment.getExternalStorageDirectory() + ChatAppConstant.SAVE_PATH
+ entity.mDate+".mp3";
File file = new File(filePath);
if (file.exists()){
entity.mLoad = true;
}
else{
viewHolder.mImageContent.setImageResource(R.drawable.msg_audio_down);
}
}
}
else
{
viewHolder.mTextContent.setVisibility(View.VISIBLE);
viewHolder.mImageContent.setVisibility(View.INVISIBLE);
}
if (entity.mCome == IMsgViewType.MSG_COME) {
// viewHolder.mUserName.setText(entity.mName);
}
else if (entity.mCome == IMsgViewType.MSG_TO){
viewHolder.mUserName.setText("本人");
}
return convertView;
}
public static Bitmap getLoacalBitmap(File file) {
try {
FileInputStream fis = new FileInputStream(file);
return BitmapFactory.decodeStream(fis); ///把流转化为Bitmap图片
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
}
private String formatTimes(long time) {
String dateFormat = "";
if (isSameDay(time)){
dateFormat = "今天 h:mmaa";
}
else {
dateFormat = "MM/dd h:mmaa";
}
SimpleDateFormat format1 = new SimpleDateFormat(dateFormat);
Date currentTime = new Date(time);
return format1.format(currentTime);
}
public static boolean isSameDay(long date) {
Time time = new Time();
time.setToNow();
int dayNow = Time.getJulianDay(time.normalize(true), 0);
int day = Time.getJulianDay(date, 0);
return dayNow == day;
}
}