/** * 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.hx.hxchat.adapter; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.concurrent.ExecutionException; import org.json.JSONException; import android.content.Context; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Handler; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import cn.sharesdk.framework.authorize.a; import com.alibaba.fastjson.JSONObject; import com.easemob.chat.EMGroup; import com.easemob.chat.EMGroupManager; import com.easemob.exceptions.EaseMobException; import com.hx.hxchat.domain.User; import com.hx.hxchat.utils.LoadUserAvatar; import com.hx.hxchat.utils.LoadUserAvatar.ImageDownloadedCallBack; import com.hx.hxchat.utils.UserUtils; import com.mgw.member.R; import com.mgw.member.uitls.FileUtils; import com.mgw.member.uitls.LogUtils; public class GroupAdapter extends ArrayAdapter<EMGroup> { String TAG = GroupAdapter.class.getSimpleName(); private LayoutInflater inflater; private String str; // start List<EMGroup> grouplist; private LoadUserAvatar avatarLoader; // end public GroupAdapter(Context context, int res, List<EMGroup> groups) { super(context, res, groups); this.inflater = LayoutInflater.from(context); str = context.getResources().getString(R.string.The_new_group_chat); avatarLoader = new LoadUserAvatar(context, FileUtils.getCacheDir()); this.grouplist = groups; } @Override public int getViewTypeCount() { return 3; } @Override public int getItemViewType(int position) { if (position == 0) { return 0; } else if (position == getCount() - 1) { return 1; } else { return 2; } } @Override public View getView(int position, View convertView, ViewGroup parent) { LogUtils.i(TAG, "getView"); if (getItemViewType(position) == 0) { if (convertView == null) { convertView = inflater.inflate(R.layout.search_bar_with_padding, null); } final EditText query = (EditText) convertView.findViewById(R.id.query); final ImageButton clearSearch = (ImageButton) convertView.findViewById(R.id.search_clear); query.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { getFilter().filter(s); if (s.length() > 0) { clearSearch.setVisibility(View.VISIBLE); } else { clearSearch.setVisibility(View.INVISIBLE); } LogUtils.i(TAG, "onTextChanged,CharSequence" + s); } public void beforeTextChanged(CharSequence s, int start, int count, int after) { LogUtils.i(TAG, "beforeTextChanged,CharSequence" + s); } public void afterTextChanged(Editable s) { LogUtils.i(TAG, "afterTextChanged,Editable" + s); } }); clearSearch.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { query.getText().clear(); } }); } else if (getItemViewType(position) == 1) { if (convertView == null) { convertView = inflater.inflate(R.layout.row_add_group, null); } ((ImageView) convertView.findViewById(R.id.avatar)).setImageResource(R.drawable.roominfo_add_btn); ((TextView) convertView.findViewById(R.id.name)).setText(str); } else { ViewHolder holder = new ViewHolder(); EMGroup group = grouplist.get(position - 1); String groupId = group.getGroupId(); int membersNum = 1; List<String> members = group.getMembers(); LogUtils.i(TAG, "members:" + members.toString()); String[] avatars = new String[members.size()]; avatars = getGroupAvs(members, avatars); if (avatars == null) { return convertView = creatConvertView(membersNum); } membersNum = avatars.length; // if (convertView == null) { convertView = creatConvertView(membersNum); LogUtils.i(TAG, "convertView" + membersNum); // } // ((TextView)convertView.findViewById(R.id.name)).setText(getItem(position-1).getGroupName()); String groupName = getItem(position - 1).getGroupName(); // LogUtils.i(TAG, "groupName="+groupName); if (membersNum == 1) { holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name); holder.tv_name.setText(groupName); holder.iv_avatar1 = (ImageView) convertView.findViewById(R.id.iv_avatar1); showUserAvatar(holder.iv_avatar1, avatars[0]); } else if (membersNum == 2) { holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name); holder.tv_name.setText(groupName); holder.iv_avatar1 = (ImageView) convertView.findViewById(R.id.iv_avatar1); holder.iv_avatar2 = (ImageView) convertView.findViewById(R.id.iv_avatar2); showUserAvatar(holder.iv_avatar1, avatars[0]); showUserAvatar(holder.iv_avatar2, avatars[1]); } else if (membersNum == 3) { holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name); holder.tv_name.setText(groupName); holder.iv_avatar1 = (ImageView) convertView.findViewById(R.id.iv_avatar1); holder.iv_avatar2 = (ImageView) convertView.findViewById(R.id.iv_avatar2); holder.iv_avatar3 = (ImageView) convertView.findViewById(R.id.iv_avatar3); showUserAvatar(holder.iv_avatar3, avatars[2]); showUserAvatar(holder.iv_avatar1, avatars[0]); showUserAvatar(holder.iv_avatar2, avatars[1]); } else if (membersNum == 4) { holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name); holder.tv_name.setText(groupName); holder.iv_avatar1 = (ImageView) convertView.findViewById(R.id.iv_avatar1); holder.iv_avatar2 = (ImageView) convertView.findViewById(R.id.iv_avatar2); holder.iv_avatar3 = (ImageView) convertView.findViewById(R.id.iv_avatar3); holder.iv_avatar4 = (ImageView) convertView.findViewById(R.id.iv_avatar4); showUserAvatar(holder.iv_avatar4, avatars[3]); showUserAvatar(holder.iv_avatar3, avatars[2]); showUserAvatar(holder.iv_avatar1, avatars[0]); showUserAvatar(holder.iv_avatar2, avatars[1]); } else if (membersNum > 4) { holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name); holder.tv_name.setText(groupName); holder.iv_avatar1 = (ImageView) convertView.findViewById(R.id.iv_avatar1); holder.iv_avatar2 = (ImageView) convertView.findViewById(R.id.iv_avatar2); holder.iv_avatar3 = (ImageView) convertView.findViewById(R.id.iv_avatar3); holder.iv_avatar4 = (ImageView) convertView.findViewById(R.id.iv_avatar4); holder.iv_avatar5 = (ImageView) convertView.findViewById(R.id.iv_avatar5); // showUserAvatar(holder.iv_avatar5, avatars[4]); showUserAvatar(holder.iv_avatar4, avatars[3]); showUserAvatar(holder.iv_avatar3, avatars[2]); showUserAvatar(holder.iv_avatar1, avatars[0]); showUserAvatar(holder.iv_avatar2, avatars[1]); } // } return convertView; } private String[] getGroupAvs(final List<String> members, String[] avatars) { LogUtils.i(TAG, "members" + members.toString() + ",groupName_temp="); // for (int i = 0; i < members.size(); i++) { String uid = members.get(i); if (i < 5) { User useFromNetAsync = UserUtils.getUserInfo(uid); // User useFromNetAsync=null; if (useFromNetAsync != null) { avatars[i] = useFromNetAsync.getAvatar() != null ? useFromNetAsync.getAvatar() : ""; } LogUtils.i(TAG, "avatars=" + avatars[i] + ",uid=" + uid); } } return avatars; } private EMGroup getEMGroupAsync(final String groupId) { final EMGroup roup1 = null; AsyncTask<Void, Void, EMGroup> asy = new AsyncTask<Void, Void, EMGroup>() { @Override protected EMGroup doInBackground(Void... params) { try { EMGroup roup11 = EMGroupManager.getInstance().getGroupFromServer(groupId); return roup11; } catch (EaseMobException e) { // TODO Auto-generated catch block e.printStackTrace(); } return roup1; } }; try { EMGroup emGroup = asy.execute().get(); return emGroup; } catch (InterruptedException | ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; // TODO Auto-generated method stub } @Override public int getCount() { return super.getCount() + 2; } private static class ViewHolder { TextView tv_name; ImageView iv_avatar1; ImageView iv_avatar2; ImageView iv_avatar3; ImageView iv_avatar4; ImageView iv_avatar5; } private void showUserAvatar(ImageView iamgeView, String avatar) { final String url_avatar = avatar; iamgeView.setTag(url_avatar); if (url_avatar != null && !url_avatar.equals("")) { Bitmap bitmap = avatarLoader.loadImage(iamgeView, url_avatar, new ImageDownloadedCallBack() { public void onImageDownloaded(ImageView imageView, Bitmap bitmap) { if (imageView.getTag() == url_avatar) { imageView.setImageBitmap(bitmap); } } }); if (bitmap != null) iamgeView.setImageBitmap(bitmap); } } private View creatConvertView(int size) { View convertView; if (size > 4) { size = 4; } switch (size) { case 1: convertView = inflater.inflate(R.layout.item_chatroom_1, null); break; case 2: convertView = inflater.inflate(R.layout.item_chatroom_2, null, false); break; case 3: convertView = inflater.inflate(R.layout.item_chatroom_3, null, false); break; case 4: convertView = inflater.inflate(R.layout.item_chatroom_4, null, false); break; case 5: convertView = inflater.inflate(R.layout.item_chatroom_5, null, false); default: convertView = inflater.inflate(R.layout.item_chatroom_5, null, false); break; } return convertView; } }