package com.bestapp.yikuair.fragments;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.text.ClipboardManager;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.bestapp.yikuair.R;
import com.bestapp.yikuair.database.DBOpenHelper;
import com.bestapp.yikuair.officialaccount.PicTextList;
import com.bestapp.yikuair.officialaccount.ShowHtmlOrUrlView;
import com.bestapp.yikuair.utils.DBlog;
import com.bestapp.yikuair.utils.FriendEntity;
import com.bestapp.yikuair.utils.HttpUtils;
import com.bestapp.yikuair.utils.ImageLoaderOriginal;
import com.bestapp.yikuair.utils.MessageInfo;
import com.bestapp.yikuair.utils.UserInfo;
import com.bestapp.yikuair.utils.VoiceLoader;
public class ChatMsgViewAdapter extends BaseAdapter {
public static interface IMsgViewType {
final static int IM_COM_MSG = 0;
final static int IM_TO_MSG = 1;
final static int IM_COM_VOICE = 2;
final static int IM_TO_VOICE = 3;
final static int IM_COM_PICTURE = 4;
final static int IM_TO_PICTURE = 5;
final static int IM_COM_SCHEDULE = 6;
final static int IM_TO_SCHEDULE = 7;
final static int IM_COM_LOCATION = 8;
final static int IM_TO_LOCATION = 9;
final static int IM_COM_PIC_TEXT = 10;
final static int IM_COUNT = 11;
final static int IM_COM_WEN_INFO = 12;
}
private List<ChatMsgEntity> coll;
private Context ctx;
private LayoutInflater mInflater;
private DBOpenHelper dbOpenHelper;
private Cursor cursor;
private static ImageLoaderOriginal imageLoader = null;
private static VoiceLoader voiceLoader = null;
public ImageLoader imgLoader;
private static String SDCARDPATH = Environment
.getExternalStorageDirectory() + "/" + "yikuair/";
private ShowHtmlOrUrlView mShowHtmlOrUrlView;
public ChatMsgViewAdapter(Context context, List<ChatMsgEntity> coll) {
ctx = context;
this.coll = coll;
mInflater = LayoutInflater.from(context);
mShowHtmlOrUrlView = new ShowHtmlOrUrlView(context);
this.imgLoader = new ImageLoader(context);
if (imageLoader == null) {
imageLoader = new ImageLoaderOriginal(ctx);
}
if (voiceLoader == null) {
voiceLoader = new VoiceLoader(ctx);
}
}
public int getCount() {
return coll.size();
}
public Object getItem(int position) {
return coll.get(position);
}
public long getItemId(int position) {
return position;
}
public int getItemViewType(int position) {
// TODO Auto-generated method stub
ChatMsgEntity entity = coll.get(position);
if (entity.getIsComing()) {
if (entity.getType() == MessageInfo.TEXT) {
return IMsgViewType.IM_COM_MSG;
} else if (entity.getType() == MessageInfo.VOICE) {
return IMsgViewType.IM_COM_VOICE;
} else if (entity.getType() == MessageInfo.PICTURE) {
return IMsgViewType.IM_COM_PICTURE;
} else if (entity.getType() == MessageInfo.LOCATION) {
return IMsgViewType.IM_COM_LOCATION;
} else if (entity.getType() == MessageInfo.PIC_TEXT) {
return IMsgViewType.IM_COM_PIC_TEXT;
} else if (entity.getType() == MessageInfo.INFO_WEB) {
return IMsgViewType.IM_COM_WEN_INFO;
} else {
return IMsgViewType.IM_COM_SCHEDULE;
}
} else {
if (entity.getType() == MessageInfo.TEXT) {
return IMsgViewType.IM_TO_MSG;
} else if (entity.getType() == MessageInfo.VOICE) {
return IMsgViewType.IM_TO_VOICE;
} else if (entity.getType() == MessageInfo.PICTURE) {
return IMsgViewType.IM_TO_PICTURE;
} else if (entity.getType() == MessageInfo.LOCATION) {
return IMsgViewType.IM_TO_LOCATION;
} else {
return IMsgViewType.IM_TO_SCHEDULE;
}
}
}
public int getViewTypeCount() {
return IMsgViewType.IM_COUNT;
}
@SuppressLint("NewApi")
public View getView(final int position, View convertView, ViewGroup parent) {
final ChatMsgEntity entity = coll.get(position);
final boolean isComing = entity.getIsComing();
int type = entity.getType();
ViewHolder viewHolder = null;
// if (convertView == null) {
viewHolder = new ViewHolder();
if (isComing) {
if (type == MessageInfo.TEXT || type == MessageInfo.COMPANY_NEWS) {
convertView = mInflater.inflate(
R.layout.chatting_item_msg_text_left, null);
} else if (type == MessageInfo.VOICE) {
convertView = mInflater.inflate(
R.layout.chatting_item_msg_voice_left, null);
} else if (type == MessageInfo.PICTURE) {
convertView = mInflater.inflate(
R.layout.chatting_item_msg_picture_left, null);
} else if (type == MessageInfo.LOCATION) {
convertView = mInflater.inflate(
R.layout.chatting_item_msg_location_left, null);
} else if (type == MessageInfo.PIC_TEXT) {
convertView = mInflater.inflate(
R.layout.chatting_item_msg_pic_text_left, null);
} else if (type == MessageInfo.INFO_WEB) {
convertView = mInflater.inflate(R.layout.chatting_item_msg_web,
null);
viewHolder.web_info = (WebView) convertView
.findViewById(R.id.web_info);
} else {
convertView = mInflater.inflate(
R.layout.chatting_item_msg_schedule_left, null);
}
} else {
if (type == MessageInfo.TEXT) {
convertView = mInflater.inflate(
R.layout.chatting_item_msg_text_right, null);
} else if (type == MessageInfo.VOICE) {
convertView = mInflater.inflate(
R.layout.chatting_item_msg_voice_right, null);
} else if (type == MessageInfo.PICTURE) {
convertView = mInflater.inflate(
R.layout.chatting_item_msg_picture_right, null);
} else if (type == MessageInfo.LOCATION) {
convertView = mInflater.inflate(
R.layout.chatting_item_msg_location_right, null);
} else {
convertView = mInflater.inflate(
R.layout.chatting_item_msg_schedule_right, null);
}
}
viewHolder.tvSendTime = (TextView) convertView
.findViewById(R.id.tv_sendtime);
viewHolder.tvDate = (TextView) convertView.findViewById(R.id.tv_date);
if (type != MessageInfo.PIC_TEXT)
viewHolder.photo = (ImageView) convertView
.findViewById(R.id.iv_userhead);
viewHolder.ll_tv_show = (LinearLayout) convertView
.findViewById(R.id.iv_show);
if (!isComing) {
viewHolder.tvState = (TextView) convertView
.findViewById(R.id.tv_state);
viewHolder.ll_progressBar = (RelativeLayout) convertView
.findViewById(R.id.ll_progressbar);
viewHolder.rl_state = (RelativeLayout) convertView
.findViewById(R.id.rl_state);
}
if (type == MessageInfo.SCHEDULE) {
viewHolder.scheduleTitle = (TextView) convertView
.findViewById(R.id.tv_title_content);
viewHolder.scheduleBeginTime = (TextView) convertView
.findViewById(R.id.tv_beginTime_content);
viewHolder.scheduleEndTime = (TextView) convertView
.findViewById(R.id.tv_endTime_content);
viewHolder.scheduleAddress = (TextView) convertView
.findViewById(R.id.tv_address_content);
viewHolder.ll_beginTime = (LinearLayout) convertView
.findViewById(R.id.ll_beginTime);
viewHolder.ll_endTime = (LinearLayout) convertView
.findViewById(R.id.ll_endTime);
viewHolder.ll_address = (LinearLayout) convertView
.findViewById(R.id.ll_address);
viewHolder.ll_schedule_content = (LinearLayout) convertView
.findViewById(R.id.tv_chatcontent);
if (isComing == true)
viewHolder.tv_check = (TextView) convertView
.findViewById(R.id.tv_check);
}
if (type == MessageInfo.PICTURE) {
viewHolder.ivPicture = (ImageView) convertView
.findViewById(R.id.iv_chatpicture);
} else if (type == MessageInfo.TEXT || type == MessageInfo.COMPANY_NEWS
|| type == MessageInfo.LOCATION || type == MessageInfo.PIC_TEXT) {
viewHolder.tvContent = (TextView) convertView
.findViewById(R.id.tv_chatcontent);
if (type == MessageInfo.LOCATION) {
viewHolder.ll_tv_content = (LinearLayout) convertView
.findViewById(R.id.ll_chatcontent);
viewHolder.ll_tv_content.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(ctx, LocationMessage.class);
if (entity.getlongitude() != null
&& entity.getlatitude() != null
&& entity.getContent() != null) {
Double longitude = Double.parseDouble(entity
.getlongitude());
Double latitude = Double.parseDouble(entity
.getlatitude());
String location = entity.getContent();
intent.putExtra("location", location);
intent.putExtra("longitude", longitude);
intent.putExtra("latitude", latitude);
ctx.startActivity(intent);
((Activity) ctx).overridePendingTransition(
R.anim.in_from_right, R.anim.out_of_left);
}
}
}
);
}
if (type == MessageInfo.PIC_TEXT) {
viewHolder.title = (TextView) convertView
.findViewById(R.id.tv_title);
viewHolder.ivPicture = (ImageView) convertView
.findViewById(R.id.iv_content);
viewHolder.ll_tv_content = (LinearLayout) convertView
.findViewById(R.id.ll_content);
// viewHolder.pic_txt_list = (ListView) convertView
// .findViewById(R.id.pic_txt_list);
}
if (type == MessageInfo.PIC_TEXT) {
viewHolder.web_info = (WebView) convertView
.findViewById(R.id.web_info);
}
} else if (type == MessageInfo.VOICE) {
viewHolder.chatSec = (TextView) convertView
.findViewById(R.id.tv_second);
viewHolder.voiceContent = (RelativeLayout) convertView
.findViewById(R.id.voice_content);
viewHolder.voiceAnim = (ImageView) convertView
.findViewById(R.id.voice_anim);
}
convertView.setTag(viewHolder);
/*
* } else { viewHolder = (ViewHolder) convertView.getTag(); }
*/
if (type != MessageInfo.PIC_TEXT && type != MessageInfo.INFO_WEB) {
if (!isComing) {
try {
if (UserInfo.LocalphotoPath != null
&& UserInfo.LocalphotoPath.length() > 0) {
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
BitmapFactory.decodeFile(UserInfo.LocalphotoPath, opts);
opts.inSampleSize = computeSampleSize(opts, -1,
128 * 128);
opts.inJustDecodeBounds = false;
try {
Bitmap bmp = BitmapFactory.decodeFile(
UserInfo.LocalphotoPath, opts);
viewHolder.photo
.setBackgroundDrawable(new BitmapDrawable(
bmp));
} catch (OutOfMemoryError err) {
}
} else {
if (UserInfo.sex != null && UserInfo.sex.equals("0"))
viewHolder.photo.setBackgroundDrawable(ctx
.getResources()
.getDrawable(R.drawable.girl));
else
viewHolder.photo
.setBackgroundDrawable(ctx.getResources()
.getDrawable(R.drawable.boy));
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
if (getHeadUrlFromDB(entity.getSenderId()) != null
&& getHeadUrlFromDB(entity.getSenderId()).length() > 0) {
String headUrl = "http://" + UserInfo.downloadImgUrl
+ getHeadUrlFromDB(entity.getSenderId());
imgLoader.DisplayImage(headUrl, (Activity) ctx,
viewHolder.photo);
} else {
if (getSexFromDB(entity.getSenderId()).equals("0"))
viewHolder.photo.setImageDrawable(ctx.getResources()
.getDrawable(R.drawable.ico_girl));
else
viewHolder.photo.setImageDrawable(ctx.getResources()
.getDrawable(R.drawable.ico_boy));
}
}
viewHolder.photo.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(ctx,
PersonalProfileActivity.class);
if (isComing) {
FriendEntity friendEntity = getPersonalProfile(entity
.getSenderId());
Bundle bundle = new Bundle();
bundle.putSerializable("friendEntity", friendEntity);
intent.putExtras(bundle);
} else {
intent.putExtra("individualInfo", " ");
}
intent.putExtra("isFromChat", true);
ctx.startActivity(intent);
((Activity) ctx).overridePendingTransition(
R.anim.in_from_right, R.anim.out_of_left);
}
});
}
viewHolder.tvSendTime.setText(entity.getTime());
if ((entity.getDate() != null) && (!entity.getDate().equals(""))) {
viewHolder.tvDate.setVisibility(View.VISIBLE);
viewHolder.tvDate.setText(entity.getDate());
} else {
viewHolder.tvDate.setVisibility(View.GONE);
}
if (isComing == false) {
viewHolder.tvState.setBackgroundResource(entity.getBackground());
viewHolder.tvState.setText(entity.getChatState());
viewHolder.ll_progressBar.setVisibility(View.GONE/*
* entity.getAnimVisible
* ()
*/);
viewHolder.rl_state.setVisibility(View.VISIBLE/*
* entity.getStateVisible
* ()
*/);
}
if (type == MessageInfo.SCHEDULE) {
viewHolder.scheduleTitle.setText(entity.getScheduleTitle());
if (entity.getScheduleBeginTime() != null
&& entity.getScheduleType() != MessageInfo.TASK) {
viewHolder.scheduleBeginTime.setText(entity
.getScheduleBeginTime());
viewHolder.ll_beginTime.setVisibility(View.VISIBLE);
}
DisplayMetrics dm = ctx.getResources().getDisplayMetrics();
int mScreenWidth = dm.widthPixels;
int maxWidth = 0;
maxWidth = mScreenWidth - 40 - (int) (0.55 * mScreenWidth);
viewHolder.scheduleTitle.setMaxWidth(maxWidth);
viewHolder.scheduleAddress.setMaxWidth(maxWidth);
if (entity.getScheduleAddress() != null
&& entity.getScheduleAddress().length() > 0) {
Log.e("test", "address :" + entity.getScheduleAddress());
viewHolder.scheduleAddress.setText(entity.getScheduleAddress());
viewHolder.ll_address.setVisibility(View.VISIBLE);
}
viewHolder.scheduleEndTime.setText(entity.getScheduleEndTime());
viewHolder.ll_schedule_content
.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View arg0) {
// TODO Auto-generated method stub
String title;
if (isComing) {
if (entity.getSenderId() == null)
return false;
title = getNameFromDB(entity.getSenderId());
if (entity.getSenderId() == UserInfo.companyNews_dbId)
title = "公司动态";
else if (entity.getSenderId() == UserInfo.feedback_dbId)
title = "用户反馈";
else
title = entity.getChatName();
String[] groupStr = entity.getSenderId().split(
"、");
if (groupStr.length > 1)
title = "群聊" + "("
+ Integer.toString(groupStr.length)
+ "人" + ")";
} else {
if (entity.getReceiverId() == null)
return false;
title = getNameFromDB(entity.getReceiverId());
if (entity.getReceiverId() == UserInfo.companyNews_dbId)
title = "公司动态";
else if (entity.getReceiverId() == UserInfo.feedback_dbId)
title = "用户反馈";
else
title = entity.getChatName();
String[] groupStr = entity.getReceiverId()
.split("、");
if (groupStr.length > 1)
title = "群聊" + "("
+ Integer.toString(groupStr.length)
+ "人" + ")";
}
AlertDialog dialog = new AlertDialog.Builder(ctx)
.setTitle(title)
// 对话框标题
.setItems(
new String[] { "查看", "删除" },
new DialogInterface.OnClickListener() {// 每一条的名称
@SuppressWarnings("deprecation")
public void onClick(
DialogInterface dialog,
int which) {// 响应点击事件
if (which == 0) {
String[] names = null;
String[] ids = null;
String[] tempNames = null;
String[] tempIds = null;
if (entity
.getGroupNames() != null)
tempNames = entity
.getGroupNames()
.split("、");
if (entity
.getGroupIds() != null)
tempIds = entity
.getGroupIds()
.split("、");
if (tempIds.length == 1) {
ids = new String[2];
names = new String[2];
ids[0] = UserInfo.db_id;
ids[1] = tempIds[0];
names[0] = UserInfo.realName;
names[1] = tempNames[0];
} else {
ids = tempIds;
names = tempNames;
}
if (entity
.getScheduleType() == MessageInfo.TASK) {
Log.e("test",
"task........");
Intent intent = new Intent(
ctx,
ScheduleTaskActivity.class);
Bundle bundle = new Bundle();
bundle.putStringArray(
"nameStr",
names);
bundle.putStringArray(
"idStr",
ids);
intent.putExtra(
"endDate",
entity.getScheduleEndTime());
intent.putExtra(
"type",
MessageInfo.TASK);
if (isComing) {
intent.putExtra(
"ItemId",
"");
intent.putExtra(
"isFromChat",
true);
} else {
intent.putExtra(
"ItemId",
entity.getScheduleItemId());
intent.putExtra(
"isFromChat",
false);
}
intent.putExtra(
"taskId",
entity.getScheduleTaskId());
intent.putExtra(
"isFromChatToModify",
true);
intent.putExtra(
"title",
entity.getScheduleTitle());
intent.putExtras(bundle);
((Activity) ctx)
.startActivityForResult(
intent,
4);
((Activity) ctx)
.overridePendingTransition(
R.anim.in_from_down,
R.anim.out_of_up);
} else if (entity
.getScheduleType() == MessageInfo.MEETING) {
Log.e("test",
"meeting........");
Intent intent = new Intent(
ctx,
ScheduleMeetingActivity.class);
Bundle bundle = new Bundle();
bundle.putStringArray(
"nameStr",
names);
bundle.putStringArray(
"idStr",
ids);
intent.putExtra(
"beginDate",
entity.getScheduleBeginTime());
intent.putExtra(
"endDate",
entity.getScheduleEndTime());
intent.putExtra(
"type",
MessageInfo.MEETING);
intent.putExtra(
"address",
entity.getScheduleAddress());
if (isComing) {
intent.putExtra(
"ItemId",
"");
intent.putExtra(
"isFromChat",
true);
} else {
intent.putExtra(
"ItemId",
entity.getScheduleItemId());
intent.putExtra(
"isFromChat",
false);
}
intent.putExtra(
"isFromChatToModify",
true);
intent.putExtra(
"taskId",
entity.getScheduleTaskId());
intent.putExtra(
"title",
entity.getScheduleTitle());
intent.putExtras(bundle);
((Activity) ctx)
.startActivityForResult(
intent,
4);
((Activity) ctx)
.overridePendingTransition(
R.anim.in_from_down,
R.anim.out_of_up);
} else {
Log.e("test",
"other.........");
Intent intent = new Intent(
ctx,
ScheduleOtherActivity.class);
Bundle bundle = new Bundle();
bundle.putStringArray(
"nameStr",
names);
bundle.putStringArray(
"idStr",
ids);
intent.putExtra(
"beginDate",
entity.getScheduleBeginTime());
intent.putExtra(
"endDate",
entity.getScheduleEndTime());
intent.putExtra(
"type",
MessageInfo.OTHER);
intent.putExtra(
"address",
entity.getScheduleAddress());
if (isComing) {
intent.putExtra(
"ItemId",
"");
intent.putExtra(
"isFromChat",
true);
} else {
intent.putExtra(
"ItemId",
entity.getScheduleItemId());
intent.putExtra(
"isFromChat",
false);
}
intent.putExtra(
"taskId",
entity.getScheduleTaskId());
intent.putExtra(
"isFromChatToModify",
true);
intent.putExtra(
"title",
entity.getScheduleTitle());
intent.putExtras(bundle);
((Activity) ctx)
.startActivityForResult(
intent,
4);
((Activity) ctx)
.overridePendingTransition(
R.anim.in_from_down,
R.anim.out_of_up);
}
} else {
if (entity
.getMessageType() == MessageInfo.COMPANY_NEWS) {
CompanyNewsFragment.mDataArrays
.remove(position);
notifyDataSetChanged();
} else if (entity
.getMessageType() == MessageInfo.USER_FEEDBACK) {
FeedBackFragment.mDataArrays
.remove(position);
notifyDataSetChanged();
} else {
ChatActivity.mDataArrays
.remove(position);
notifyDataSetChanged();
}
}
}
}).create();
dialog.show();
dialog.setCanceledOnTouchOutside(true);
return false;
}
});
/******************************************/
viewHolder.ll_schedule_content
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String[] names = null;
String[] ids = null;
String[] tempNames = null;
String[] tempIds = null;
if (entity.getGroupNames() != null)
tempNames = entity.getGroupNames().split("、");
if (entity.getGroupIds() != null)
tempIds = entity.getGroupIds().split("、");
if (tempIds.length == 1) {
ids = new String[2];
names = new String[2];
ids[0] = UserInfo.db_id;
ids[1] = tempIds[0];
names[0] = UserInfo.realName;
names[1] = tempNames[0];
} else {
ids = tempIds;
names = tempNames;
}
if (entity.getScheduleType() == MessageInfo.TASK) {
Log.e("test", "task........");
Intent intent = new Intent(ctx,
ScheduleTaskActivity.class);
Bundle bundle = new Bundle();
bundle.putStringArray("nameStr", names);
bundle.putStringArray("idStr", ids);
intent.putExtra("endDate",
entity.getScheduleEndTime());
intent.putExtra("type", MessageInfo.TASK);
if (isComing) {
intent.putExtra("ItemId", "");
intent.putExtra("isFromChat", true);
} else {
intent.putExtra("ItemId",
entity.getScheduleItemId());
intent.putExtra("isFromChat", false);
}
intent.putExtra("taskId",
entity.getScheduleTaskId());
intent.putExtra("isFromChatToModify", true);
intent.putExtra("title",
entity.getScheduleTitle());
intent.putExtras(bundle);
((Activity) ctx).startActivityForResult(intent,
4);
((Activity) ctx).overridePendingTransition(
R.anim.in_from_down, R.anim.out_of_up);
} else if (entity.getScheduleType() == MessageInfo.MEETING) {
Log.e("test", "meeting........");
Intent intent = new Intent(ctx,
ScheduleMeetingActivity.class);
Bundle bundle = new Bundle();
bundle.putStringArray("nameStr", names);
bundle.putStringArray("idStr", ids);
intent.putExtra("beginDate",
entity.getScheduleBeginTime());
intent.putExtra("endDate",
entity.getScheduleEndTime());
intent.putExtra("type", MessageInfo.MEETING);
intent.putExtra("address",
entity.getScheduleAddress());
if (isComing) {
intent.putExtra("ItemId", "");
intent.putExtra("isFromChat", true);
} else {
intent.putExtra("ItemId",
entity.getScheduleItemId());
intent.putExtra("isFromChat", false);
}
intent.putExtra("isFromChatToModify", true);
intent.putExtra("taskId",
entity.getScheduleTaskId());
intent.putExtra("title",
entity.getScheduleTitle());
intent.putExtras(bundle);
((Activity) ctx).startActivityForResult(intent,
4);
((Activity) ctx).overridePendingTransition(
R.anim.in_from_down, R.anim.out_of_up);
} else {
Log.e("test", "other.........");
Intent intent = new Intent(ctx,
ScheduleOtherActivity.class);
Bundle bundle = new Bundle();
bundle.putStringArray("nameStr", names);
bundle.putStringArray("idStr", ids);
intent.putExtra("beginDate",
entity.getScheduleBeginTime());
intent.putExtra("endDate",
entity.getScheduleEndTime());
intent.putExtra("type", MessageInfo.OTHER);
intent.putExtra("address",
entity.getScheduleAddress());
if (isComing) {
intent.putExtra("ItemId", "");
intent.putExtra("isFromChat", true);
} else {
intent.putExtra("ItemId",
entity.getScheduleItemId());
intent.putExtra("isFromChat", false);
}
intent.putExtra("taskId",
entity.getScheduleTaskId());
intent.putExtra("isFromChatToModify", true);
intent.putExtra("title",
entity.getScheduleTitle());
intent.putExtras(bundle);
((Activity) ctx).startActivityForResult(intent,
4);
((Activity) ctx).overridePendingTransition(
R.anim.in_from_down, R.anim.out_of_up);
}
}
});
if (isComing == true) {
viewHolder.tv_check.setText(entity.getCheckStatus());
viewHolder.tv_check.setBackgroundResource(entity
.getCheckBackground());
viewHolder.tv_check.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (entity.getCheckStatus()
.equals(ctx.getResources().getString(
R.string.canceled)))
return;
ClientSocket client = new ClientSocket(ctx);
client.sendMessage(null, 14, entity.getMsguuid(),
entity.getSenderId(), UserInfo.db_id, null,
null, null, entity.getScheduleTaskId(),
String.valueOf(entity.getChatType()), null,
false);
sendMessageBroadcast(entity.getMsguuid());// modify
// check
// status
/*
* Log.e("test", "entity scheduelBeginTime :" +
* entity.getScheduleBeginTime()); Log.e("test",
* "entity scheduelEndTime :" +
* entity.getScheduleEndTime());
*/
ScheduleItemInfo item = new ScheduleItemInfo();
item.setScheduleContent(entity.getScheduleTitle());
item.setScheduleBeginTime(getScheduleDate(entity
.getScheduleBeginTime()));
item.setScheduleEndTime(getScheduleDate(entity
.getScheduleEndTime()));
item.setType(entity.getScheduleType());
item.setSponsorName(getNameFromDB(entity.getSenderId()));
item.setId(entity.getSenderId());// sender dbid
item.setTaskId(entity.getScheduleTaskId());
if (entity.getScheduleAddress() != null
&& entity.getScheduleAddress().length() > 0)
item.setAddress(entity.getScheduleAddress());
String idStr = entity.getGroupIds();
String nameStr = entity.getGroupNames();
if (idStr != null && nameStr != null) {
String[] ids;
String[] names;
String[] tempIds = idStr.split("、");
String[] tempNames = nameStr.split("、");
if (tempIds.length == 1) {
ids = new String[2];
names = new String[2];
for (int i = 0; i < 2; i++) {
if (i == 0) {
ids[i] = UserInfo.db_id;
names[i] = UserInfo.realName;
} else {
ids[i] = tempIds[0];
names[i] = tempNames[0];
}
}
} else {
ids = tempIds;
names = tempNames;
}
item.setMemberId(ids);
item.setMemberName(names);
}
item.setIsFromChat(true);
/*
* String[] str = entity.getReceiverId().split(",");
* String[] idStr = new String[str.length]; if (str !=
* null) for (int i = 0; i < str.length; i++) { idStr[i]
* = str[i]; Log.e("test","id:" + idStr[i]); }
* item.setMemberId(idStr);
*/
MessageInfo.scheduleList.add(item);
}
});
}
} else if (type == MessageInfo.PICTURE) {
if (!isComing) {
/*
* Bitmap bitmap = BitmapCompressUtil
* .getResizeImage(BitmapCompressUtil.rotateImageView(
* BitmapCompressUtil.readPictureDegree(entity .getBigPicUrl()),
* BitmapCompressUtil .decodeFileFromPath(entity
* .getBigPicUrl())));
*/
Bitmap bitmap = BitmapFactory.decodeFile(entity
.getSmallPicUrl()/* entity.getBigPicUrl() */);
viewHolder.ivPicture.setImageBitmap(bitmap);
} else {
getImage(convertView, entity.getSmallPicUrl(),
R.id.iv_chatpicture);
}
viewHolder.ivPicture
.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View arg0) {
// TODO Auto-generated method stub
String title;
if (isComing) {
if (entity.getSenderId() == null)
return false;
title = getNameFromDB(entity.getSenderId());
if (entity.getSenderId() == UserInfo.companyNews_dbId)
title = "公司动态";
else if (entity.getSenderId() == UserInfo.feedback_dbId)
title = "用户反馈";
else
title = entity.getChatName();
String[] groupStr = entity.getSenderId().split(
"、");
if (groupStr.length > 1)
title = "群聊" + "("
+ Integer.toString(groupStr.length)
+ "人" + ")";
} else {
if (entity.getReceiverId() == null)
return false;
title = getNameFromDB(entity.getReceiverId());
if (entity.getReceiverId() == UserInfo.companyNews_dbId)
title = "公司动态";
else if (entity.getReceiverId() == UserInfo.feedback_dbId)
title = "用户反馈";
else
title = entity.getChatName();
String[] groupStr = entity.getReceiverId()
.split("、");
if (groupStr.length > 1)
title = "群聊" + "("
+ Integer.toString(groupStr.length)
+ "人" + ")";
}
AlertDialog dialog = new AlertDialog.Builder(ctx)
.setTitle(title)
// 对话框标题
.setItems(
new String[] { "查看", "删除" },
new DialogInterface.OnClickListener() {// 每一条的名称
@SuppressWarnings("deprecation")
public void onClick(
DialogInterface dialog,
int which) {// 响应点击事件
if (which == 0) {
String sdStatus = Environment
.getExternalStorageState();
if (!sdStatus
.equals(Environment.MEDIA_MOUNTED)) {
Toast.makeText(
ctx,
ctx.getString(R.string.sdcard_error),
Toast.LENGTH_SHORT)
.show();
return;
}
final String imagePath = coll
.get(position)
.getBigPicUrl();
final Boolean isDownload = coll
.get(position)
.getIsComing();
Intent intent = new Intent();
Log.i("test",
"bigimagePath :"
+ imagePath);
intent.putExtra(
"imagePath",
imagePath);
intent.putExtra(
"isDownload",
isDownload);
intent.setClass(
ctx,
ImageActivity.class);
ctx.startActivity(intent);
} else {
if (entity
.getMessageType() == MessageInfo.COMPANY_NEWS) {
CompanyNewsFragment.mDataArrays
.remove(position);
notifyDataSetChanged();
} else if (entity
.getMessageType() == MessageInfo.USER_FEEDBACK) {
FeedBackFragment.mDataArrays
.remove(position);
notifyDataSetChanged();
} else {
ChatActivity.mDataArrays
.remove(position);
notifyDataSetChanged();
}
}
}
}).create();
dialog.show();
dialog.setCanceledOnTouchOutside(true);
return false;
}
});
viewHolder.ivPicture.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
Toast.makeText(ctx,
ctx.getString(R.string.sdcard_error),
Toast.LENGTH_SHORT).show();
return;
}
if (position > coll.size() - 1)
return;
final String imagePath = coll.get(position).getBigPicUrl();
final Boolean isDownload = coll.get(position).getIsComing();
Intent intent = new Intent();
Log.i("test", "bigimagePath :" + imagePath);
intent.putExtra("imagePath", imagePath);
intent.putExtra("isDownload", isDownload);
intent.setClass(ctx, ImageActivity.class);
ctx.startActivity(intent);
}
});
} else if (type == MessageInfo.INFO_WEB) {
if (entity.getDetail() != null
&& !entity.getDetail().trim().equals("")) {
try {
viewHolder.web_info.loadData(
URLEncoder.encode(entity.getDetail(), "utf-8"),
"text/html", "utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
}
} else if (entity.getUrl() != null
&& !entity.getUrl().trim().equals("")) {
}
} else if (type == MessageInfo.TEXT || type == MessageInfo.COMPANY_NEWS
|| type == MessageInfo.LOCATION || type == MessageInfo.PIC_TEXT) {
DisplayMetrics dm = ctx.getResources().getDisplayMetrics();
int mScreenWidth = dm.widthPixels;
int maxWidth = 0;
// if (isComing) {
// maxWidth = mScreenWidth - 40 - (int) (0.3 * mScreenWidth);
// } else {
maxWidth = mScreenWidth - 40 - (int) (0.25 * mScreenWidth);
// }
if (type != MessageInfo.LOCATION && type != MessageInfo.PIC_TEXT)
viewHolder.tvContent.setMaxWidth(maxWidth);
viewHolder.tvContent.setText(entity.getContent());
if (type == MessageInfo.PIC_TEXT) {
viewHolder.title.setText(entity.getTitle());
viewHolder.ll_tv_show.setTag(entity.getParentPicText());
viewHolder.ll_tv_show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mShowHtmlOrUrlView.ShowWindow((PicTextList) v.getTag());
}
});
getImage(convertView, entity.getSmallPicUrl(), R.id.iv_content);
for (int i = 0; i < entity.getList().size(); i++) {
View myView = mInflater
.inflate(R.layout.pic_txt_item, null);
ImageView img = (ImageView) myView
.findViewById(R.id.item_image_path);
DBlog.e("---------------------", entity.getList().get(i)
.getImgpath());
new ImageAsynTask(entity.getList().get(i).getImgpath(), img)
.execute();
myView.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, 200));
// imgLoader.DisplayImage(
// entity.getList().get(i).getImgpath(),
// (Activity) ctx, img);
TextView textView = (TextView) myView
.findViewById(R.id.item_title);
textView.setText(entity.getList().get(i).getTitle());
viewHolder.ll_tv_content.addView(myView);
myView.setTag(entity.getList().get(i));
myView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mShowHtmlOrUrlView.ShowWindow((PicTextList) v
.getTag());
}
});
}
}
if (type == MessageInfo.LOCATION || type == MessageInfo.PIC_TEXT)
viewHolder.ll_tv_content
.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View arg0) {
String title;
if (isComing) {
if (entity.getSenderId() == null)
return false;
title = getNameFromDB(entity.getSenderId());
if (entity.getSenderId() == UserInfo.companyNews_dbId)
title = "公司动态";
else if (entity.getSenderId() == UserInfo.feedback_dbId)
title = "用户反馈";
else
title = entity.getChatName();
String[] groupStr = entity.getSenderId()
.split("、");
if (groupStr.length > 1)
title = "群聊"
+ "("
+ Integer
.toString(groupStr.length)
+ "人" + ")";
} else {
if (entity.getReceiverId() == null)
return false;
title = getNameFromDB(entity
.getReceiverId());
if (entity.getReceiverId() == UserInfo.companyNews_dbId)
title = "公司动态";
else if (entity.getReceiverId() == UserInfo.feedback_dbId)
title = "用户反馈";
else
title = entity.getChatName();
String[] groupStr = entity.getReceiverId()
.split("、");
if (groupStr.length > 1)
title = "群聊"
+ "("
+ Integer
.toString(groupStr.length)
+ "人" + ")";
}
AlertDialog dialog = new AlertDialog.Builder(
ctx)
.setTitle(title)
// 对话框标题
.setItems(
new String[] { "复制", "删除" },
new DialogInterface.OnClickListener() {// 每一条的名称
@SuppressWarnings("deprecation")
public void onClick(
DialogInterface dialog,
int which) {// 响应点击事件
if (which == 0) {
ClipboardManager clip = (ClipboardManager) ctx
.getSystemService(Context.CLIPBOARD_SERVICE);
clip.setText(entity
.getContent());
} else {
if (entity
.getMessageType() == MessageInfo.COMPANY_NEWS) {
CompanyNewsFragment.mDataArrays
.remove(position);
notifyDataSetChanged();
} else if (entity
.getMessageType() == MessageInfo.USER_FEEDBACK) {
FeedBackFragment.mDataArrays
.remove(position);
notifyDataSetChanged();
} else {
ChatActivity.mDataArrays
.remove(position);
notifyDataSetChanged();
}
}
}
}).create();
dialog.show();
dialog.setCanceledOnTouchOutside(true);
return false;
}
});
else
viewHolder.tvContent
.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View arg0) {
String title;
if (isComing) {
if (entity.getSenderId() == null)
return false;
title = getNameFromDB(entity.getSenderId());
if (entity.getSenderId() == UserInfo.companyNews_dbId)
title = "公司动态";
else if (entity.getSenderId() == UserInfo.feedback_dbId)
title = "用户反馈";
else
title = entity.getChatName();
String[] groupStr = entity.getSenderId()
.split("、");
if (groupStr.length > 1)
title = "群聊"
+ "("
+ Integer
.toString(groupStr.length)
+ "人" + ")";
} else {
if (entity.getReceiverId() == null)
return false;
title = getNameFromDB(entity
.getReceiverId());
if (entity.getReceiverId() == UserInfo.companyNews_dbId)
title = "公司动态";
else if (entity.getReceiverId() == UserInfo.feedback_dbId)
title = "用户反馈";
else
title = entity.getChatName();
String[] groupStr = entity.getReceiverId()
.split("、");
if (groupStr.length > 1)
title = "群聊"
+ "("
+ Integer
.toString(groupStr.length)
+ "人" + ")";
}
AlertDialog dialog = new AlertDialog.Builder(
ctx)
.setTitle(title)
// 对话框标题
.setItems(
new String[] { "复制", "删除" },
new DialogInterface.OnClickListener() {// 每一条的名称
@SuppressWarnings("deprecation")
public void onClick(
DialogInterface dialog,
int which) {// 响应点击事件
if (which == 0) {
ClipboardManager clip = (ClipboardManager) ctx
.getSystemService(Context.CLIPBOARD_SERVICE);
clip.setText(entity
.getContent());
} else {
if (entity
.getMessageType() == MessageInfo.COMPANY_NEWS) {
CompanyNewsFragment.mDataArrays
.remove(position);
notifyDataSetChanged();
} else if (entity
.getMessageType() == MessageInfo.USER_FEEDBACK) {
FeedBackFragment.mDataArrays
.remove(position);
notifyDataSetChanged();
} else {
ChatActivity.mDataArrays
.remove(position);
notifyDataSetChanged();
}
}
}
}).create();
dialog.show();
dialog.setCanceledOnTouchOutside(true);
return false;
}
});
} else if (type == MessageInfo.VOICE) {
if (isComing)
getVoice(convertView, entity.getVoiceUrl(), R.id.tv_second,
entity.getSecond());
else
viewHolder.chatSec.setText(entity.getSecond());
viewHolder.voiceContent
.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View arg0) {
// TODO Auto-generated method stub
String title;
if (isComing) {
if (entity.getSenderId() == null)
return false;
title = getNameFromDB(entity.getSenderId());
if (entity.getSenderId() == UserInfo.companyNews_dbId)
title = "公司动态";
else if (entity.getSenderId() == UserInfo.feedback_dbId)
title = "用户反馈";
else
title = entity.getChatName();
String[] groupStr = entity.getSenderId().split(
"、");
if (groupStr.length > 1)
title = "群聊" + "("
+ Integer.toString(groupStr.length)
+ "人" + ")";
} else {
if (entity.getReceiverId() == null)
return false;
title = getNameFromDB(entity.getReceiverId());
if (entity.getReceiverId() == UserInfo.companyNews_dbId)
title = "公司动态";
else if (entity.getReceiverId() == UserInfo.feedback_dbId)
title = "用户反馈";
else
title = entity.getChatName();
String[] groupStr = entity.getReceiverId()
.split("、");
if (groupStr.length > 1)
title = "群聊" + "("
+ Integer.toString(groupStr.length)
+ "人" + ")";
}
final ImageView view = (ImageView) arg0
.findViewById(R.id.voice_anim);
AlertDialog dialog = new AlertDialog.Builder(ctx)
.setTitle(title)
// 对话框标题
.setItems(
new String[] { "查看", "删除" },
new DialogInterface.OnClickListener() {// 每一条的名称
@SuppressWarnings("deprecation")
public void onClick(
DialogInterface dialog,
int which) {// 响应点击事件
if (which == 0) {
String sdStatus = Environment
.getExternalStorageState();
if (!sdStatus
.equals(Environment.MEDIA_MOUNTED)) {
Toast.makeText(
ctx,
ctx.getString(R.string.sdcard_error),
Toast.LENGTH_SHORT)
.show();
return;
}
view.setBackgroundResource(0);
if (isComing) {
view.setImageResource(R.drawable.voice_animation_left);
} else {
view.setImageResource(R.drawable.voice_animation_right);
}
String voicePath = null;
final AnimationDrawable animationDrawable = (AnimationDrawable) view
.getDrawable();
animationDrawable
.setOneShot(false);
animationDrawable
.start();
if (!isComing) {
voicePath = coll
.get(position)
.getVoiceUrl();
} else {
String[] str = coll
.get(position)
.getVoiceUrl()
.split("\\/");
if (str != null
&& str.length > 4)
voicePath = SDCARDPATH
+ str[4];
}
Log.i("test",
"voicePath : "
+ voicePath);
try {
MediaPlayer player = new MediaPlayer();
try {
// player.setDataSource(voicePath);
// player.prepare();
File file = new File(
voicePath);
FileInputStream fis = new FileInputStream(
file);
player.setDataSource(fis
.getFD());
player.prepare();
player.start();
player.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(
MediaPlayer mp) {
animationDrawable
.stop();
animationDrawable
.setVisible(
false,
false);
if (isComing) {
view.setBackgroundDrawable(ctx
.getResources()
.getDrawable(
R.drawable.ico_left_wave_3));
} else {
view.setBackgroundDrawable(ctx
.getResources()
.getDrawable(
R.drawable.ico_right_wave_3));
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
} else {
if (entity
.getMessageType() == MessageInfo.COMPANY_NEWS) {
CompanyNewsFragment.mDataArrays
.remove(position);
notifyDataSetChanged();
} else if (entity
.getMessageType() == MessageInfo.USER_FEEDBACK) {
FeedBackFragment.mDataArrays
.remove(position);
notifyDataSetChanged();
} else {
ChatActivity.mDataArrays
.remove(position);
notifyDataSetChanged();
}
}
}
}).create();
dialog.show();
dialog.setCanceledOnTouchOutside(true);
return false;
}
});
viewHolder.voiceContent.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
Toast.makeText(ctx,
ctx.getString(R.string.sdcard_error),
Toast.LENGTH_SHORT).show();
return;
}
final ImageView view = (ImageView) v
.findViewById(R.id.voice_anim);
view.setBackgroundResource(0);
if (isComing) {
view.setImageResource(R.drawable.voice_animation_left);
} else {
view.setImageResource(R.drawable.voice_animation_right);
}
String voicePath = null;
final AnimationDrawable animationDrawable = (AnimationDrawable) view
.getDrawable();
animationDrawable.setOneShot(false);
animationDrawable.start();
if (!isComing) {
voicePath = coll.get(position).getVoiceUrl();
} else {
String[] str = coll.get(position).getVoiceUrl()
.split("\\/");
if (str != null && str.length > 4)
voicePath = SDCARDPATH + str[4];
}
Log.i("test", "voicePath : " + voicePath);
try {
MediaPlayer player = new MediaPlayer();
try {
// player.setDataSource(voicePath);
// player.prepare();
File file = new File(voicePath);
FileInputStream fis = new FileInputStream(file);
player.setDataSource(fis.getFD());
player.prepare();
player.start();
player.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
animationDrawable.stop();
animationDrawable.setVisible(false, false);
if (isComing) {
view.setBackgroundDrawable(ctx
.getResources()
.getDrawable(
R.drawable.ico_left_wave_3));
} else {
view.setBackgroundDrawable(ctx
.getResources()
.getDrawable(
R.drawable.ico_right_wave_3));
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
});
}
return convertView;
}
static class ViewHolder {
public TextView title;
public TextView tvSendTime;
public TextView tvDate;
public TextView tvContent;
public TextView tvState;
public TextView scheduleTitle;
public TextView scheduleBeginTime;
public TextView scheduleEndTime;
public TextView scheduleAddress;
public ImageView ivPicture;
public ImageView voiceAnim;
public TextView chatSec;
public RelativeLayout voiceContent;
public boolean isComing = true;
public RelativeLayout ll_progressBar;
public RelativeLayout rl_state;
public LinearLayout ll_beginTime;
public LinearLayout ll_endTime;
public LinearLayout ll_address;
public LinearLayout ll_schedule_content;
public LinearLayout ll_tv_content;
public LinearLayout ll_tv_show;
public ImageView photo;
public TextView tv_check;
public WebView web_info;
// public ListView pic_txt_list;
}
public String getNameFromDB(String dbId) {
dbOpenHelper = new DBOpenHelper(ctx);
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
String name = "";
Cursor cursor = db.rawQuery("select * from contactsTable where dbid=?",
new String[] { dbId });
if (cursor.moveToFirst()) {
name = cursor.getString(2);
}
dbOpenHelper.close();
cursor.close();
return name;
}
public String getHeadUrlFromDB(String dbId) {
if (dbId == null)
return "";
dbOpenHelper = new DBOpenHelper(ctx);
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
String name = "";
cursor = db.rawQuery("select * from contactsTable where dbid=?",
new String[] { dbId });
if (cursor.moveToFirst()) {
name = cursor.getString(8);
}
// Log.e("test", "headurl :: " + name);
dbOpenHelper.close();
cursor.close();
return name;
}
public String getSexFromDB(String dbId) {
if (dbId == null)
return "";
dbOpenHelper = new DBOpenHelper(ctx);
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
String name = "";
cursor = db.rawQuery("select * from contactsTable where dbid=?",
new String[] { dbId });
if (cursor.moveToFirst()) {
name = cursor.getString(13);
}
dbOpenHelper.close();
cursor.close();
return name;
}
private String getScheduleDate(String date) {
if (date == null)
return null;
String[] resultDate = date.split(" ");
String noon = "";
String[] time;
if (resultDate != null && resultDate.length > 1) {
time = resultDate[1].split(":");
if (time != null && time.length > 1) {
if (Integer.valueOf(time[0]) < 12) {
noon = "上午";
} else {
noon = "下午";
int tempHour = Integer.valueOf(time[0]) - 12;
if (tempHour < 10) {
time[0] = "0" + time[0];
}
}
}
return resultDate[0] + " " + noon + " " + time[0] + ":" + time[1];
}
return "";
}
public FriendEntity getPersonalProfile(String dbId) {
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
cursor = db.rawQuery("select * from contactsTable where dbid=?",
new String[] { dbId });
FriendEntity entity = null;
if (cursor.moveToFirst()) {
String id = cursor.getString(cursor.getColumnIndex("userid"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
String mobile = cursor.getString(cursor.getColumnIndex("mobile"));
String signature = cursor.getString(cursor
.getColumnIndex("signature"));
String email = cursor.getString(cursor.getColumnIndex("email"));
String duty = cursor.getString(cursor.getColumnIndex("duty"));
String department = cursor.getString(cursor
.getColumnIndex("department"));
String headUrl = cursor.getString(cursor.getColumnIndex("headURL"));
String companyId = cursor.getString(cursor
.getColumnIndex("companyid"));
String alpha = cursor.getString(cursor.getColumnIndex("alpha"));
String team = cursor.getString(cursor.getColumnIndex("team"));
String sex = cursor.getString(cursor.getColumnIndex("sex"));
String dbid = cursor.getString(cursor.getColumnIndex("dbid"));
String pinyin = cursor.getString(cursor.getColumnIndex("pinyin"));
String searchIndex = cursor.getString(cursor
.getColumnIndex("searchindex"));
entity = new FriendEntity(id, name, phone, mobile, email, duty,
department, headUrl, signature, companyId, alpha, team,
sex, dbid, pinyin, searchIndex);
}
cursor.close();
dbOpenHelper.close();
return entity;
}
private void sendMessageBroadcast(String msguuid) {
Intent intent = new Intent();
Bundle bundle = new Bundle();
ChatMsgEntity entity = new ChatMsgEntity();
entity.setStatus(MessageInfo.SCHEDULE_CHECK);
entity.setMsguuid(msguuid);
entity.setSenderId("");
entity.setReceiverId("");
bundle.putSerializable("message", entity);
intent.setAction(MessageInfo.MessageBroadCastName);
intent.putExtras(bundle);
Log.e("test", "conserver send messagebroadcast");
ctx.sendBroadcast(intent);
}
public static int computeSampleSize(BitmapFactory.Options options,
int minSideLength, int maxNumOfPixels) {
int initialSize = computeInitialSampleSize(options, minSideLength,
maxNumOfPixels);
int roundedSize;
if (initialSize <= 8) {
roundedSize = 1;
while (roundedSize < initialSize) {
roundedSize <<= 1;
}
} else {
roundedSize = (initialSize + 7) / 8 * 8;
}
return roundedSize;
}
private static int computeInitialSampleSize(BitmapFactory.Options options,
int minSideLength, int maxNumOfPixels) {
double w = options.outWidth;
double h = options.outHeight;
int lowerBound = (maxNumOfPixels == -1) ? 1 : (int) Math.ceil(Math
.sqrt(w * h / maxNumOfPixels));
int upperBound = (minSideLength == -1) ? 128 : (int) Math.min(
Math.floor(w / minSideLength), Math.floor(h / minSideLength));
if (upperBound < lowerBound) {
return lowerBound;
}
if ((maxNumOfPixels == -1) && (minSideLength == -1)) {
return 1;
} else if (minSideLength == -1) {
return lowerBound;
} else {
return upperBound;
}
}
private void getImage(View convertView, String imgUrl, int id) {
Log.i("test", "smallimg url :" + imgUrl);
imageLoader.loadImage(imgUrl, id, convertView);
}
private void getVoice(View convertView, String voiceUrl, int id, String sec) {
voiceLoader.loadVoice(voiceUrl, id, convertView, sec);
}
class ImageAsynTask extends AsyncTask<Void, Void, byte[]>
{
public String ImageName = "";
private ImageView view = null;
public ImageAsynTask(String name, ImageView view) {
this.ImageName = name;
this.view = view;
}
@Override
protected byte[] doInBackground(Void... params) {
return loadImages(this.ImageName);
}
protected void onPostExecute(byte[] result) {
super.onPostExecute(result);
if (result == null) {
return;
}
InputStream ins = new ByteArrayInputStream(result);
view.setImageBitmap(centerSquareScaleBitmap(BitmapFactory
.decodeStream(ins)));
result = null;
view = null;
System.gc();
try {
ins.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
public byte[] loadImages(String name) {
String url = name;
try {
URL ul = new URL(url);
if (ul != null) {
InputStream in = HttpUtils.getStreamFromURL(url);
if (in != null) {
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = in.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
byte[] in2b = swapStream.toByteArray();
in.close();
in = null;
buff = null;
swapStream.close();
swapStream = null;
System.gc();
return in2b;
} else {
return null;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public Bitmap centerSquareScaleBitmap(Bitmap bitmap) {
if (null == bitmap) {
return null;
}
Bitmap result = bitmap;
int widthOrg = bitmap.getWidth();
int heightOrg = bitmap.getHeight();
int edgeLength = widthOrg - 10;
if (widthOrg > edgeLength && heightOrg > edgeLength) {
int longerEdge = (int) (edgeLength
* Math.max(widthOrg, heightOrg) / Math.min(widthOrg,
heightOrg));
int scaledWidth = widthOrg > heightOrg ? longerEdge
: edgeLength;
int scaledHeight = widthOrg > heightOrg ? edgeLength
: longerEdge;
Bitmap scaledBitmap;
try {
scaledBitmap = Bitmap.createScaledBitmap(bitmap,
scaledWidth, scaledHeight, true);
} catch (Exception e) {
return null;
}
int xTopLeft = (scaledWidth - edgeLength) / 2;
int yTopLeft = (scaledHeight - edgeLength) / 2;
try {
result = Bitmap.createBitmap(scaledBitmap, xTopLeft,
yTopLeft, edgeLength, edgeLength);
scaledBitmap.recycle();
bitmap.recycle();
} catch (Exception e) {
return null;
}
}
return result;
}
}
}