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);
}
}