package com.sogouchat.ui;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.sogouchat.R;
import com.sogouchat.SogouChatApp;
import com.sogouchat.bean.ContactNode;
import com.sogouchat.bean.TelNode;
import com.sogouchat.ui.NewsListAdapter.SortByDate;
import com.sogouchat.ui.NewsListAdapter.ViewHolder;
public class ContactListAdapter extends BaseAdapter {
public final class ViewHolder{
public TextView mIcon;
public TextView mName;
public TextView mTel;
}
public ArrayList<TelNode> mData = new ArrayList<TelNode>();
private LayoutInflater mInflater;
private ContactListActivity mActivity;
private View mCustomItem;
private SogouChatApp mApp;
public int[] mAlphaIndex = new int[27];
public ContactListAdapter(Context context, SogouChatApp app){
mActivity =(ContactListActivity) context;
mInflater = LayoutInflater.from(context);
mApp = app;
}
public void setupList() {
mData = new ArrayList<TelNode>();
for(int i=0;i < mApp.mTelList.size();i++){
TelNode item = mApp.mTelList.get(i);
if(item.mContactId!=0){
mData.add(item);
}
}
// 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);
}
}
private void splitByPinyin(){
char dChat = 0;
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 ){
if (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>='0'&&fChar<='9') {
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 arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@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, 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, 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.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;
if (item1.mPinyin == null){
return -1;
}
else if (item2.mPinyin == null){
return 1;
}
if (item1.mPinyin.charAt(0) > item2.mPinyin.charAt(0))
return 1;
else
return -1;
}
}
public int getAlphaIndex(int alpha){
return mAlphaIndex[alpha];
}
}