package com.ustc.dystu.dandelion.fragment;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import android.app.ProgressDialog;
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.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
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.NoteDetailActivity;
import com.ustc.dystu.dandelion.R;
import com.ustc.dystu.dandelion.app.DandelionApplication;
import com.ustc.dystu.dandelion.bean.NearInfo;
import com.ustc.dystu.dandelion.constant.Constants;
import com.ustc.dystu.dandelion.net.DandelionAPI;
import com.ustc.dystu.dandelion.utils.LocationTask;
import com.ustc.dystu.dandelion.utils.image.ImageCache;
import com.ustc.dystu.dandelion.utils.image.ImageFetcher;
import com.ustc.dystu.dandelion.utils.image.Utils;
public class NearFragment extends BaseFragment {
private static final String TAG = NearFragment.class.getSimpleName();
private static final int REQUEST_GET_NEAR_LIST = 0x1;
ListView lvList;
ArrayList<NearInfo> mList = new ArrayList<NearInfo>();
FootAdapter mAdapter;
ImageView ivRefresh;
ImageView ivBack;
ProgressBar pbRefresh;
ProgressDialog pbProgress;
private TextView mEmptyView;
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
ivRefresh.setVisibility(View.VISIBLE);
pbRefresh.setVisibility(View.INVISIBLE);
if (pbProgress != null) {
pbProgress.dismiss();
}
switch (msg.what) {
case REQUEST_GET_NEAR_LIST:
if (msg.obj != null) {
ArrayList<NearInfo> list = (ArrayList<NearInfo>) msg.obj;
if (!list.isEmpty()) {
mList.clear();
mList.addAll(list);
Collections.sort(mList, comparator);
if (mList.isEmpty()) {
lvList.setEmptyView(mEmptyView);
}
lvList.setAdapter(mAdapter);
}
}
break;
case ERROR_RESPONSE:
if (msg.obj != null) {
Toast.makeText(getActivity(), (String) msg.obj,
Toast.LENGTH_SHORT).show();
}
if (mList.isEmpty()) {
lvList.setEmptyView(mEmptyView);
}
break;
default:
break;
}
}
};
Comparator<NearInfo> comparator = new Comparator<NearInfo>() {
@Override
public int compare(NearInfo lhs, NearInfo rhs) {
return lhs.footInfo.date.before(rhs.footInfo.date) ? 1 : -1;
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_near, null);
lvList = (ListView) view.findViewById(R.id.lv_list);
lvList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = new Intent();
intent.putExtra("near_info", mList.get(position));
intent.setClass(getActivity(), NoteDetailActivity.class);
startActivity(intent);
}
});
ivRefresh = (ImageView) view.findViewById(R.id.iv_refresh);
pbRefresh = (ProgressBar) view.findViewById(R.id.pb_refresh);
ivBack = (ImageView) view.findViewById(R.id.iv_back);
ivBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getActivity().finish();
}
});
ivRefresh.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
init();
}
});
mAdapter = new FootAdapter(getActivity());
lvList.setAdapter(mAdapter);
pbProgress = new ProgressDialog(getActivity());
pbProgress.setMessage("正在加载, 请稍候...");
pbProgress.setCanceledOnTouchOutside(false);
mEmptyView = new TextView(getActivity());
mEmptyView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
mEmptyView.setGravity(Gravity.CENTER);
mEmptyView.setTextColor(getResources().getColor(R.color.black));
mEmptyView.setText("没有在附近找到游记");
((ViewGroup) lvList.getParent()).addView(mEmptyView);
mEmptyView.setVisibility(View.GONE);
init();
return view;
}
private void init() {
ivRefresh.setVisibility(View.INVISIBLE);
pbRefresh.setVisibility(View.VISIBLE);
pbProgress.show();
new Thread() {
public void run() {
Message msg = Message.obtain();
ArrayList<NearInfo> data = DandelionAPI.getInstance(
getActivity()).getNearTravelNote(
DandelionApplication.latitude, DandelionApplication.longtitude);
if (data != null) {
msg.obj = data;
msg.what = REQUEST_GET_NEAR_LIST;
} else {
msg.what = BaseFragment.ERROR_RESPONSE;
msg.obj = "附近没有找到游记";
}
mHandler.sendMessage(msg);
};
}.start();
}
class FootAdapter extends BaseAdapter {
private LayoutInflater inflater;
private ImageFetcher mImageWorker;
private ImageFetcher mPortraitWorker;
private LocationTask locationUtils;
public FootAdapter(Context context) {
inflater = LayoutInflater.from(context);
int[] wh = Utils.getMidPicWidthAndHeight(getActivity());
mImageWorker = new ImageFetcher(context, wh[0], wh[1]);
mImageWorker.setImageCache(new ImageCache(context,
Constants.THUMNAIL_CACHE_PATH));
mImageWorker.setLoadingImage(R.drawable.share_public_headview_bg);
mImageWorker.setImageFadeIn(false);
mPortraitWorker = new ImageFetcher(getActivity(), 80);
mPortraitWorker.setImageCache(new ImageCache(getActivity(),
Constants.THUMNAIL_CACHE_PROFILE_PATH));
mPortraitWorker.setLoadingImage(R.drawable.icon_vdisk);
mPortraitWorker.setImageFadeIn(false);
locationUtils = new LocationTask(context);
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.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 = inflater.inflate(R.layout.list_item_near, null);
holder = new ViewHolder();
holder.ivPic = (ImageView) convertView
.findViewById(R.id.iv_icon);
holder.ivPortrait = (ImageView) convertView
.findViewById(R.id.iv_portrait);
holder.tvInfo = (TextView) convertView
.findViewById(R.id.tv_info);
holder.tvLocation = (TextView) convertView
.findViewById(R.id.tv_location);
holder.tvText = (TextView) convertView
.findViewById(R.id.tv_text);
holder.tvTime = (TextView) convertView
.findViewById(R.id.tv_time);
holder.tvScreenName = (TextView) convertView
.findViewById(R.id.tv_screen_name);
holder.tvPicNum = (TextView) convertView
.findViewById(R.id.tv_pic_num);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
NearInfo info = mList.get(position);
if (info.footInfo != null) {
// 微博图片
if (!TextUtils.isEmpty(info.footInfo.original_pic)) {
holder.ivPic.setVisibility(View.VISIBLE);
mImageWorker.loadImage(info.footInfo.original_pic,
holder.ivPic, R.drawable.share_public_headview_bg,
true);
} else {
holder.ivPic
.setImageResource(R.drawable.share_public_headview_bg);
holder.ivPic.setVisibility(View.GONE);
}
// 微博文本
holder.tvText.setText(info.footInfo.text);
holder.tvTime.setText(com.ustc.dystu.dandelion.utils.Utils
.getTimeBefore(info.footInfo.date));
// 位置信息
if (!TextUtils.isEmpty(info.footInfo.formate_loaction)) {
holder.tvLocation.setText(info.footInfo.getFormatLoaciton());
} else {
holder.tvLocation.setText("");
locationUtils
.loadLocation(info.footInfo, holder.tvLocation);
}
if (info.footInfo.picIds != null
&& info.footInfo.picIds.length > 1) {
holder.tvPicNum.setVisibility(View.VISIBLE);
holder.tvPicNum.setText(info.footInfo.picIds.length + "P");
} else {
holder.tvPicNum.setVisibility(View.GONE);
}
if (info.footInfo.userInfo != null) {
// 微博图片
if (!TextUtils
.isEmpty(info.footInfo.userInfo.profile_image_url)) {
mPortraitWorker.loadImage(
info.footInfo.userInfo.profile_image_url,
holder.ivPortrait, R.drawable.icon_vdisk, true);
} else {
holder.ivPortrait
.setImageResource(R.drawable.icon_vdisk);
}
holder.tvScreenName
.setText(info.footInfo.userInfo.screen_name);
holder.tvInfo.setText(String.format("在 \"%s\" 中添加了一条内容",
info.noteInfo.note_title));
}
}
return convertView;
}
}
private static class ViewHolder {
public ImageView ivPortrait;
public ImageView ivPic;
public TextView tvInfo;
public TextView tvScreenName;
public TextView tvTime;
public TextView tvText;
public TextView tvLocation;
public TextView tvPicNum;
}
}