/** * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.easemob.chatuidemo.adapter; 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.graphics.Bitmap.Config; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.android.volley.AuthFailureError; import com.android.volley.DefaultRetryPolicy; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.Response.ErrorListener; import com.android.volley.VolleyError; import com.android.volley.toolbox.ImageRequest; import com.android.volley.toolbox.StringRequest; import com.carson.constant.ConstantForSaveList; import com.easemob.chat.EMChatManager; import com.easemob.chat.EMGroupManager; import com.easemob.chatuidemo.db.InviteMessgeDao; import com.easemob.chatuidemo.domain.InviteMessage; import com.easemob.chatuidemo.domain.InviteMessage.InviteMesageStatus; import com.parttime.net.DefaultCallback; import com.parttime.net.HuanXinRequest; import com.qingmu.jianzhidaren.R; import com.quark.common.JsonUtil; import com.quark.common.Url; import com.quark.http.image.CircularImage; import com.quark.model.HuanxinUser; import com.quark.volley.VolleySington; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * * @ClassName: NewFriendsMsgAdapter * @Description: 申请与通知 * @author * @date 2015-2-10 下午6:38:48 * */ public class NewFriendsMsgAdapter extends ArrayAdapter<InviteMessage> { private Context context; private InviteMessgeDao messgeDao; RequestQueue queue = VolleySington.getInstance().getRequestQueue(); public NewFriendsMsgAdapter(Context context, int textViewResourceId, List<InviteMessage> objects) { super(context, textViewResourceId, objects); this.context = context; messgeDao = new InviteMessgeDao(context); } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = View.inflate(context, R.layout.row_invite_msg, null); holder.avator = (CircularImage) convertView .findViewById(R.id.avatar); holder.reason = (TextView) convertView.findViewById(R.id.message); holder.name = (TextView) convertView.findViewById(R.id.name); holder.status = (Button) convertView.findViewById(R.id.user_state); holder.refuse = (Button) convertView.findViewById(R.id.user_refuse); holder.groupContainer = (LinearLayout) convertView .findViewById(R.id.ll_group); holder.groupname = (TextView) convertView .findViewById(R.id.tv_groupName); // holder.time = (TextView) convertView.findViewById(R.id.time); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } final InviteMessage msg = getItem(position); if (msg != null) { if (msg.getGroupId() != null) { // 显示群聊提示 holder.groupContainer.setVisibility(View.VISIBLE); holder.groupname.setText(msg.getGroupName()); } else { holder.groupContainer.setVisibility(View.GONE); } holder.reason.setText(msg.getReason()); // holder.name.setText(msg.getFrom()); getNick(msg.getFrom(), holder.avator, holder.name); // holder.time.setText(DateUtils.getTimestampString(new // Date(msg.getTime()))); if (msg.getStatus() == InviteMesageStatus.BEAGREED) { holder.status.setVisibility(View.INVISIBLE); holder.reason.setText("已同意你的好友请求"); holder.refuse.setVisibility(View.GONE); } else if (msg.getStatus() == InviteMesageStatus.BEINVITEED || msg.getStatus() == InviteMesageStatus.BEAPPLYED) { holder.status.setVisibility(View.VISIBLE); holder.status.setEnabled(true); holder.status.setBackgroundResource(R.drawable.button_bg); holder.status.setText("同意"); // 群申请拒绝 holder.refuse.setVisibility(View.VISIBLE); holder.refuse.setBackgroundResource(R.drawable.button_bg); holder.refuse.setEnabled(true); holder.refuse.setText("拒绝"); if (msg.getStatus() == InviteMesageStatus.BEINVITEED) { if (msg.getReason() == null) { // 如果没写理由 holder.reason.setText("请求加你为好友"); } } else { // 入群申请 if (TextUtils.isEmpty(msg.getReason())) { holder.reason.setText("申请加入群:" + msg.getGroupName()); } } // 设置点击事件 同意 holder.status.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 同意别人发的好友请求 acceptInvitation(holder.status, msg); holder.status.setText("已同意"); holder.status.setBackgroundDrawable(null); holder.status.setVisibility(View.VISIBLE); holder.status.setEnabled(false); holder.refuse.setVisibility(View.GONE); } }); // 设置点击事件 拒绝 holder.refuse.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { refuseInvitation(holder.refuse, msg); holder.refuse.setText("已拒绝"); holder.refuse.setBackgroundDrawable(null); holder.refuse.setVisibility(View.VISIBLE); holder.refuse.setEnabled(false); holder.status.setVisibility(View.GONE); } }); } else if (msg.getStatus() == InviteMesageStatus.AGREED) { holder.status.setText("已同意"); holder.status.setBackgroundDrawable(null); holder.status.setEnabled(false); holder.status.setVisibility(View.VISIBLE); holder.refuse.setVisibility(View.GONE); } else if (msg.getStatus() == InviteMesageStatus.REFUSED) { holder.refuse.setText("已拒绝"); holder.refuse.setBackgroundDrawable(null); holder.refuse.setVisibility(View.VISIBLE); holder.refuse.setEnabled(false); holder.status.setVisibility(View.GONE); } // 设置用户头像 } return convertView; } /** * 同意好友请求或者群申请 * * @param button * @param username */ private void acceptInvitation(final Button button, final InviteMessage msg) { final ProgressDialog pd = new ProgressDialog(context); pd.setMessage("正在同意..."); pd.setCanceledOnTouchOutside(false); pd.show(); 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(); button.setText("已同意"); msg.setStatus(InviteMesageStatus.AGREED); // 更新db ContentValues values = new ContentValues(); values.put(InviteMessgeDao.COLUMN_NAME_STATUS, msg .getStatus().ordinal()); messgeDao.updateMessage(msg.getId(), values); button.setBackgroundDrawable(null); button.setEnabled(false); } }); } catch (final Exception e) { ((Activity) context).runOnUiThread(new Runnable() { @Override public void run() { pd.dismiss(); Toast.makeText(context, "同意失败: " + e.getMessage(), 1).show(); } }); } } }).start(); } /** * 拒绝好友请求或者群申请 * * @param button * @param username */ private void refuseInvitation(final Button button, final InviteMessage msg) { final ProgressDialog pd = new ProgressDialog(context); pd.setMessage("正在拒绝..."); pd.setCanceledOnTouchOutside(false); pd.show(); new Thread(new Runnable() { public void run() { // 调用sdk的同意方法 try { if (msg.getGroupId() == null) {// 拒绝好友请求 EMChatManager.getInstance().refuseInvitation( msg.getFrom()); } else { // 拒绝加群申请 EMGroupManager.getInstance().declineApplication( msg.getFrom(), msg.getGroupId(), "已拒绝"); } ((Activity) context).runOnUiThread(new Runnable() { @Override public void run() { pd.dismiss(); button.setText("已拒绝"); msg.setStatus(InviteMesageStatus.REFUSED); // 更新db ContentValues values = new ContentValues(); values.put(InviteMessgeDao.COLUMN_NAME_STATUS, msg .getStatus().ordinal()); messgeDao.updateMessage(msg.getId(), values); button.setBackgroundDrawable(null); button.setEnabled(false); } }); } catch (final Exception e) { ((Activity) context).runOnUiThread(new Runnable() { @Override public void run() { pd.dismiss(); Toast.makeText(context, "拒绝失败: " + e.getMessage(), 1).show(); } }); } } }).start(); } private static class ViewHolder { CircularImage avator; TextView name; TextView reason; Button status;// 同意 Button refuse;// 拒绝 LinearLayout groupContainer; TextView groupname; // TextView time; } // ====================================howe========================= public void getNick(final String id, final CircularImage avatar, final TextView name) { new HuanXinRequest().getHuanxinUserList(String.valueOf(id), queue, new DefaultCallback(){ @Override public void success(Object obj) { super.success(obj); if(obj instanceof ArrayList){ @SuppressLint("Unchecked") ArrayList<HuanxinUser> list = (ArrayList<HuanxinUser>)obj; if(list.size() == 1) { HuanxinUser us = list.get(0); name.setText(us.getName()); Log.e("erros", "返bean=" + us.toString()); if ((us.getAvatar() != null) && (!us.getAvatar().equals(""))) { loadpersonPic(Url.GETPIC + us.getAvatar(), avatar, 1); } else { avatar.setImageResource(R.drawable.default_avatar); } } } } }); } /** * @Description: 加载图片 * @author howe * @date 2014-7-30 下午5:57:52 * */ public void loadpersonPic(String url, final ImageView imageView, final int isRound) { ImageRequest imgRequest = new ImageRequest(url, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap arg0) { if (isRound == 1) { // Bitmap bit = UploadImg.toRoundCorner(arg0, 2); imageView.setImageBitmap(arg0); } else { } } }, 300, 200, Config.ARGB_8888, new ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { } }); queue.add(imgRequest); imgRequest.setRetryPolicy(new DefaultRetryPolicy(ConstantForSaveList.DEFAULTRETRYTIME*1000, 1, 1.0f)); } // ================howe end================== }