/* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2014年 mob.com. All rights reserved. */ package cn.smssdk.gui; import static com.mob.tools.utils.R.getStringRes; import java.util.ArrayList; import java.util.HashMap; import android.text.TextUtils; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.TextView; import cn.smssdk.gui.ContactsListView.GroupAdapter; import cn.smssdk.gui.layout.SizeHelper; /** * 联系人列表adapter */ public class ContactsAdapter extends GroupAdapter { private ArrayList<String> titles; private ArrayList<ArrayList<HashMap<String, Object>>> contacts; private ArrayList<HashMap<String, Object>> friendsInApp = new ArrayList<HashMap<String, Object>>(); private ArrayList<HashMap<String, Object>> contactsOutApp = new ArrayList<HashMap<String, Object>>(); private ContactItemMaker itemMaker; private SearchEngine sEngine; public ContactsAdapter(ContactsListView view, ArrayList<HashMap<String, Object>> friendsInApp, ArrayList<HashMap<String, Object>> contactsOutApp) { super(view); this.friendsInApp = friendsInApp; this.contactsOutApp = contactsOutApp; initSearchEngine(); search(null); } private void initSearchEngine() { sEngine = new SearchEngine(); ArrayList<String> data = new ArrayList<String>(); for (HashMap<String, Object> contact : friendsInApp) { String name = ""; if (contact.containsKey("displayname")) { name = String.valueOf(contact.get("displayname")); } if (TextUtils.isEmpty(name)) { continue; } data.add(name); } for (HashMap<String, Object> contact : contactsOutApp) { String name = ""; if (contact.containsKey("displayname")) { name = String.valueOf(contact.get("displayname")); } if (TextUtils.isEmpty(name)) { continue; } data.add(name); } sEngine.setIndex(data); } /** * 搜索 * @param token 搜索的关键字 */ public void search(String token) { ArrayList<String> res = sEngine.match(token); boolean isEmptyToken = false; if (res == null || res.size() <= 0) { res = new ArrayList<String>(); isEmptyToken = true; } HashMap<String, String> resMap = new HashMap<String, String>(); for (String r : res) { resMap.put(r, r); } titles = new ArrayList<String>(); contacts = new ArrayList<ArrayList<HashMap<String, Object>>>(); if (friendsInApp.size() > 0) { reSortFia(resMap, isEmptyToken, friendsInApp); } if (contactsOutApp.size() > 0) { reSortFoa(resMap, isEmptyToken, contactsOutApp); } } /** 数据处理 ,对应用内好友列表的数据进行排列*/ private void reSortFia(HashMap<String, String> resMap, boolean isEmptyToken, ArrayList<HashMap<String, Object>> data) { ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); for (HashMap<String, Object> contact : data) { String name = ""; if (contact.containsKey("displayname")) { name = String.valueOf(contact.get("displayname")); } if (TextUtils.isEmpty(name)) { continue; } if (isEmptyToken || resMap.containsKey(name)) { list.add(contact); } } if (list.size() > 0) { int resId = getStringRes(view.getContext(), "smssdk_contacts_in_app"); if (resId > 0) { titles.add(view.getContext().getResources().getString(resId)); } contacts.add(list); } } /** 数据处理 ,对不是应用内好友列表的数据进行排列 */ private void reSortFoa(HashMap<String, String> resMap, boolean isEmptyToken, ArrayList<HashMap<String, Object>> data) { ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); for (HashMap<String, Object> contact : data) { String name = ""; if (contact.containsKey("displayname")) { name = String.valueOf(contact.get("displayname")); } if (TextUtils.isEmpty(name)) { continue; } if (isEmptyToken || resMap.containsKey(name)) { list.add(contact); } } if (list.size() > 0) { int resId = getStringRes(view.getContext(), "smssdk_contacts_out_app"); if (resId > 0) { titles.add(view.getContext().getResources().getString(resId)); } contacts.add(list); } } public void setContactItemMaker(ContactItemMaker itemMaker) { this.itemMaker = itemMaker; } // /** 数据处理 */ // private void reSortFia(String token, ArrayList<HashMap<String, Object>> data) { // boolean isEmptyToken = TextUtils.isEmpty(token); // ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); // for (HashMap<String, Object> contact : data) { // String name = ""; // if (contact.containsKey("nickname")) { // name = String.valueOf(contact.get("nickname")); // } else if (contact.containsKey("displayname")) { // name = String.valueOf(contact.get("displayname")); // } else if (contact.containsKey("phone")) { // name = String.valueOf(contact.get("phone")); // } // if (TextUtils.isEmpty(name)) { // continue; // } // if (isEmptyToken || (!TextUtils.isEmpty(name) && name.contains(token))) { // list.add(contact); // } // } // // if (list.size() > 0) { // int resId = getStringRes(view.getContext(), "smssdk_contacts_in_app"); // if (resId > 0) { // titles.add(view.getContext().getResources().getString(resId)); // } // contacts.add(list); // } // } // // /** 数据处理 */ // private void reSortFoa(String token, ArrayList<HashMap<String, Object>> data) { // boolean isEmptyToken = TextUtils.isEmpty(token); // ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); // for (HashMap<String, Object> contact : data) { // String name = ""; // if (contact.containsKey("displayname")) { // name = String.valueOf(contact.get("displayname")); // } else if (contact.containsKey("phones")) { // @SuppressWarnings("unchecked") // ArrayList<HashMap<String, Object>> phones // = (ArrayList<HashMap<String, Object>>) contact.get("phones"); // if (phones != null && phones.size() > 0) { // name = (String) phones.get(0).get("phone"); // } // } // if (TextUtils.isEmpty(name)) { // continue; // } // if (isEmptyToken || (!TextUtils.isEmpty(name) && name.contains(token))) { // list.add(contact); // } // } // // if (list.size() > 0) { // int resId = getStringRes(view.getContext(), "smssdk_contacts_out_app"); // if (resId > 0) { // titles.add(view.getContext().getResources().getString(resId)); // } // contacts.add(list); // } // } public int getGroupCount() { return titles == null ? 0 : titles.size(); } public int getCount(int group) { if (contacts == null) { return 0; } ArrayList<HashMap<String, Object>> list = contacts.get(group); if (list == null) { return 0; } return list.size(); } public String getGroupTitle(int group) { if (titles.size() > 0) { return titles.get(group).toString(); } else { return null; } } public HashMap<String, Object> getItem(int group, int position) { if (contacts.size() > 0) { return contacts.get(group).get(position); } else { return null; } } public TextView getTitleView(int group, TextView convertView, ViewGroup parent) { if (convertView == null) { SizeHelper.prepare(parent.getContext()); convertView = new TextView(parent.getContext()); convertView.setBackgroundColor(0xffeae8ee); convertView.setTextSize(TypedValue.COMPLEX_UNIT_PX, SizeHelper.fromPxWidth(25)); convertView.setTextColor(0xff999999); int padding = SizeHelper.fromPxWidth(18); convertView.setPadding(padding, 0, 0, 0); convertView.setWidth(LayoutParams.MATCH_PARENT); int height = SizeHelper.fromPxWidth(40); convertView.setHeight(height); convertView.setGravity(Gravity.CENTER_VERTICAL); } String title = getGroupTitle(group); if (!TextUtils.isEmpty(title)) { convertView.setText(title); } return convertView; } public View getView(final int group, final int position, View convertView, ViewGroup parent) { HashMap<String, Object> data = getItem(group, position); return itemMaker.getView(data, convertView, parent); } }