package com.sogouchat.ui;
import java.security.PublicKey;
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 java.util.Map;
import com.sogouchat.R;
import com.sogouchat.SogouChatApp;
import com.sogouchat.bean.ContactNode;
import com.sogouchat.bean.DownNode;
import com.sogouchat.bean.MsgNode;
import com.sogouchat.bean.TelNode;
import com.sogouchat.os.ChatAppConstant;
import com.sogouchat.ui.ChatMsgViewAdapter.IMsgContentType;
import com.sogouchat.ui.ContactListAdapter.SortByPinyin;
import android.R.integer;
import android.app.Activity;
import android.app.ListActivity;
import android.content.ContentProviderOperation;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.DataSetObserver;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.SystemClock;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.text.Editable;
import android.text.Spannable;
import android.text.TextWatcher;
import android.text.format.Time;
import android.text.style.TextAppearanceSpan;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
import android.view.animation.TranslateAnimation;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class ContactListActivity2 extends Activity {
public final class ViewHolder {
public TextView mIcon;
public TextView mName;
public TextView mTel;
}
private static final String TAG = "ContactListActivity2";
public ArrayList<TelNode> mData = new ArrayList<TelNode>();
private LayoutInflater mInflater;
private View mCustomItem;
SogouChatApp mApp;
public int[] mAlphaIndex = new int[27];
private AllContactsAdapter mAdapter;
private ListView mListView;
private ImageView mQuickSearchBar;
private ImageView mQuickSearchThumb;
private ImageView mQuickSearchIcon;
private LinearLayout mQuickTip;
private TextView mTipText;
private Button mBtnOften;// 常用联系人button
private Button mBtnAll;// 全部联系人button
private Button mBtnContactInvite;// 邀请联系人button
private String[] oftencontacts = new String[] { "夏侯惇", "甄姬", "许褚", "马超",
"张飞", "刘备", "刘宇" };
private String[] oftencontactstel = new String[] { "13641030111",
"13641030112", "119", "13641030113", "13641030114", "110",
"13641030115" };
private EditText searchEditText;
private boolean mIsSearch = false;// 是否处于搜索状态
private String msearchContent = null;
private int splitNum = 0;
private int longClickIndex = 0;// 全部联系人长按索引值
private int mAllListScrollState;
private int mOftenListVisible = 0;// 0是可见,1是不可见
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.contacts_list2);
mIsSearch = false;
mInflater = LayoutInflater.from(this);
mApp = (SogouChatApp) getApplication();
mApp.mContactsList = this;
searchEditText = (EditText) findViewById(R.id.myet1);
mBtnOften = (Button) findViewById(R.id.buttonOften);
if (mApp.mTelList == null) {
Log.i("onCreate setupOftenContactsData ", "err:mTelList == null");
if (mApp.mMsgList == null)
Log.i("onCreate setupOftenContactsData ",
"err:mMsgList == null");
return;
}
mApp.setupOftenContactsData();
if (mApp.mOftenContacts == null)
mBtnOften.setText("常用联系人(0)");
else
mBtnOften.setText("常用联系人(" + mApp.mOftenContacts.size() + ")");
mBtnOften.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
RelativeLayout layoutOftenLayout = (RelativeLayout) findViewById(R.id.contacts_layout4);
RelativeLayout lineBelowOftenLayout = (RelativeLayout) findViewById(R.id.contacts_layoutline2);
int i = 1;
i = layoutOftenLayout.getVisibility();
if (i == 0)// 可见的改为不可见
{
layoutOftenLayout.setVisibility(8);
lineBelowOftenLayout.setVisibility(8);
} else {
layoutOftenLayout.setVisibility(0);
lineBelowOftenLayout.setVisibility(0);
GridView gridview = (GridView) findViewById(R.id.gridview);
int gridHeight = gridview.getLayoutParams().height;
ViewGroup.LayoutParams temParams = layoutOftenLayout
.getLayoutParams();
temParams.height = gridHeight;
layoutOftenLayout.setLayoutParams(temParams);
}
}
});
// 常用联系人适配器
GridView gridview = (GridView) findViewById(R.id.gridview);
if (mApp.mOftenContacts != null) {
// 生成动态数组,并且转入数据
ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < mApp.mOftenContacts.size(); i++) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("ItemText", mApp.mOftenContacts.get(i).mName);// 按序号做ItemText
lstImageItem.add(map);
}
// 生成适配器的ImageItem <====> 动态数组的元素,两者一一对应
SimpleAdapter OftenContactsAdapter = new SimpleAdapter(this, // 没什么解释
lstImageItem,// 数据来源
R.layout.often_contacts_grid,// night_item的XML实现
// 动态数组与ImageItem对应的子项
new String[] { "ItemText" },
// ImageItem的XML文件里面的一个ImageView,两个TextView ID
new int[] { R.id.ItemText });
// 添加并且显示
gridview.setAdapter(OftenContactsAdapter);
// 添加消息处理
gridview.setOnItemClickListener(new ItemClickListener());
}
mBtnAll = (Button) findViewById(R.id.buttonAll);
setupAllContactsView();
RelativeLayout layoutOftenLayout = (RelativeLayout) findViewById(R.id.contacts_layout4);
int tempval = gridview.getLayoutParams().height;
ViewGroup.LayoutParams temparams = layoutOftenLayout.getLayoutParams();
temparams.height = tempval;
layoutOftenLayout.setLayoutParams(temparams);
searchEditText.addTextChangedListener(new TextWatcher() {
private boolean isChanged = false;
@Override
public void afterTextChanged(Editable s) {
if (isChanged) {
return;
}
if (0 == searchEditText.getText().length()) {
mIsSearch = false;
isChanged = true;
msearchContent = null;
searchEditText.setSelectAllOnFocus(true);
isChanged = false;
setupAllContactsView();
searchEditText.invalidate();
} else {
mIsSearch = true;
msearchContent = new String(searchEditText.getText()
.toString());
setupAllContactsView();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
if (isChanged) {
return;
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// String searchContent = new String(searchEditText.getText()
// .toString());
}
});
}
private void setupAllContactsView() {
if (mApp.mTelList == null)
return;
addListData();
mBtnAll.setText("全部联系人(" + (mData.size() - splitNum) + ")");
// 全部联系人适配器
mAdapter = new AllContactsAdapter(this);
mListView = (ListView) findViewById(R.id.contact_list);
mListView.setAdapter(mAdapter);
setupAlphaView();
mListView.setOnItemClickListener(new ItemClickListener2());
// 添加长按点击
mListView
.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
if (mData.get(info.position).mContactId != 0) {
menu.setHeaderTitle((String) mData
.get(info.position).mName);
longClickIndex = info.position;
menu.add(0, 0, 0, "打电话");
menu.add(0, 1, 0, "转发名片");
menu.add(0, 2, 0, "删除联系人");
}
}
});
mListView.setOnScrollListener(new OnScrollListener() {
/**
* 滚动状态改变时调用
*/
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// // 不滚动时保存当前滚动到的位置
// if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
//
// RelativeLayout layoutOftenLayout = (RelativeLayout)
// findViewById(R.id.contacts_layout4);
// RelativeLayout lineBelowOftenLayout = (RelativeLayout)
// findViewById(R.id.contacts_layoutline2);
// int scrolledX = mListView.getScrollX();
// int scrolledY = mListView.getScrollY();
// if(scrolledX == 0 && scrolledY == 0)
// {
// layoutOftenLayout.setVisibility(0);
// lineBelowOftenLayout.setVisibility(0);
// GridView gridview = (GridView) findViewById(R.id.gridview);
// int gridHeight = gridview.getLayoutParams().height;
// ViewGroup.LayoutParams temParams = layoutOftenLayout
// .getLayoutParams();
// temParams.height = gridHeight;
// layoutOftenLayout.setLayoutParams(temParams);
// }
// else {
// layoutOftenLayout.setVisibility(8);
// lineBelowOftenLayout.setVisibility(8);
// }
//
// }
mAllListScrollState = scrollState;
}
/**
* 滚动时调用
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
RelativeLayout layoutOftenLayout = (RelativeLayout) findViewById(R.id.contacts_layout4);
RelativeLayout lineBelowOftenLayout = (RelativeLayout) findViewById(R.id.contacts_layoutline2);
if (mAllListScrollState != AbsListView.OnScrollListener.SCROLL_STATE_IDLE
&& firstVisibleItem == 0 && mOftenListVisible != 0) {
layoutOftenLayout.setVisibility(0);
lineBelowOftenLayout.setVisibility(0);
GridView gridview = (GridView) findViewById(R.id.gridview);
int gridHeight = gridview.getLayoutParams().height;
ViewGroup.LayoutParams temParams = layoutOftenLayout
.getLayoutParams();
temParams.height = gridHeight;
layoutOftenLayout.setLayoutParams(temParams);
mOftenListVisible = 0;
} else if (mAllListScrollState != AbsListView.OnScrollListener.SCROLL_STATE_IDLE
&& firstVisibleItem != 0 && mOftenListVisible != 1) {
layoutOftenLayout.setVisibility(8);
lineBelowOftenLayout.setVisibility(8);
mOftenListVisible = 1;
}
}
});
}
private void setupAlphaView() {
// TODO Auto-generated method stub
mQuickSearchBar = (ImageView) findViewById(R.id.quick_search_bar);
mQuickSearchThumb = (ImageView) findViewById(R.id.quick_search_thumb);
mQuickSearchIcon = (ImageView) findViewById(R.id.toast_image);
mQuickTip = (LinearLayout) findViewById(R.id.toast_container);
mTipText = (TextView) findViewById(R.id.toast_text);
mQuickSearchBar.setClickable(true);
mQuickSearchBar.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_DOWN
|| event.getAction() == MotionEvent.ACTION_MOVE) {
TranslateAnimation animation = new TranslateAnimation(0, 0,
event.getY(), event.getY());
animation.setFillAfter(false);
animation.setDuration(1);
animation.setFillBefore(false);
mQuickSearchThumb.startAnimation(animation);
int nTop = mQuickSearchBar.getTop();
int nBottom = mQuickSearchBar.getBottom();
float nBtw = (nBottom - nTop) / 30f;
int nIndex = (int) ((event.getY() - nTop + nBtw / 2) / nBtw);
// ViewGroup.LayoutParams para =
// mQuickSearchThumb.getLayoutParams();
// para.height = 300;
// para.width = 300;
// mQuickSearchThumb.setLayoutParams(para);
// mQuickSearchThumb.setPadding(
// mQuickSearchThumb.getPaddingLeft(), (int)
// (mQuickSearchThumb.getPaddingTop()+event.getY()),
// mQuickSearchThumb.getPaddingRight(),
// mQuickSearchThumb.getPaddingBottom());
//
// mQuickSearchThumb.setVisibility(View.VISIBLE);
mQuickTip.setVisibility(View.VISIBLE);
nIndex--;
String strText = "";
if (0 < nIndex && nIndex < 27) {
// a-z
strText = String.valueOf((char) ('A' + nIndex));
int alphaIndex1 = mAdapter.getAlphaIndex(nIndex);
mListView.setSelection(alphaIndex1);
mTipText.setText(strText);
mQuickSearchIcon.setVisibility(View.GONE);
mTipText.setVisibility(View.VISIBLE);
} else if (nIndex == 0) {
mListView.setSelection(0);
mQuickSearchIcon.setVisibility(View.VISIBLE);
mTipText.setVisibility(View.GONE);
// search
} else if (nIndex == 27) {
// #
strText = "#";
int alphaIndex = mAdapter.getAlphaIndex(26);
mListView.setSelection(alphaIndex);
// strText += (""+event.getY());
mTipText.setText(strText);
mQuickSearchIcon.setVisibility(View.GONE);
mTipText.setVisibility(View.VISIBLE);
}
}
if (event.getAction() == MotionEvent.ACTION_CANCEL
|| event.getAction() == MotionEvent.ACTION_UP) {
mQuickSearchThumb.setVisibility(View.GONE);
mQuickTip.setVisibility(View.GONE);
}
return false;
}
});
}
// 长按菜单响应函数
@Override
public boolean onContextItemSelected(MenuItem item) {
// setTitle("点击了长按菜单里面的第"+item.getItemId()+"个项目");
if (mApp.mTelList == null)
return super.onContextItemSelected(item);
if (item.getItemId() == 0) {
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"
+ mData.get(longClickIndex).mTel));
startActivity(intent);
} else if (item.getItemId() == 2) {
Cursor cursor = getContentResolver().query(Data.CONTENT_URI,
new String[] { Data.RAW_CONTACT_ID },
ContactsContract.Contacts.DISPLAY_NAME + "=?",
new String[] { mData.get(longClickIndex).mName }, null);
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
if (cursor.moveToFirst()) {
do {
long Id = cursor.getLong(cursor
.getColumnIndex(Data.RAW_CONTACT_ID));
ops.add(ContentProviderOperation.newDelete(
ContentUris.withAppendedId(RawContacts.CONTENT_URI,
Id)).build());
try {
getContentResolver().applyBatch(
ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
}
} while (cursor.moveToNext());
cursor.close();
}
Log.i("ticket time 1 ContactListActivity2 begin 1",
"" + System.currentTimeMillis());
// Thread th = new Thread(new Runnable() {
//
// @Override
// public void run() {
// // TODO Auto-generated method stub
// while (mApp.mRemoteService == null) {
// Log.i("after del contact", "Sleep");
// SystemClock.sleep(1000);
// }
// Log.i("ticket time 1 ContactListActivity2 begin 2", ""
// + System.currentTimeMillis());
// mApp.sendSrvForeMsg(
// ChatAppConstant.SRV_ForeMsg_Fetch_Contacts, null,
// null);
// }
//
// });
// th.start();
for (int i = 0; i < mApp.mTelList.size(); i++) {
TelNode item1 = mApp.mTelList.get(i);
if (item1.mContactId != 0
&& item1.mName.equals(mData.get(longClickIndex).mName)) {
mApp.mTelList.remove(i);
break;
}
}
this.refresh();
} else {
Toast.makeText(ContactListActivity2.this,
"你点击了长按菜单里面的第" + item.getItemId() + "个项目",
Toast.LENGTH_SHORT).show();
}
return super.onContextItemSelected(item);
}
class ItemClickListener implements OnItemClickListener // 常用联系人点击
{
public void onItemClick(AdapterView<?> arg0,// The AdapterView where the
// click happened
View arg1,// The view within the AdapterView that was clicked
int arg2,// The position of the view in the adapter
long arg3// The row id of the item that was clicked
) {
// 在本例中arg2=arg3
if (mApp.mTelList == null)
return;
HashMap<String, Object> item = (HashMap<String, Object>) arg0
.getItemAtPosition(arg2);
Log.i("FragmentComplexList11", "Item clicked: " + arg2);
Intent intent = new Intent();
intent.setClass(ContactListActivity2.this, ChatListActivity.class);
Bundle bundle = new Bundle();
String tel = (String) mApp.mOftenContacts.get(arg2).mTel;// oftencontactstel[arg2];
String name = (String) mApp.mOftenContacts.get(arg2).mName;
bundle.putString("tel", tel);
bundle.putString("name", name);
intent.putExtras(bundle);
arg1.getContext().startActivity(intent);
}
}
class ItemClickListener2 implements OnItemClickListener // 所有联系人点击
{
public void onItemClick(AdapterView<?> arg0,// The AdapterView where the
// click happened
View arg1,// The view within the AdapterView that was clicked
int arg2,// The position of the view in the adapter
long arg3// The row id of the item that was clicked
) {
// 在本例中arg2=arg3
if (mApp.mTelList == null)
return;
if (mData.get(arg2).mContactId != 0) {
Log.i("FragmentComplexList22", "Item clicked: " + arg2);
Intent intent = new Intent();
intent.setClass(ContactListActivity2.this,
ChatListActivity.class);
Bundle bundle = new Bundle();
String tel = (String) mData.get(arg2).mTel;
String name = (String) mData.get(arg2).mName;
bundle.putString("tel", tel);
bundle.putString("name", name);
intent.putExtras(bundle);
arg1.getContext().startActivity(intent);
}
}
}
private void addListData() {
if (mApp.mTelList == null)
return;
char firstchar = 0;
if (mIsSearch)
firstchar = msearchContent.charAt(0);
mData.clear();
splitNum = 0;
mData = new ArrayList<TelNode>();
for (int i = 0; i < mApp.mTelList.size(); i++) {
TelNode item = mApp.mTelList.get(i);
if (mIsSearch) {
if ((firstchar >= 0x0391) && (firstchar <= 0xFFE5))// 汉字
{
if (item.mContactId != 0
&& item.mName.contains(msearchContent)) {
mData.add(item);
}
} else if ((firstchar >= 0x0000) && (firstchar <= 0x00FF))// 英文
{
if (item.mContactId != 0
&& item.mPinyin.contains(msearchContent)) {
mData.add(item);
} else if (item.mContactId != 0 && item.mCapPinyin != null
&& item.mCapPinyin.contains(msearchContent)) {
mData.add(item);
}
} else if ((firstchar >= 0x0030) && (firstchar <= 0x0039))// 数字0-9
{
if (item.mContactId != 0
&& item.mTel.contains(msearchContent)) {
mData.add(item);
}
}
} else {
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 || item.mPinyin == "")
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);
splitNum++;
i++;
} else if ((fChar >= '0' && fChar <= '9') || fChar == '+') {
if (dChat == '#')
continue;
mAlphaIndex[26] = i;
dChat = '#';
TelNode separator = new TelNode();
separator.mName = String.valueOf('#');
separator.mTel = null;
mData.add(i, separator);
splitNum++;
i++;
}
}
}
}
public void refresh() {
Log.i("ContactListActivity2", "come back");
Log.i("ticket time 1 ContactListActivity2 refresh 1",
"" + System.currentTimeMillis());
finish();
Log.i("ticket time 1 ContactListActivity2 refresh 2",
"" + System.currentTimeMillis());
Intent intent = new Intent();
intent.setClass(ContactListActivity2.this, ContactListActivity2.class);
Log.i("ticket time 1 ContactListActivity2 refresh 3",
"" + System.currentTimeMillis());
this.startActivity(intent);
}
public class AllContactsAdapter extends BaseAdapter {
private LayoutInflater mInflater;
public AllContactsAdapter(Context context) {
this.mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mData.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;
// final int id = position;
// if (convertView == null) {
// holder = new ViewHolder();
// convertView = mInflater.inflate(R.layout.item_contact_list2,
// null);
// holder.mImg = (ImageView) convertView
// .findViewById(R.id.contact_icon);
// holder.mName = (TextView) convertView
// .findViewById(R.id.contact_text_name);
// holder.mTel = (TextView) convertView
// .findViewById(R.id.contact_text_tel);
// holder.viewBtn = (Button) convertView
// .findViewById(R.id.buttoninvite);
//
//
// LinearLayout linearlayout2 =
// (LinearLayout)convertView.findViewById(R.id.itemlinelayout1);
// int tempval = getWindowManager().getDefaultDisplay().getWidth();
// ViewGroup.LayoutParams temparams =
// linearlayout2.getLayoutParams();
// temparams.width = tempval - 36 - 60 - 150 - 1;
// linearlayout2.setLayoutParams(temparams);
//
// convertView.setTag(holder);
// } else {
// holder = (ViewHolder) convertView.getTag();
// }
// holder.mImg.setBackgroundResource((Integer) R.drawable.machao);
// holder.mName.setText((String) mData.get(position).mName);
// holder.mTel.setText((String) mData.get(position).mTel);
// holder.viewBtn.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// Toast.makeText(ContactListActivity2.this,
// "邀请" + (String) mData.get(id).mName,
// Toast.LENGTH_SHORT).show();
// }
// });
// return convertView;
ViewHolder holder = null;
TelNode item = mData.get(position);
int i1 = 0;
int i2 = 0;
char firstchar = 0;
if (mIsSearch)
firstchar = msearchContent.charAt(0);
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);
if (mIsSearch) {
if ((firstchar >= 0x0391) && (firstchar <= 0xFFE5))// 汉字
{
if (item.mContactId != 0
&& item.mName.contains(msearchContent)) {
Spannable span = (Spannable) holder.mName.getText();
TextAppearanceSpan textappearancespan = new TextAppearanceSpan(
convertView.getContext(),
R.style.search_name_hightlight_style);
span.removeSpan(textappearancespan);
i1 = holder.mName.getText().toString()
.indexOf(msearchContent);
i2 = msearchContent.length();
if (0 <= holder.mName.getText().toString()
.indexOf(msearchContent)
&& holder.mName.getText().toString()
.indexOf(msearchContent) <= holder.mName
.getText().length()
&& 1 <= msearchContent.length()
&& msearchContent.length() <= holder.mName
.getText().length())
span.setSpan(textappearancespan, i1, i1 + i2,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
} else if ((firstchar >= 0x0000) && (firstchar <= 0x00FF))// 英文
{
if (item.mContactId != 0
&& item.mPinyin.contains(msearchContent)) {
Spannable span = (Spannable) holder.mName.getText();
TextAppearanceSpan textappearancespan = new TextAppearanceSpan(
convertView.getContext(),
R.style.search_name_hightlight_style);
span.removeSpan(textappearancespan);
i1 = holder.mName.getText().toString()
.indexOf(msearchContent);
i2 = msearchContent.length();
if (0 <= holder.mName.getText().toString()
.indexOf(msearchContent)
&& holder.mName.getText().toString()
.indexOf(msearchContent) <= holder.mName
.getText().length()
&& 1 <= msearchContent.length()
&& msearchContent.length() <= holder.mName
.getText().length())
span.setSpan(textappearancespan, i1, i1 + i2,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
} else if ((firstchar >= 0x0030) && (firstchar <= 0x0039))// 数字0-9
{
if (item.mContactId != 0
&& item.mTel.contains(msearchContent)) {
Spannable span = (Spannable) holder.mTel.getText();
TextAppearanceSpan textappearancespan = new TextAppearanceSpan(
convertView.getContext(),
R.style.search_tel_hightlight_style);
span.removeSpan(textappearancespan);
i1 = holder.mName.getText().toString()
.indexOf(msearchContent);
i2 = msearchContent.length();
if (0 <= holder.mTel.getText().toString()
.indexOf(msearchContent)
&& holder.mTel.getText().toString()
.indexOf(msearchContent) <= holder.mTel
.getText().length()
&& 1 <= msearchContent.length()
&& msearchContent.length() <= holder.mTel
.getText().length())
span.setSpan(textappearancespan, i1, i1 + i2,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
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;
}
public int getAlphaIndex(int alpha) {
return mAlphaIndex[alpha];
}
}
class SortByPinyin implements Comparator<Object> {
public int compare(Object o1, Object o2) {
TelNode item1 = (TelNode) o1;
TelNode item2 = (TelNode) o2;
if (item1.mPinyin == null || item1.mPinyin == "") {
return -1;
} else if (item2.mPinyin == null || item2.mPinyin == "") {
return 1;
}
if (item1.mPinyin.charAt(0) > item2.mPinyin.charAt(0))
return 1;
else if (item1.mPinyin.charAt(0) < item2.mPinyin.charAt(0))
return -1;
else
return 0;
}
}
}