package com.sogouchat.ui; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.TextView; import com.sogouchat.R; import com.sogouchat.SogouChatApp; import com.sogouchat.bean.TelNode; import com.sogouchat.ui.ContactListAdapter.SortByPinyin; import com.sogouchat.ui.ContactListAdapter.ViewHolder; public class EditContactListAdapter extends BaseAdapter { public final class ViewHolder{ public TextView mIcon; public TextView mName; public TextView mTel; public CheckBox mCheck; } public ArrayList<TelNode> mData= new ArrayList<TelNode>(); public ArrayList<TelNode> mAllData = new ArrayList<TelNode>(); public ArrayList<TelNode> mFilterData = new ArrayList<TelNode>(); public ArrayList<TelNode> mSelectList; private LayoutInflater mInflater; private CreateActivity mActivity; private View mCustomItem; private SogouChatApp mApp; public int[] mAlphaIndex = new int[27]; private String mKeyWord=""; public EditContactListAdapter(Context context, SogouChatApp app){ mActivity =(CreateActivity) context; mSelectList = mActivity.mSelectList; mInflater = LayoutInflater.from(context); mApp = app; } public void setupList() { mAllData.clear(); for(int i=0;i < mApp.mTelList.size();i++){ TelNode item = mApp.mTelList.get(i); if(item.mContactId >0){ mAllData.add(item); } } mData = mAllData; // sort list Collections.sort(mData, new SortByPinyin()); splitByPinyin(); // for(int i = 0; i < mData.size();i++){ // Log.i("list", mData.get(i).mName+"pinyin="+mData.get(i).mPinyin); // } } public void setupAllList(boolean toAll){ if (toAll) { mData = mAllData; } else{ mData = mApp.mOftenContacts; } notifyDataSetChanged(); } public void setupFilter(String keyWord){ if (!keyWord.equals(mKeyWord)) { mKeyWord = keyWord; mFilterData.clear(); for(int i=0;i < mApp.mTelList.size();i++){ TelNode item = mApp.mTelList.get(i); if(item.mContactId >0){ if (item.mName.contains(keyWord)){ mFilterData.add(item); } else if (item.mPinyin.contains(keyWord )){ mFilterData.add(item); } else if (item.mCapPinyin!=null && item.mCapPinyin.contains(keyWord )){ mFilterData.add(item); } else if (item.mTel.contains(keyWord )){ mFilterData.add(item); } } } mData = mFilterData; // sort list Collections.sort(mData, new SortByPinyin()); splitByPinyin(); notifyDataSetChanged(); } } private void splitByPinyin() { char dChat = 256; for (int i = 0; i < mData.size(); i++) { TelNode item = mData.get(i); if (item.mPinyin == null) continue; char fChar = item.mPinyin.charAt(0); if (fChar != dChat && (fChar >= 'a' && fChar <= 'z')) { mAlphaIndex[fChar - 'a'] = i; dChat = fChar; TelNode separator = new TelNode(); separator.mName = String.valueOf(dChat).toUpperCase(); separator.mTel = null; mData.add(i, separator); i++; } else if (fChar != dChat && dChat == 256 ) { mAlphaIndex[26] = i; dChat = fChar; TelNode separator = new TelNode(); separator.mName = String.valueOf('#'); separator.mTel = null; mData.add(i, separator); i++; } } } public ArrayList<TelNode> getData(){ return mData; } @Override public int getCount() { // TODO Auto-generated method stub return getData().size(); } @Override public Object getItem(int pos) { // TODO Auto-generated method stub return mData.get(pos); } @Override public long getItemId(int pos) { // TODO Auto-generated method stub return pos; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; TelNode item = mData.get(position); if (convertView == null) { holder = new ViewHolder(); if (item.mTel != null) { convertView = mInflater.inflate(R.layout.item_contact_list_edit, null); } else { convertView = mInflater.inflate(R.layout.item_news_separator,null); } convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } // if (holder == null) { holder = new ViewHolder(); // } if (item.mTel != null) { if (holder.mName== null || holder.mName.getId() != R.id.contact_text_name){ convertView = mInflater.inflate(R.layout.item_contact_list_edit, null); } holder.mIcon = (TextView) convertView.findViewById(R.id.contact_text_icon); holder.mName = (TextView) convertView.findViewById(R.id.contact_text_name); holder.mTel = (TextView) convertView.findViewById(R.id.contact_text_tel); holder.mCheck = (CheckBox) convertView.findViewById(R.id.checkBox_contact); holder.mCheck.setOnCheckedChangeListener(null); if (isChecked(item)){ holder.mCheck.setSelected(true); } else { holder.mCheck.setSelected(false); } holder.mName.setText(item.mName); holder.mIcon.setText(item.mName.substring(0, 1)); holder.mTel.setText(item.mTel); convertView.setTag(holder); } else{ convertView = mInflater.inflate(R.layout.item_news_separator,null); holder.mName = (TextView) convertView.findViewById(R.id.news_text_separator); holder.mName.setText(item.mName); } return convertView; } class SortByPinyin implements Comparator<Object> { public int compare(Object o1, Object o2) { TelNode item1 = (TelNode) o1; TelNode item2 = (TelNode) o2; boolean item1Null; boolean item2Null; int result=0; if (item1.mPinyin == null || item1.mPinyin.length() == 0 ) { item1Null = true; } else { item1Null = false; } if (item2.mPinyin == null || item2.mPinyin.length() == 0) { item2Null = true; } else { item2Null = false; } if (item1Null && !item2Null) { result =-1; } else if (item2Null && !item1Null) { result =1; } else if (item1Null && item2Null) { result =0; } else { if (item1.mPinyin.charAt(0) > item2.mPinyin.charAt(0)){ result= 1; } else if (item1.mPinyin.charAt(0) < item2.mPinyin.charAt(0)){ result= -1; } else { result = 0; } } return result; } } public int getAlphaIndex(int alpha){ return mAlphaIndex[alpha]; } public boolean isChecked(TelNode item){ return mSelectList.contains(item); } }