package com.fanxin.app.fx.others;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.easemob.EMCallBack;
import com.easemob.chat.CmdMessageBody;
import com.easemob.chat.EMChatManager;
import com.easemob.chat.EMGroupManager;
import com.easemob.chat.EMMessage;
import com.fanxin.app.Constant;
import com.fanxin.app.MYApplication;
import com.fanxin.app.R;
import com.fanxin.app.db.InviteMessgeDao;
import com.fanxin.app.db.UserDao;
import com.fanxin.app.domain.InviteMessage;
import com.fanxin.app.domain.User;
import com.fanxin.app.domain.InviteMessage.InviteMesageStatus;
import com.fanxin.app.fx.AddFriendsFinalActivity;
import com.fanxin.app.fx.others.LoadDataFromServer.DataCallBack;
import com.fanxin.app.fx.others.LoadUserAvatar.ImageDownloadedCallBack;
import com.easemob.util.HanziToPinyin;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.Context;
import android.graphics.Bitmap;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
@SuppressLint("ViewHolder")
public class NewFriendsAdapter extends BaseAdapter {
Context context;
List<InviteMessage> msgs;
private InviteMessgeDao messgeDao;
int total = 0;
private LoadUserAvatar avatarLoader;
@SuppressLint("SdCardPath")
public NewFriendsAdapter(Context context, List<InviteMessage> msgs) {
this.context = context;
this.msgs = msgs;
messgeDao = new InviteMessgeDao(context);
avatarLoader = new LoadUserAvatar(context, "/sdcard/fanxin/");
total = msgs.size();
}
@Override
public int getCount() {
return msgs.size();
}
@Override
public InviteMessage getItem(int position) {
// TODO Auto-generated method stub
return msgs.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
holder = new ViewHolder();
final InviteMessage msg = getItem(total - 1 - position);
// int msg_id = msg.getId();
// String userUid = msg.getFrom();
String reason_total = msg.getReason();
String[] sourceStrArray = reason_total.split("66split88");
// 先附初值
String name = msg.getFrom();
String avatar = msg.getFrom();
String reason = "请求加好友";
if (sourceStrArray.length == 4) {
name = sourceStrArray[0];
avatar = sourceStrArray[1];
reason = sourceStrArray[3];
}
convertView = View.inflate(context, R.layout.item_newfriendsmsag, null);
holder.iv_avatar = (ImageView) convertView.findViewById(R.id.iv_avatar);
holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);
holder.tv_reason = (TextView) convertView.findViewById(R.id.tv_reason);
holder.tv_added = (TextView) convertView.findViewById(R.id.tv_added);
holder.btn_add = (Button) convertView.findViewById(R.id.btn_add);
holder.tv_name.setText(name);
holder.tv_reason.setText(reason);
if (msg.getStatus() == InviteMesageStatus.AGREED
|| msg.getStatus() == InviteMesageStatus.BEAGREED) {
holder.tv_added.setVisibility(View.VISIBLE);
holder.btn_add.setVisibility(View.GONE);
} else {
holder.tv_added.setVisibility(View.GONE);
holder.btn_add.setVisibility(View.VISIBLE);
holder.btn_add.setTag(msg);
holder.btn_add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
acceptInvitation(holder.btn_add, msg, holder.tv_added);
}
});
}
showUserAvatar(holder.iv_avatar, avatar);
return convertView;
}
private static class ViewHolder {
ImageView iv_avatar;
TextView tv_name;
TextView tv_reason;
TextView tv_added;
Button btn_add;
}
private void showUserAvatar(ImageView iamgeView, String avatar) {
if (avatar == null || avatar.equals("")) {
return;
}
final String url_avatar = Constant.URL_Avatar + avatar;
iamgeView.setTag(url_avatar);
if (url_avatar != null && !url_avatar.equals("")) {
Bitmap bitmap = avatarLoader.loadImage(iamgeView, url_avatar,
new ImageDownloadedCallBack() {
@Override
public void onImageDownloaded(ImageView imageView,
Bitmap bitmap) {
if (imageView.getTag() == url_avatar) {
imageView.setImageBitmap(bitmap);
}
}
});
if (bitmap != null)
iamgeView.setImageBitmap(bitmap);
}
}
/**
* 同意好友请求或者群申请
*
* @param button
* @param username
*/
private void acceptInvitation(final Button button, final InviteMessage msg,
final TextView textview) {
final ProgressDialog pd = new ProgressDialog(context);
pd.setMessage("正在同意...");
pd.setCanceledOnTouchOutside(false);
pd.show();
// Map<String, String> map_uf = new HashMap<String, String>();
// map_uf.put("user", MYApplication.getInstance().getUserName());
// map_uf.put("friend", msg.getFrom());
// LoadDataFromServer task = new LoadDataFromServer(context,
// Constant.URL_ADD_FRIEND, map_uf);
//
// task.getData(new DataCallBack() {
//
// @Override
// public void onDataCallBack(JSONObject data) {
// if (data == null) {
// pd.dismiss();
// return;
// }
//
// try {
// int code = data.getInteger("code");
// if (code == 1000) {
// // 支持单聊和群聊,默认单聊,如果是群聊添加下面这行
// // cmdMsg.setChatType(ChatType.GroupChat);
// EMMessage cmdMsg = EMMessage
// .createSendMessage(EMMessage.Type.CMD);
// String action = Constant.CMD_AGREE_FRIEND;// action可以自定义,在广播接收时可以收到
// CmdMessageBody cmdBody = new CmdMessageBody(action);
//
// cmdMsg.setReceipt(msg.getFrom());
//
// cmdMsg.addBody(cmdBody);
// EMChatManager.getInstance().sendMessage(cmdMsg,
// new EMCallBack() {
//
// @Override
// public void onError(int arg0,
// final String arg1) {
// ((Activity) context)
// .runOnUiThread(new Runnable() {
// public void run() {
// pd.dismiss();
//
// Toast.makeText(
// context,
// "同意失败" + arg1,
// Toast.LENGTH_SHORT)
// .show();
// }
// });
// }
//
// @Override
// public void onProgress(int arg0, String arg1) {
//
// }
//
// @Override
// public void onSuccess() {
// ((Activity) context)
// .runOnUiThread(new Runnable() {
// public void run() {
// pd.dismiss();
// textview.setVisibility(View.VISIBLE);
// button.setEnabled(false);
// button.setVisibility(View.GONE);
// msg.setStatus(InviteMesageStatus.AGREED);
// // 更新db
// ContentValues values = new ContentValues();
// values.put(
// InviteMessgeDao.COLUMN_NAME_STATUS,
// msg.getStatus()
// .ordinal());
// messgeDao.updateMessage(
// msg.getId(),
// values);
// // 巩固程序,即时将该好友存入好友列表
// addFriendToList(msg
// .getFrom());
//
// }
// });
// }
//
// });
//
// } else {
// pd.dismiss();
// showError("服务器端数据访问错误");
//
// }
// } catch (JSONException e) {
// showError("服务器端数据解析错误");
// pd.dismiss();
// e.printStackTrace();
// }
//
// }
//
// });
new Thread(new Runnable() {
public void run() {
// 调用sdk的同意方法
try {
if (msg.getGroupId() == null) // 同意好友请求
EMChatManager.getInstance().acceptInvitation(
msg.getFrom());
else
// 同意加群申请
EMGroupManager.getInstance().acceptApplication(
msg.getFrom(), msg.getGroupId());
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
pd.dismiss();
textview.setVisibility(View.VISIBLE);
button.setEnabled(false);
button.setVisibility(View.GONE);
msg.setStatus(InviteMesageStatus.AGREED);
// 更新db
ContentValues values = new ContentValues();
values.put(InviteMessgeDao.COLUMN_NAME_STATUS, msg
.getStatus().ordinal());
messgeDao.updateMessage(msg.getId(), values);
// 巩固程序,即时将该好友存入好友列表
addFriendToList(msg.getFrom());
}
});
} catch (final Exception e) {
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
pd.dismiss();
Toast.makeText(context, "同意失败: " + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
});
}
}
}).start();
}
private void showError(String strE) {
Toast.makeText(context, strE, Toast.LENGTH_SHORT).show();
}
private void addFriendToList(final String hxid) {
Map<String, String> map_uf = new HashMap<String, String>();
map_uf.put("user", MYApplication.getInstance().getUserName());
map_uf.put("friend", hxid);
LoadDataFromServer task = new LoadDataFromServer(null,
Constant.URL_ADD_FRIEND, map_uf);
task.getData(new DataCallBack() {
public void onDataCallBack(JSONObject data) {
try {
int code = data.getInteger("code");
if (code == 1000) {
JSONObject json = data.getJSONObject("user");
if (json != null && json.size() != 0) {
}
String nick = json.getString("nick");
String avatar = json.getString("avatar");
String hxid = json.getString("hxid");
String fxid = json.getString("fxid");
String region = json.getString("region");
String sex = json.getString("sex");
String sign = json.getString("sign");
String tel = json.getString("tel");
User user = new User();
user.setUsername(hxid);
user.setNick(nick);
user.setAvatar(avatar);
user.setFxid(fxid);
user.setRegion(region);
user.setSex(sex);
user.setSign(sign);
user.setTel(tel);
setUserHearder(hxid, user);
Map<String, User> userlist = MYApplication
.getInstance().getContactList();
Map<String, User> map_temp = new HashMap<String, User>();
map_temp.put(hxid, user);
userlist.putAll(map_temp);
// 存入内存
MYApplication.getInstance().setContactList(userlist);
// 存入db
UserDao dao = new UserDao(context);
dao.saveContact(user);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
/**
* 设置hearder属性,方便通讯中对联系人按header分类显示,以及通过右侧ABCD...字母栏快速定位联系人
*
* @param username
* @param user
*/
@SuppressLint("DefaultLocale")
protected void setUserHearder(String username, User user) {
String headerName = null;
if (!TextUtils.isEmpty(user.getNick())) {
headerName = user.getNick();
} else {
headerName = user.getUsername();
}
headerName = headerName.trim();
if (username.equals(Constant.NEW_FRIENDS_USERNAME)) {
user.setHeader("");
} else if (Character.isDigit(headerName.charAt(0))) {
user.setHeader("#");
} else {
user.setHeader(HanziToPinyin.getInstance()
.get(headerName.substring(0, 1)).get(0).target.substring(0,
1).toUpperCase());
char header = user.getHeader().toLowerCase().charAt(0);
if (header < 'a' || header > 'z') {
user.setHeader("#");
}
}
}
}