/** * 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.parttime.addresslist; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.os.Environment; import android.util.Log; import android.util.SparseIntArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.SectionIndexer; import android.widget.TextView; import com.android.volley.DefaultRetryPolicy; 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.carson.constant.ConstantForSaveList; import com.easemob.chatuidemo.Constant; import com.easemob.chatuidemo.domain.User; import com.easemob.chatuidemo.widget.Sidebar; import com.qingmu.jianzhidaren.R; import com.quark.common.Url; import com.quark.http.image.CircularImage; import com.quark.http.image.LoadImage; import com.quark.model.HuanxinUser; import com.quark.volley.VolleySington; /** * 简单的好友Adapter实现 * */ /** * * @ClassName: ContactAdapter * @Description: 显示头像和昵称 * @author howe * @date 2015-2-5 下午8:17:49 * */ public class ContactAdapter extends ArrayAdapter<User> implements SectionIndexer { private LayoutInflater layoutInflater; private EditText query; private ImageButton clearSearch; private SparseIntArray positionOfSection; private SparseIntArray sectionOfPosition; private Sidebar sidebar; private int res; ArrayList<HuanxinUser> usersNick; RequestQueue queue = VolleySington.getInstance().getRequestQueue(); List<User> temp; private SharedPreferences sp; public ContactAdapter(Context context, int resource, List<User> objects, Sidebar sidebar, ArrayList<HuanxinUser> usersNick) { super(context, resource, objects); this.res = resource; this.sidebar = sidebar; temp = objects; this.usersNick = (ArrayList<HuanxinUser>) usersNick.clone(); layoutInflater = LayoutInflater.from(context); sp = context.getSharedPreferences("jrdr.setting", Context.MODE_PRIVATE); } @Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { return position == 0 ? 0 : 1; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = layoutInflater.inflate(res, null); } CircularImage avatar = (CircularImage) convertView .findViewById(R.id.avatar); TextView unreadMsgView = (TextView) convertView .findViewById(R.id.unread_msg_number); TextView nameTextview = (TextView) convertView.findViewById(R.id.name); TextView tvHeader = (TextView) convertView.findViewById(R.id.header); User user = getItem(position); if (user == null) { Log.d("ContactAdapter", position + ""); } else { // 设置nick,demo里不涉及到完整user,用username代替nick显示 String username = user.getUsername(); String header = user.getHeader(); if (position == 0 || header != null && !header.equals(getItem(position - 1).getHeader())) { if ("".equals(header)) { tvHeader.setVisibility(View.GONE); } else { tvHeader.setVisibility(View.VISIBLE); tvHeader.setText(header); } } else { tvHeader.setVisibility(View.GONE); } // 显示申请与通知item if (username.equals(Constant.NEW_FRIENDS_USERNAME)) { tvHeader.setVisibility(View.GONE); nameTextview.setText(user.getNick()); avatar.setImageResource(R.drawable.new_friends_icon); if (user.getUnreadMsgCount() > 0) { unreadMsgView.setVisibility(View.VISIBLE); unreadMsgView.setText(user.getUnreadMsgCount() + ""); } else { unreadMsgView.setVisibility(View.INVISIBLE); } } else if (username.equals(Constant.PUBLIC_COUNT)) { // 官方账号 nameTextview.setText(user.getNick()); avatar.setImageResource(R.drawable.icon_officail); tvHeader.setVisibility(View.GONE); } else if (username.equals(Constant.GROUP_USERNAME)) { // 群聊item nameTextview.setText(user.getNick()); avatar.setImageResource(R.drawable.peoplephoto); tvHeader.setVisibility(View.GONE); } else { // 设置昵称 头像 头两条是群和通知 所以从联系人进来的 usersNick真实数据应该从第四条开始(开始三条为空) // 2.从群设置进来 无通知和群聊,真实数据从第二个开始(第一个未空值) if (usersNick.size() > position) { nameTextview.setText(usersNick.get(position).getName()); if ((usersNick.get(position).getAvatar() != null) && (!usersNick.get(position).getAvatar().equals(""))) { // 默认加载本地图片 loadNativePhoto(usersNick.get(position).getUid(), usersNick.get(position).getAvatar(), avatar, nameTextview); Editor edt = sp.edit(); edt.putString(usersNick.get(position).getUid() + "realname", usersNick.get(position).getName()); edt.commit(); } else { avatar.setImageResource(R.drawable.default_avatar); } } if (unreadMsgView != null) unreadMsgView.setVisibility(View.INVISIBLE); } // } } return convertView; } @Override public User getItem(int position) { User user = new User(); user.setHeader(getContext().getString(R.string.search_header)); // return position == 0 ? user : super.getItem(position - 1); return super.getItem(position); } public HuanxinUser getItemNick(int position) { HuanxinUser hxus = new HuanxinUser(); hxus = usersNick.get(position); return hxus; } @Override public int getCount() { // 有搜索框,count+1 // return super.getCount() + 1; return super.getCount(); } public int getPositionForSection(int section) { return positionOfSection.get(section); } public int getSectionForPosition(int position) { return sectionOfPosition.get(position); } @Override public Object[] getSections() { positionOfSection = new SparseIntArray(); sectionOfPosition = new SparseIntArray(); int count = getCount(); List<String> list = new ArrayList<String>(); list.add(getContext().getString(R.string.search_header)); positionOfSection.put(0, 0); sectionOfPosition.put(0, 0); for (int i = 1; i < count; i++) { String letter = getItem(i).getHeader(); System.err.println("contactadapter getsection getHeader:" + letter + " name:" + getItem(i).getUsername()); int section = list.size() - 1; if (list.get(section) != null && !list.get(section).equals(letter)) { list.add(letter); section++; positionOfSection.put(section, i); } sectionOfPosition.put(i, section); } return list.toArray(new String[list.size()]); } // /*************************carson add on // 4-9-19:47**************************************** /** * 加载本地头像和名字 */ private void loadNativePhoto(final String id, final String avatarUrl, final ImageView avatar, final TextView name) { // 先获取本地名字和头像 String nativeName = sp.getString(id + "realname", ""); if (name == null) { } else { if (!"".equals(nativeName)) { name.setText(nativeName); } } File mePhotoFold = new File(Environment.getExternalStorageDirectory() + "/" + "jzdr/" + "image"); if (!mePhotoFold.exists()) { mePhotoFold.mkdirs(); } File picture_1 = new File(Environment.getExternalStorageDirectory() + "/" + "jzdr/" + "image/" + sp.getString(id + "_photo", "c")); if (picture_1.exists()) { // 加载本地图片 // Bitmap bb_bmp = MyResumeActivity.zoomImg(picture_1, 300, 300); Bitmap bb_bmp = BitmapFactory.decodeFile(Environment .getExternalStorageDirectory() + "/" + "jzdr/" + "image/" + sp.getString(id + "_photo", "c")); if (bb_bmp != null) { avatar.setImageBitmap(LoadImage.toRoundBitmap(bb_bmp)); } else { avatar.setImageResource(R.drawable.default_avatar); loadpersonPic(id, avatarUrl, avatar, 1); } } else { avatar.setImageResource(R.drawable.default_avatar); loadpersonPic(id, avatarUrl, avatar, 1); } } /** * @Description: 加载图片 * @author howe * @date 2014-7-30 下午5:57:52 * */ private void loadpersonPic(final String id, final String url, final ImageView imageView, final int isRound) { ImageRequest imgRequest = new ImageRequest(Url.GETPIC + url, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap arg0) { String picName = url; imageView.setImageBitmap(LoadImage.toRoundBitmap(arg0)); OutputStream output = null; try { File mePhotoFold = new File(Environment .getExternalStorageDirectory() + "/" + "jzdr/" + "image"); if (!mePhotoFold.exists()) { mePhotoFold.mkdirs(); } output = new FileOutputStream(Environment .getExternalStorageDirectory() + "/" + "jzdr/" + "image/" + picName); arg0.compress(Bitmap.CompressFormat.JPEG, 100, output); output.flush(); output.close(); Editor edt = sp.edit(); edt.putString(id + "_photo", url); edt.commit(); } catch (Exception e) { e.printStackTrace(); } } }, 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)); } }