package com.kaixin.android.menu;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import android.content.Context;
import android.content.Intent;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.SectionIndexer;
import android.widget.TextView;
import com.kaixin.android.KXApplication;
import com.kaixin.android.R;
import com.kaixin.android.activity.FriendInfoActivity;
import com.kaixin.android.activity.InviteActivity;
import com.kaixin.android.activity.SlaveInfoActivity;
import com.kaixin.android.common.Constants;
import com.kaixin.android.result.SlaveResult;
import com.kaixin.android.ui.base.FlipperLayout.OnOpenListener;
import com.kaixin.android.ui.base.MyLetterListView;
import com.kaixin.android.ui.base.MyLetterListView.OnTouchingLetterChangedListener;
import com.kaixin.android.utils.CallService;
import com.kaixin.android.utils.CommonUtils;
import com.kaixin.android.utils.ImageUtil;
import com.kaixin.android.utils.TextUtil;
import com.nostra13.universalimageloader.core.ImageLoader;
/**
* 买卖奴隶类
*
* @author gyz
*
*/
public class BuyAndSellSlaves {
private Context mContext;
private KXApplication mKXApplication;
private View mSlaves;
private Button mMenu;
private EditText mSearch;
private ListView mDisplay;
private MyLetterListView mLetter;
private TextUtil mTextUtil;
private Adapter mAdapter;
private OnOpenListener mOnOpenListener;
// 当前显示的好友数据
private List<SlaveResult> mMySlavesResults = new ArrayList<SlaveResult>();
// 当前显示的好友的姓名的首字母的在列表中的位置
private List<Integer> mMySlavesPosition = new ArrayList<Integer>();
// 当前显示的好友的姓名的首字母数据
private List<String> mMySlavesFirstName = new ArrayList<String>();
// 是否显示的是好友内容
private boolean mIsAll = true;
private TextView mNoDisplay;
private RelativeLayout mDisplayLayout;
private Button mAdd;
public BuyAndSellSlaves(Context context, KXApplication application) {
mContext = context;
mKXApplication = application;
mSlaves = LayoutInflater.from(context).inflate(R.layout.buy_and_sell_friends, null);
findViewById();
setListener();
init();
}
private void findViewById() {
mMenu = (Button) mSlaves.findViewById(R.id.friends_menu);
mSearch = (EditText) mSlaves.findViewById(R.id.friends_search);
mLetter = (MyLetterListView) mSlaves.findViewById(R.id.friends_letter);
mDisplay = (ListView) mSlaves.findViewById(R.id.friends_display);
mAdd = (Button) mSlaves.findViewById(R.id.friends_add);
mDisplayLayout = (RelativeLayout) mSlaves.findViewById(R.id.friends_display_layout);
mNoDisplay = (TextView) mSlaves.findViewById(R.id.friends_nodisplay);
if(!CommonUtils.isNetWorkConnected(mKXApplication)){
mSlaves.findViewById(R.id.warnning_layout).setVisibility(View.VISIBLE);
}else{
mSlaves.findViewById(R.id.warnning_layout).setVisibility(View.GONE);
}
}
private void setListener() {
mMenu.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (mOnOpenListener != null) {
mOnOpenListener.open();
}
}
});
mAdd.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(mContext, InviteActivity.class);
mContext.startActivity(intent);
}
});
mLetter.setOnTouchingLetterChangedListener(new OnTouchingLetterChangedListener() {
public void onTouchingLetterChanged(String s) {
// 根据触摸的字母,跳转到响应位置
if (mKXApplication.mMySlavesFirstNamePosition.get(s) != null) {
mDisplay.setSelection(mKXApplication.mMySlavesFirstNamePosition
.get(s));
}
}
});
mSearch.addTextChangedListener(new TextWatcher() {
// 当文本改变时调用
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// 获取当前输入的内容并大写
String searchChar = s.toString().toUpperCase();
// 如果显示的是好友内容
if (mIsAll) {
// 清除当前所有的数据
mMySlavesResults.clear();
mMySlavesPosition.clear();
mMySlavesFirstName.clear();
// 判断输入内容的长度
if (searchChar.length() > 0) {
// 判断是否是字母
if (searchChar.matches("^[a-z,A-Z].*$")) {
// 判断当前好友里是有存在这个字母,有的话则取出数据更新界面,否则直接更新界面
if (mKXApplication.mMySlavesGroupByFirstName
.containsKey(searchChar)) {
List<SlaveResult> results = mKXApplication.mMySlavesGroupByFirstName
.get(searchChar);
mMySlavesResults.addAll(results);
mMySlavesFirstName.add(searchChar);
mMySlavesPosition.add(0);
mAdapter.notifyDataSetChanged();
} else {
mAdapter.notifyDataSetChanged();
}
} else {
mAdapter.notifyDataSetChanged();
}
} else {
// 输入框没内容时,获取全部好友并更新界面
mMySlavesResults
.addAll(mKXApplication.mMySlaveResults);
mMySlavesPosition
.addAll(mKXApplication.mMySlavesPosition);
mMySlavesFirstName
.addAll(mKXApplication.mMySlavesFirstName);
mAdapter.notifyDataSetChanged();
}
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
}
});
mDisplay.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
int section = getSectionForPosition(position);
SlaveResult friend = mKXApplication.mMySlavesGroupByFirstName
.get(mMySlavesFirstName.get(section)).get(
position - getPositionForSection(section));
// SlavesResult friend = mKXApplication.mMySlavesResults.get(position);
Intent intent = new Intent();
intent.setClass(mContext, SlaveInfoActivity.class);
intent.putExtra("email", friend.getEmail());
mContext.startActivity(intent);
}
private int getPositionForSection(int section) {
if (section < 0 || section >= mMySlavesFirstName.size()) {
return -1;
}
return mMySlavesPosition.get(section);
}
private int getSectionForPosition(int position) {
if (position < 0 || position >= mMySlavesResults.size()) {
return -1;
}
int index = Arrays.binarySearch(mMySlavesPosition.toArray(),
position);
return index >= 0 ? index : -index - 2;
}
});
}
private void init() {
// 实例化文本工具
mTextUtil = new TextUtil(mKXApplication);
// 获取我的好友
getMySlaves();
// 添加适配器
mAdapter = new Adapter();
mDisplay.setAdapter(mAdapter);
}
/**
* 获取我的好友
*/
private void getMySlaves() {
if (mKXApplication.mMySlaveResults.isEmpty()) {
String json = CallService.getMySlaves();
try {
JSONObject object = new JSONObject(json);
JSONArray array = object.getJSONArray("data");
SlaveResult result = null;
if(array.length() == 0){
mDisplayLayout.setVisibility(View.GONE);
mNoDisplay.setVisibility(View.VISIBLE);
return;
}
for (int i = 0; i < array.length(); i++) {
result = new SlaveResult();
result.setUid(array.getJSONObject(i).getString("uid"));
result.setName(array.getJSONObject(i).getString("name"));
result.setAvatar(array.getJSONObject(i).getString("avatar"));
result.setEmail(array.getJSONObject(i).getString("email"));
result.setStates(array.getJSONObject(i).getString("state"));
result.setName_pinyin(mTextUtil.getStringPinYin(result
.getName()));
if (!TextUtils.isEmpty(result.getName_pinyin())) {
result.setName_first(result.getName_pinyin()
.substring(0, 1).toUpperCase());
}
mKXApplication.mMySlaveResults.add(result);
if (result.getName_first().matches("^[a-z,A-Z].*$")) {
if (mKXApplication.mMySlavesFirstName.contains(result
.getName_first())) {
mKXApplication.mMySlavesGroupByFirstName.get(
result.getName_first()).add(result);
} else {
mKXApplication.mMySlavesFirstName.add(result
.getName_first());
List<SlaveResult> list = new ArrayList<SlaveResult>();
list.add(result);
mKXApplication.mMySlavesGroupByFirstName.put(
result.getName_first(), list);
}
} else {
if (mKXApplication.mMySlavesFirstName.contains("#")) {
mKXApplication.mMySlavesGroupByFirstName.get("#")
.add(result);
} else {
mKXApplication.mMySlavesFirstName.add("#");
List<SlaveResult> list = new ArrayList<SlaveResult>();
list.add(result);
mKXApplication.mMySlavesGroupByFirstName.put("#",
list);
}
}
}
Collections.sort(mKXApplication.mMySlavesFirstName);
int position = 0;
for (int i = 0; i < mKXApplication.mMySlavesFirstName.size(); i++) {
mKXApplication.mMySlavesFirstNamePosition
.put(mKXApplication.mMySlavesFirstName.get(i),
position);
mKXApplication.mMySlavesPosition.add(position);
position += mKXApplication.mMySlavesGroupByFirstName.get(
mKXApplication.mMySlavesFirstName.get(i)).size();
}
} catch (Exception e) {
}
}
mMySlavesResults.addAll(mKXApplication.mMySlaveResults);
mMySlavesPosition.addAll(mKXApplication.mMySlavesPosition);
mMySlavesFirstName.addAll(mKXApplication.mMySlavesFirstName);
}
private class Adapter extends BaseAdapter implements SectionIndexer {
public int getCount() {
return mMySlavesResults.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.friends_item, null);
holder = new ViewHolder();
holder.alpha = (TextView) convertView
.findViewById(R.id.friends_item_alpha);
holder.alpha_line = (ImageView) convertView
.findViewById(R.id.friends_item_alpha_line);
holder.avatar = (ImageView) convertView
.findViewById(R.id.friends_item_avatar);
holder.name = (TextView) convertView
.findViewById(R.id.friends_item_name);
holder.arrow = (ImageView) convertView
.findViewById(R.id.friends_item_arrow);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (mIsAll) {
int section = getSectionForPosition(position);
final SlaveResult result = mKXApplication.mMySlavesGroupByFirstName
.get(mMySlavesFirstName.get(section)).get(
position - getPositionForSection(section));
if (getPositionForSection(section) == position) {
holder.alpha.setVisibility(View.VISIBLE);
holder.alpha_line.setVisibility(View.VISIBLE);
holder.alpha.setText(mMySlavesFirstName.get(section));
} else {
holder.alpha.setVisibility(View.GONE);
holder.alpha_line.setVisibility(View.GONE);
}
holder.name.setText(result.getName());
// holder.avatar.setImageBitmap(mKXApplication.getAvatar(result
// .getAvatar()));
ImageLoader.getInstance().displayImage(Constants.getImageUrl() + result.getAvatar(), holder.avatar, ImageUtil.getOption());
holder.arrow.setVisibility(View.GONE);
}
return convertView;
}
class ViewHolder {
TextView alpha;
ImageView alpha_line;
ImageView avatar;
TextView name;
ImageView arrow;
}
public Object[] getSections() {
return mMySlavesFirstName.toArray();
}
public int getPositionForSection(int section) {
if (section < 0 || section >= mMySlavesFirstName.size()) {
return -1;
}
return mMySlavesPosition.get(section);
}
public int getSectionForPosition(int position) {
if (position < 0 || position >= mMySlavesResults.size()) {
return -1;
}
int index = Arrays.binarySearch(mMySlavesPosition.toArray(),
position);
return index >= 0 ? index : -index - 2;
}
}
public View getView() {
return mSlaves;
}
public void setOnOpenListener(OnOpenListener onOpenListener) {
mOnOpenListener = onOpenListener;
}
}