package com.ustc.dystu.dandelion;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
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.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.ustc.dystu.dandelion.bean.FansInfo;
import com.ustc.dystu.dandelion.bean.FootInfo;
import com.ustc.dystu.dandelion.constant.Constants;
import com.ustc.dystu.dandelion.fragment.BaseFragment;
import com.ustc.dystu.dandelion.net.DandRequestListener;
import com.ustc.dystu.dandelion.net.DandelionAPI;
import com.ustc.dystu.dandelion.utils.LocationTask;
import com.ustc.dystu.dandelion.utils.Logger;
import com.ustc.dystu.dandelion.utils.image.ImageCache;
import com.ustc.dystu.dandelion.utils.image.ImageFetcher;
import com.ustc.dystu.dandelion.view.NoScrollGridView;
public class FootprintActivity extends Activity {
private static final String TAG = FootprintActivity.class.getSimpleName();
private static final int REQUEST_GET_FOOT_LIST = 0x1;
ListView lvList;
TextView tvTitle;
ImageView ivBack;
ImageView ivRefresh;
ImageView ivMap;
ProgressBar pbRefresh;
private View mFootView;
ProgressBar footBar;
ArrayList<FootInfo> mFootList = new ArrayList<FootInfo>();
FootprintAdapter mAdapter;
private FansInfo mFansInfo;
private int mCurrentPage = 1;
private int mTotalNum;
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
pbRefresh.setVisibility(View.INVISIBLE);
ivRefresh.setVisibility(View.VISIBLE);
footBar.setVisibility(View.GONE);
switch (msg.what) {
case REQUEST_GET_FOOT_LIST:
if (msg.obj != null) {
ArrayList<FootInfo> list = (ArrayList<FootInfo>) msg.obj;
if (mCurrentPage == 1) {
mFootList.clear();
}
mFootList.addAll(list);
Logger.d(TAG, "total num-->" + mTotalNum);
if (mFootList.size() < mTotalNum) {
lvList.removeFooterView(mFootView);
lvList.addFooterView(mFootView);
} else {
lvList.removeFooterView(mFootView);
}
mCurrentPage++;
mAdapter.notifyDataSetChanged();
} else {
Toast.makeText(FootprintActivity.this, "足迹列表为空!",
Toast.LENGTH_SHORT).show();
}
break;
case BaseFragment.ERROR_RESPONSE:
if (msg.obj != null) {
Toast.makeText(FootprintActivity.this, (String) msg.obj,
Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_footprint);
lvList = (ListView) findViewById(R.id.list);
tvTitle = (TextView) findViewById(R.id.tv_title);
ivBack = (ImageView) findViewById(R.id.iv_back);
ivRefresh = (ImageView) findViewById(R.id.iv_refresh);
pbRefresh = (ProgressBar) findViewById(R.id.pb_refresh);
ivMap = (ImageView) findViewById(R.id.iv_map);
ivMap.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("footList", mFootList);
intent.setClass(FootprintActivity.this, FootMapActivity.class);
startActivity(intent);
}
});
mFootView = this.getLayoutInflater().inflate(
R.layout.friends_list_foot, null);
((TextView) mFootView.findViewById(R.id.tv_foot_view)).setText("更多");
footBar = (ProgressBar) mFootView.findViewById(R.id.pb_foot_refresh);
// footBar.setVisibility(View.GONE);
lvList.addFooterView(mFootView);
lvList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (position == mFootList.size()) {
Logger.d(TAG, "foot clicked!");
footBar.setVisibility(View.VISIBLE);
initList();
} else {
Logger.d(TAG, "item clicked-->" + position);
}
}
});
ivRefresh.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mCurrentPage = 1;
initList();
}
});
mAdapter = new FootprintAdapter();
lvList.setAdapter(mAdapter);
mFansInfo = (FansInfo) getIntent().getSerializableExtra("fans_info");
tvTitle.setText(mFansInfo.screen_name + "的足迹");
ivBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
initList();
}
private void initList() {
pbRefresh.setVisibility(View.VISIBLE);
ivRefresh.setVisibility(View.INVISIBLE);
DandelionAPI.getInstance(this).getLocationStatus(
new DandRequestListener(mHandler) {
@Override
public void onComplete(String response) {
Message msg = Message.obtain();
try {
if (TextUtils.isEmpty(response)
|| response.contains("error_code")) {
msg.what = BaseFragment.ERROR_RESPONSE;
JSONObject obj = new JSONObject(response);
msg.obj = obj.getString("error");
Logger.d(TAG, "error-->" + msg.obj);
} else {
Logger.d(TAG, "response-->" + response);
if (!response.equals("[]")) {
JSONObject obj = new JSONObject(response);
String total = obj.getString("total_number");
mTotalNum = Integer.parseInt(total);
if (mTotalNum > 0) {
JSONArray jsonArray = obj
.getJSONArray("statuses");
ArrayList<FootInfo> list = FootInfo
.create(jsonArray,
mFootList.size());
msg.obj = list;
}
}
msg.what = REQUEST_GET_FOOT_LIST;
}
mHandler.sendMessage(msg);
} catch (JSONException e) {
e.printStackTrace();
msg.what = BaseFragment.ERROR_RESPONSE;
msg.obj = "数据解析异常";
mHandler.sendMessage(msg);
}
}
}, mFansInfo.id, mCurrentPage);
}
class FootprintAdapter extends BaseAdapter {
private LocationTask locationUtils;
public FootprintAdapter() {
locationUtils = new LocationTask(FootprintActivity.this);
}
@Override
public int getCount() {
return mFootList.size();
}
@Override
public Object getItem(int position) {
return mFootList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = getLayoutInflater().inflate(
R.layout.list_item_foot, null);
holder = new ViewHolder();
holder.tvTime = (TextView) convertView
.findViewById(R.id.tv_time);
holder.tvLocation = (TextView) convertView
.findViewById(R.id.tv_location);
holder.gvPics = (NoScrollGridView) convertView
.findViewById(R.id.gv_pics);
holder.gvPics.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Integer pos = (Integer) parent.getTag();
Logger.d(TAG, "grid view item clicked!-->" + pos);
}
});
holder.tvText = (TextView) convertView
.findViewById(R.id.tv_text);
convertView.setTag(holder);
}
holder = (ViewHolder) convertView.getTag();
FootInfo info = mFootList.get(position);
holder.tvTime.setText(info.created_at);
if (!TextUtils.isEmpty(info.formate_loaction)) {
holder.tvLocation.setText(info.getFormatLoaciton());
} else {
holder.tvLocation.setText("");
locationUtils.loadLocation(info, holder.tvLocation);
}
holder.tvText.setText(info.text);
if (!TextUtils.isEmpty(info.bmiddle_pic)) {
holder.gvPics.setVisibility(View.VISIBLE);
holder.gvPics.setTag(position);
if (info.picIds != null && info.picIds.length>0) {
holder.gvPics.setAdapter(new PicAdapter(info.picIds,
FootprintActivity.this));
} else {
holder.gvPics.setVisibility(View.GONE);
}
} else {
holder.gvPics.setVisibility(View.GONE);
}
return convertView;
}
}
private static final class ViewHolder {
public TextView tvTime;
public TextView tvLocation;
public TextView tvText;
public NoScrollGridView gvPics;
}
public static class PicAdapter extends BaseAdapter {
String[] picIds;
private ImageFetcher mImageWorker;
Context ctx;
LayoutInflater inflater;
public PicAdapter(String[] picIds, Context ctx) {
this.picIds = picIds;
this.ctx = ctx;
mImageWorker = new ImageFetcher(ctx, 80);
mImageWorker.setImageCache(new ImageCache(ctx,
Constants.THUMNAIL_CACHE_SMALL_PATH));
mImageWorker.setLoadingImage(R.drawable.preview_card_pic_loading);
mImageWorker.setImageFadeIn(false);
inflater = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return picIds.length;
}
@Override
public String getItem(int position) {
return picIds[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item_foot_pic,
null);
ImageView ivPic = (ImageView) convertView
.findViewById(R.id.iv_pic);
convertView.setTag(ivPic);
}
ImageView ivPic = (ImageView) convertView.getTag();
mImageWorker.loadImage("http://ww1.sinaimg.cn/bmiddle/"
+ getItem(position) + ".jpg", ivPic,
R.drawable.preview_card_pic_loading, true);
return convertView;
}
}
}