package com.ustc.dystu.dandelion;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
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.PopupWindow;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.emilsjolander.components.stickylistheaders.StickyListHeadersAdapter;
import com.emilsjolander.components.stickylistheaders.StickyListHeadersListView;
import com.ustc.dystu.dandelion.bean.FootInfo;
import com.ustc.dystu.dandelion.bean.NoteInfo;
import com.ustc.dystu.dandelion.bean.UserInfo;
import com.ustc.dystu.dandelion.constant.Constants;
import com.ustc.dystu.dandelion.fragment.BaseFragment;
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.utils.image.RoundedImageView;
import com.ustc.dystu.dandelion.utils.image.Utils;
public class NoteInfoActivity extends Activity implements OnClickListener{
private static final String TAG = "NoteInfoActivity";
private static final int REQUEST_GET_NOTE_INFO = 0x1;
ImageView ivBack;
ImageView ivShareOrEdit;
ProgressBar pbProgress;
NoteInfo mNoteInfo;
ArrayList<FootInfo> mFootList = new ArrayList<FootInfo>();
FootListAdapter mAdapter;
ProgressDialog mProgress;
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Logger.d(TAG, "reciever messge");
NoteInfo info = (NoteInfo) intent.getSerializableExtra("note_info");
String action = intent.getAction();
if (action.equals(Constants.ACTION_EDIT_NOTE_SUCCESS)) {
if (info != null) {
tvNoteTitle.setText(info.note_title);
}
}
}
};
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
ivShareOrEdit.setVisibility(View.VISIBLE);
pbProgress.setVisibility(View.INVISIBLE);
if (mProgress != null) {
mProgress.dismiss();
}
switch (msg.what) {
case REQUEST_GET_NOTE_INFO:
prepareHeadId();
if (!mFootList.isEmpty()) {
updateHeaderView(mFootList.get(0).userInfo);
footerView.setVisibility(View.VISIBLE);
}
mAdapter.notifyDataSetChanged();
break;
case BaseFragment.ERROR_RESPONSE:
if (msg.obj != null) {
Toast.makeText(NoteInfoActivity.this, (String) msg.obj,
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(NoteInfoActivity.this, "网络异常",
Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
};
private StickyListHeadersListView mStickyList;
private PopupWindow mPopupWindow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_note_info);
mStickyList = (StickyListHeadersListView) findViewById(R.id.lv_sticky_list);
ivBack = (ImageView) findViewById(R.id.iv_back);
ivBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
ivShareOrEdit = (ImageView) findViewById(R.id.iv_share);
ivShareOrEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (isFromMe) {
// 从个人主页进来, 弹出编辑选项
if (mPopupWindow == null) {
View view = NoteInfoActivity.this.getLayoutInflater()
.inflate(R.layout.popup_note_edit, null, true);
view.findViewById(R.id.ll_change_folder)
.setOnClickListener(NoteInfoActivity.this);
view.findViewById(R.id.ll_change_title)
.setOnClickListener(NoteInfoActivity.this);
view.findViewById(R.id.ll_share).setOnClickListener(
NoteInfoActivity.this);
view.findViewById(R.id.ll_edit).setOnClickListener(
NoteInfoActivity.this);
mPopupWindow = new PopupWindow(view,
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, true);
mPopupWindow.setOutsideTouchable(true);
mPopupWindow
.setBackgroundDrawable(new BitmapDrawable());
}
mPopupWindow.showAsDropDown(v, 0, 0);
} else {
// 从精选过来, 刷新界面
// init();
com.ustc.dystu.dandelion.utils.Utils.share(NoteInfoActivity.this);
}
}
});
pbProgress = (ProgressBar) findViewById(R.id.pb_refresh);
mProgress = new ProgressDialog(this);
mProgress.setMessage("正在加载, 请稍候...");
mProgress.setCanceledOnTouchOutside(false);
Intent intent = getIntent();
mNoteInfo = (NoteInfo) intent.getSerializableExtra("note_info");
isFromMe = intent.getBooleanExtra("isfromMe", false);
if (isFromMe) {
ivShareOrEdit.setImageResource(R.drawable.btn_more_selector);
} else {
ivShareOrEdit.setImageResource(R.drawable.btn_share_selector);
}
View headerView = getLayoutInflater().inflate(
R.layout.header_note_info, null);
ivPortrait = (RoundedImageView) headerView
.findViewById(R.id.iv_portrait);
tvNoteTitle = (TextView) headerView.findViewById(R.id.tv_note_title);
tvNoteInfo = (TextView) headerView.findViewById(R.id.tv_note_info);
mStickyList.addHeaderView(headerView);
footerView = getLayoutInflater().inflate(R.layout.footer_note_info,
null);
mStickyList.addFooterView(footerView);
footerView.setVisibility(View.GONE);
mAdapter = new FootListAdapter();
mStickyList.setAdapter(mAdapter);
mStickyList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (position > 0 && position <= mFootList.size()) {
Intent intent = new Intent();
intent.putExtra("index", position - 1);
intent.putExtra("foot_list", mFootList);
intent.setClass(NoteInfoActivity.this,
NoteDetailActivity.class);
startActivity(intent);
}
}
});
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Constants.ACTION_EDIT_NOTE_SUCCESS);
this.registerReceiver(receiver, intentFilter);
init();
}
private void init() {
final String[] weiboIds = mNoteInfo.weiboIds;
if (weiboIds != null) {
ivShareOrEdit.setVisibility(View.INVISIBLE);
pbProgress.setVisibility(View.VISIBLE);
mProgress.show();
new Thread() {
public void run() {
ArrayList<FootInfo> weiboList = DandelionAPI.getInstance(
NoteInfoActivity.this).getWeiboInfo(weiboIds);
if (weiboList != null && !weiboList.isEmpty()) {
Collections.sort(weiboList, comparator);
mFootList.clear();
mFootList.addAll(weiboList);
mHandler.sendEmptyMessage(REQUEST_GET_NOTE_INFO);
} else {
mHandler.sendEmptyMessage(BaseFragment.ERROR_RESPONSE);
}
};
}.start();
}
}
private void updateHeaderView(UserInfo info) {
if (info != null && mNoteInfo != null) {
tvNoteTitle.setText(mNoteInfo.note_title);
tvNoteInfo.setText(mNoteInfo.getFormatNoteFromTime() + " "
+ mNoteInfo.getTotalDays());
ImageFetcher mImageWorker = new ImageFetcher(NoteInfoActivity.this,
200);
mImageWorker.setImageCache(new ImageCache(NoteInfoActivity.this,
Constants.THUMNAIL_CACHE_PROFILE_BIG_PATH));
mImageWorker.setLoadingImage(R.drawable.icon_vdisk);
mImageWorker.setImageFadeIn(false);
if (!TextUtils.isEmpty(info.profile_image_url)) {
String url = info.profile_image_url.replace("/50/", "/180/");
mImageWorker.loadImage(url, ivPortrait, R.drawable.icon_vdisk,
true);
} else {
ivPortrait.setImageResource(R.drawable.icon_vdisk);
}
}
}
class FootListAdapter extends BaseAdapter implements
StickyListHeadersAdapter {
private ImageFetcher mImageWorker;
private LocationTask locationUtils;
public FootListAdapter() {
int[] wh = Utils.getMidPicWidthAndHeight(NoteInfoActivity.this);
mImageWorker = new ImageFetcher(NoteInfoActivity.this, wh[0], wh[1]);
mImageWorker.setImageCache(new ImageCache(NoteInfoActivity.this,
Constants.THUMNAIL_CACHE_PATH));
mImageWorker.setLoadingImage(R.drawable.share_public_headview_bg);
mImageWorker.setImageFadeIn(false);
locationUtils = new LocationTask(NoteInfoActivity.this);
}
@Override
public int getCount() {
return mFootList.size();
}
@Override
public FootInfo 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_note_info, null);
holder = new ViewHolder();
holder.tvLocation = (TextView) convertView
.findViewById(R.id.tv_location);
holder.ivIcon = (ImageView) convertView
.findViewById(R.id.iv_icon);
holder.tvText = (TextView) convertView
.findViewById(R.id.tv_text);
holder.tvTime = (TextView) convertView
.findViewById(R.id.tv_time);
holder.tvPicNum = (TextView) convertView
.findViewById(R.id.tv_pic_num);
holder.rlIcon = (RelativeLayout) convertView
.findViewById(R.id.rl_icon);
convertView.setTag(holder);
}
holder = (ViewHolder) convertView.getTag();
FootInfo info = mFootList.get(position);
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);
holder.tvTime.setText(info.getDetailFormatTime());
if (!TextUtils.isEmpty(info.original_pic)) {
holder.rlIcon.setVisibility(View.VISIBLE);
mImageWorker.loadImage(info.original_pic, holder.ivIcon, true);
} else {
holder.rlIcon.setVisibility(View.GONE);
}
if (info.picIds != null && info.picIds.length > 1) {
holder.tvPicNum.setVisibility(View.VISIBLE);
holder.tvPicNum.setText(info.picIds.length + "P");
} else {
holder.tvPicNum.setVisibility(View.INVISIBLE);
}
return convertView;
}
@Override
public View getHeaderView(int position, View convertView,
ViewGroup parent) {
HeaderViewHolder holder;
if (convertView == null) {
holder = new HeaderViewHolder();
convertView = getLayoutInflater().inflate(
R.layout.head_item_note_info, parent, false);
holder.tvHeaderNum = (TextView) convertView
.findViewById(R.id.tv_num);
holder.tvHeaderTime = (TextView) convertView
.findViewById(R.id.tv_time);
convertView.setTag(holder);
} else {
holder = (HeaderViewHolder) convertView.getTag();
}
Date firstDay = mFootList.get(0).date;
Date currentDay = mFootList.get(position).date;
holder.tvHeaderNum.setText(FootInfo.getTimeSort(firstDay,
currentDay));
holder.tvHeaderTime.setText(getItem(position).getFormatTime());
return convertView;
}
@Override
public long getHeaderId(int position) {
return getItem(position).headerId;
}
}
class ViewHolder {
public TextView tvTime;
public TextView tvLocation;
public TextView tvText;
public TextView tvPicNum;
public ImageView ivIcon;
public RelativeLayout rlIcon;
}
class HeaderViewHolder {
TextView tvHeaderNum;
TextView tvHeaderTime;
}
Comparator<FootInfo> comparator = new Comparator<FootInfo>() {
@Override
public int compare(FootInfo lhs, FootInfo rhs) {
BigInteger lid = new BigInteger(lhs.id);
BigInteger rid = new BigInteger(rhs.id);
return lid.compareTo(rid);
}
};
private boolean isFromMe;
private RoundedImageView ivPortrait;
private TextView tvNoteTitle;
private TextView tvNoteInfo;
private View footerView;
private void prepareHeadId() {
FootInfo preInfo = null;
int currentHeaderId = 0;
int size = mFootList.size();
for (int i = 0; i < size; i++) {
FootInfo info = mFootList.get(i);
if (preInfo != null) {
if (!info.created_at.equals(preInfo.created_at)) {
currentHeaderId = i;
}
}
preInfo = info;
info.headerId = currentHeaderId;
}
}
@Override
public void onClick(View v) {
if (mPopupWindow != null) {
mPopupWindow.dismiss();
}
switch (v.getId()) {
case R.id.ll_change_folder:
if (hasPics()) {
Intent intent2 = new Intent();
intent2.putExtra("foot_list", mFootList);
intent2.putExtra("note_info", mNoteInfo);
intent2.setClass(this, FolderEditActivity.class);
startActivity(intent2);
} else {
Toast.makeText(this, "没有找到可供编辑的图片", Toast.LENGTH_SHORT).show();
}
break;
case R.id.ll_change_title:
Intent intent = new Intent();
intent.setClass(this, EditNoteTitleActivity.class);
intent.putExtra("note_info", mNoteInfo);
startActivity(intent);
break;
case R.id.ll_share:
com.ustc.dystu.dandelion.utils.Utils.share(this);
break;
case R.id.ll_edit:
break;
default:
break;
}
}
private boolean hasPics() {
for (FootInfo info : mFootList) {
if (info.picIds != null && info.picIds.length > 0) {
return true;
}
}
return false;
}
@Override
protected void onDestroy() {
this.unregisterReceiver(receiver);
super.onDestroy();
}
}