package com.kaixin.android.activity;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.TypedValue;
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.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import com.kaixin.android.KXActivity;
import com.kaixin.android.R;
import com.kaixin.android.common.Constants;
import com.kaixin.android.result.FriendsResult;
import com.kaixin.android.utils.CallService;
import com.kaixin.android.utils.ImageUtil;
import com.kaixin.android.utils.TextUtil;
import com.nostra13.universalimageloader.core.ImageLoader;
/**
* 资料好友类
*
* @author gyz
*
*/
public class FriendsActivity extends KXActivity {
private Button mBack;
private TextView mTitle;
private GridView mDisplay;
private TextView mNoDisplay;
private List<FriendsResult> mFriendsResults;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.friends_activity);
findViewById();
setListener();
init();
}
private void findViewById() {
mBack = (Button) findViewById(R.id.friends_back);
mTitle = (TextView) findViewById(R.id.friends_title);
mDisplay = (GridView) findViewById(R.id.friends_display);
mNoDisplay = (TextView) findViewById(R.id.friends_nodisplay);
}
private void setListener() {
mBack.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 关闭当前界面
finish();
}
});
mDisplay.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// 获取当前点击的好友数据并跳转到好友资料界面
FriendsResult result = mFriendsResults.get(position);
Intent intent = new Intent();
intent.setClass(FriendsActivity.this, FriendInfoActivity.class);
intent.putExtra("uid", result.getUid());
intent.putExtra("email", result.getEmail());
intent.putExtra("name", result.getName());
intent.putExtra("avatar", result.getAvatar());
startActivity(intent);
}
});
}
private void init() {
// 获取当前好友所属用户的ID和姓名
String uid = getIntent().getStringExtra("uid");
String name = getIntent().getStringExtra("name");
mTitle.setText(name + "的好友");
// ID为空时为当前用户
if (uid == null) {
// 获取当前用户的好友数据
getMyFriends();
} else {
// 获取其他用户的好友数据
getFriendFriends(uid);
}
// 添加适配器
mDisplay.setAdapter(new FriendsAdapter());
}
/**
* 获取当前用户的好友数据
*/
private void getMyFriends() {
if (mKXApplication.mMyFriendsResults.isEmpty()) {
String json = CallService.getMyFriends("");
try {
JSONObject object = new JSONObject(json);
JSONArray array = object.getJSONArray("data");
FriendsResult result = null;
for (int i = 0; i < array.length(); i++) {
result = new FriendsResult();
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.setName_pinyin(new TextUtil(mKXApplication)
.getStringPinYin(result.getName()));
if (!TextUtils.isEmpty(result.getName_pinyin())) {
result.setName_first(result.getName_pinyin()
.substring(0, 1).toUpperCase());
}
mKXApplication.mMyFriendsResults.add(result);
if (result.getName_first().matches("^[a-z,A-Z].*$")) {
if (mKXApplication.mMyFriendsFirstName.contains(result
.getName_first())) {
mKXApplication.mMyFriendsGroupByFirstName.get(
result.getName_first()).add(result);
} else {
mKXApplication.mMyFriendsFirstName.add(result
.getName_first());
List<FriendsResult> list = new ArrayList<FriendsResult>();
list.add(result);
mKXApplication.mMyFriendsGroupByFirstName.put(
result.getName_first(), list);
}
} else {
if (mKXApplication.mMyFriendsFirstName.contains("#")) {
mKXApplication.mMyFriendsGroupByFirstName.get("#")
.add(result);
} else {
mKXApplication.mMyFriendsFirstName.add("#");
List<FriendsResult> list = new ArrayList<FriendsResult>();
list.add(result);
mKXApplication.mMyFriendsGroupByFirstName.put("#",
list);
}
}
}
Collections.sort(mKXApplication.mMyFriendsFirstName);
int position = 0;
for (int i = 0; i < mKXApplication.mMyFriendsFirstName.size(); i++) {
mKXApplication.mMyFriendsFirstNamePosition
.put(mKXApplication.mMyFriendsFirstName.get(i),
position);
mKXApplication.mMyFriendsPosition.add(position);
position += mKXApplication.mMyFriendsGroupByFirstName.get(
mKXApplication.mMyFriendsFirstName.get(i)).size();
}
mFriendsResults = mKXApplication.mMyFriendsResults;
} catch (Exception e) {
mFriendsResults = new ArrayList<FriendsResult>();
mDisplay.setVisibility(View.GONE);
mNoDisplay.setVisibility(View.VISIBLE);
}
} else {
mFriendsResults = mKXApplication.mMyFriendsResults;
}
}
/**
* 获取其他用户的好友数据
*
* @param uid
* 用户的ID
*/
private void getFriendFriends(String uid) {
if (mKXApplication.mFriendFriendsResults.containsKey(uid)) {
mFriendsResults = mKXApplication.mFriendFriendsResults.get(uid);
} else {
String json = CallService.getMyFriends(uid);
try {
System.out.println(json+"====================json");
// inputStream = getAssets().open("data/my_friends.KX");
// String json = new TextUtil(mKXApplication)
// .readTextFile(inputStream);
JSONObject object = new JSONObject(json);
JSONArray array = object.getJSONArray("data");
FriendsResult result = null;
mFriendsResults = new ArrayList<FriendsResult>();
for (int i = 0; i < array.length(); i++) {
result = new FriendsResult();
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.setName_pinyin(new TextUtil(mKXApplication)
.getStringPinYin(result.getName()));
if (!TextUtils.isEmpty(result.getName_pinyin())) {
result.setName_first(result.getName_pinyin()
.substring(0, 1).toUpperCase());
}
mFriendsResults.add(result);
}
mKXApplication.mFriendFriendsResults.put(uid, mFriendsResults);
} catch (Exception e) {
mFriendsResults = new ArrayList<FriendsResult>();
mDisplay.setVisibility(View.GONE);
mNoDisplay.setVisibility(View.VISIBLE);
}
}
}
private class FriendsAdapter extends BaseAdapter {
public int getCount() {
return mFriendsResults.size();
}
public Object getItem(int position) {
return mFriendsResults.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(FriendsActivity.this)
.inflate(R.layout.friends_activity_item, null);
holder = new ViewHolder();
holder.avatar = (ImageView) convertView
.findViewById(R.id.friends_item_avatar);
// padding为40dip,换算px值
int padding = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 40, FriendsActivity.this
.getResources().getDisplayMetrics());
// 设置显示头像的大小为屏幕宽度的1/4
LayoutParams params = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.width = (mScreenWidth - padding) / 4;
params.height = (mScreenWidth - padding) / 4;
holder.avatar.setLayoutParams(params);
holder.name = (TextView) convertView
.findViewById(R.id.friends_item_name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
FriendsResult result = mFriendsResults.get(position);
// holder.avatar.setImageBitmap(mKXApplication.getAvatar(result
// .getAvatar()));
ImageLoader.getInstance().displayImage(Constants.getImageUrl() + result.getAvatar(), holder.avatar, ImageUtil.getOption());
holder.name.setText(result.getName());
return convertView;
}
class ViewHolder {
ImageView avatar;
TextView name;
}
}
}