package com.jasonchen.microlang.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.support.v4.app.Fragment;
import android.text.ClipboardManager;
import android.text.TextPaint;
import android.text.TextUtils;
import android.util.LongSparseArray;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.GridLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.jasonchen.microlang.R;
import com.jasonchen.microlang.activitys.UserActivity;
import com.jasonchen.microlang.activitys.WeiboDetailActivity;
import com.jasonchen.microlang.activitys.WriteCommentActivity;
import com.jasonchen.microlang.activitys.WriteRepostActivity;
import com.jasonchen.microlang.beans.FavBean;
import com.jasonchen.microlang.beans.MessageBean;
import com.jasonchen.microlang.beans.UserBean;
import com.jasonchen.microlang.dao.DestroyStatusDao;
import com.jasonchen.microlang.dao.FavDao;
import com.jasonchen.microlang.database.FriendsTimeLineDBTask;
import com.jasonchen.microlang.exception.WeiboException;
import com.jasonchen.microlang.gallery.GalleryAnimationActivity;
import com.jasonchen.microlang.interfaces.IPictureWorker;
import com.jasonchen.microlang.interfaces.ISimRayDrawable;
import com.jasonchen.microlang.swiperefresh.LoadListView;
import com.jasonchen.microlang.tasks.MyAsyncTask;
import com.jasonchen.microlang.utils.AnimationRect;
import com.jasonchen.microlang.utils.GlobalContext;
import com.jasonchen.microlang.utils.HackyMovementMethod;
import com.jasonchen.microlang.utils.SettingUtility;
import com.jasonchen.microlang.utils.TimeLineUtility;
import com.jasonchen.microlang.utils.Utility;
import com.jasonchen.microlang.utils.ViewUtility;
import com.jasonchen.microlang.utils.file.FileLocationMethod;
import com.jasonchen.microlang.view.HackyTextView;
import com.jasonchen.microlang.view.TimeLineAvatarImageView;
import com.jasonchen.microlang.view.TimeLineImageView;
import com.jasonchen.microlang.view.TimeLineRoundAvatarImageView;
import com.jasonchen.microlang.view.TimeTextView;
import com.jasonchen.microlang.workers.PictureBitmapDrawable;
import com.jasonchen.microlang.workers.TimeLineBitmapDownloader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import me.drakeet.materialdialog.MaterialDialog;
/**
* jasonchen
* 2015/04/10
*/
public class TimeLineAdapter extends BaseAdapter {
public static final int NO_ITEM_ID = -1;
private static final int REQUEST_LIST_SIMPLE = 9;
private Set<Integer> tagIndexList = new HashSet<Integer>();
protected boolean showOriStatus = true;
private boolean isFling = false;
private List<MessageBean> list;
private Context context;
private Fragment fragment;
private LoadListView listView;
private LayoutInflater inflater;
private DestroyStatusTask destroyStatusTask;
private FavTask favTask = null;
private UnFavTask unFavTask = null;
@SuppressLint("NewApi")
private LongSparseArray<Integer> msgHeights = new LongSparseArray<Integer>();
@SuppressLint("NewApi")
private LongSparseArray<Integer> msgWidths = new LongSparseArray<Integer>();
@SuppressLint("NewApi")
private LongSparseArray<Integer> oriMsgHeights = new LongSparseArray<Integer>();
@SuppressLint("NewApi")
private LongSparseArray<Integer> oriMsgWidths = new LongSparseArray<Integer>();
public TimeLineAdapter(Fragment fragment, LoadListView listView,
List<MessageBean> list) {
super();
this.list = list;
this.context = fragment.getActivity();
this.fragment = fragment;
this.listView = listView;
this.inflater = getActivity().getLayoutInflater();
listView.setRecyclerListener(
new AbsListView.RecyclerListener() {
@Override
public void onMovedToScrapHeap(View view) {
Integer index = (Integer) view
.getTag(R.string.listview_index_tag);
if (index == null) {
return;
}
for (Integer tag : tagIndexList) {
ViewHolder holder = (ViewHolder) view.getTag(tag);
if (holder != null) {
Drawable drawable = holder.avatar
.getImageView().getDrawable();
clearAvatarBitmap(holder, drawable);
drawable = holder.content_pic.getImageView()
.getDrawable();
clearPictureBitmap(holder, drawable);
drawable = holder.repost_content_pic
.getImageView().getDrawable();
clearRepostPictureBitmap(holder, drawable);
clearMultiPics(holder.content_pic_multi);
clearMultiPics(holder.repost_content_pic_multi);
if (!tag.equals(index)) {
holder.root.removeAllViewsInLayout();
holder.root = null;
view.setTag(tag, null);
}
}
}
}
void clearMultiPics(GridLayout gridLayout) {
if (gridLayout == null) {
return;
}
for (int i = 0; i < gridLayout.getChildCount(); i++) {
ImageView iv = (ImageView) gridLayout.getChildAt(i);
if (iv != null) {
iv.setImageDrawable(null);
}
}
}
void clearAvatarBitmap(ViewHolder holder, Drawable drawable) {
if (!(drawable instanceof PictureBitmapDrawable)) {
holder.avatar.setImageDrawable(null);
holder.avatar.getImageView().clearAnimation();
}
holder.avatar.setImageDrawable(null);
holder.avatar.getImageView().clearAnimation();
}
void clearPictureBitmap(ViewHolder holder, Drawable drawable) {
if (!(drawable instanceof PictureBitmapDrawable)) {
holder.content_pic.setImageDrawable(null);
holder.content_pic.getImageView().clearAnimation();
}
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.content_pic.getLayoutParams();
params.height = Utility.dip2px(157);
params.width = Utility.dip2px(157);
holder.content_pic.getImageView().setScaleType(ImageView.ScaleType.FIT_XY);
holder.content_pic.setLayoutParams(params);
holder.content_pic.setImageDrawable(getActivity().getResources().getDrawable(R.color.gainsboro));
}
void clearRepostPictureBitmap(ViewHolder holder,
Drawable drawable) {
if (!(drawable instanceof PictureBitmapDrawable)) {
holder.repost_content_pic.setImageDrawable(null);
holder.repost_content_pic.getImageView()
.clearAnimation();
}
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.repost_content_pic.getLayoutParams();
params.height = Utility.dip2px(157);
params.width = Utility.dip2px(157);
holder.repost_content_pic.getImageView().setScaleType(ImageView.ScaleType.FIT_XY);
holder.repost_content_pic.setLayoutParams(params);
holder.repost_content_pic.setImageDrawable(getActivity().getResources().getDrawable(R.color.gainsboro));
}
});
}
protected android.support.v4.app.FragmentActivity getActivity() {
return fragment.getActivity();
}
public void setList(List<MessageBean> list) {
this.list = list;
}
@Override
public int getCount() {
if (getList() != null) {
return list.size();
} else {
return 0;
}
}
public List<MessageBean> getList() {
return list;
}
@Override
public Object getItem(int position) {
if (position >= 0 && getList() != null && getList().size() > 0
&& position < getList().size()) {
return getList().get(position);
}
return null;
}
@Override
public long getItemId(int position) {
if (getList() != null && getList().get(position) != null
&& getList().size() > 0 && position < getList().size()) {
return Long.valueOf(getList().get(position).getId());
} else {
return NO_ITEM_ID;
}
}
@SuppressLint("ViewHolder")
@SuppressWarnings("null")
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = new ViewHolder();
int itemViewType = getItemViewType(position);
if (convertView == null || convertView.getTag(R.drawable.ic_launcher + itemViewType) == null) {
convertView = inflater.inflate(
R.layout.timeline_normal_layout, parent, false);
//msg layout
holder.username = ViewUtility.findViewById(convertView,
R.id.username);
TextPaint tp = holder.username.getPaint();
if (tp != null) {
tp.setFakeBoldText(true);
}
holder.root = ViewUtility.findViewById(convertView, R.id.root);
holder.avatar = ViewUtility.findViewById(convertView, R.id.avatar);
holder.repost_content = ViewUtility.findViewById(convertView,
R.id.repost_content);
holder.time = ViewUtility.findViewById(convertView, R.id.time);
holder.source = ViewUtility.findViewById(convertView, R.id.source);
holder.more = ViewUtility.findViewById(convertView, R.id.more);
holder.content = ViewUtility
.findViewById(convertView, R.id.content);
holder.content_pic = ViewUtility.findViewById(convertView, R.id.content_pic);
holder.content_pic_multi = ViewUtility.findViewById(convertView, R.id.content_pic_multi);
holder.repost_count = ViewUtility.findViewById(convertView, R.id.repost_count);
holder.comment_count = ViewUtility.findViewById(convertView, R.id.comment_count);
//repost msg layout
holder.repost_layout = ViewUtility.findViewById(convertView, R.id.repost_layout);
holder.repost_content = ViewUtility.findViewById(convertView, R.id.repost_content);
holder.repost_content_pic = (TimeLineImageView) convertView
.findViewById(R.id.repost_content_pic);
holder.repost_content_pic_multi = ViewUtility.findViewById(
convertView, R.id.repost_content_pic_multi);
holder.repost_msg_repost_count = ViewUtility.findViewById(convertView,
R.id.repost_msg_repost_count);
holder.repost_msg_comment_count = ViewUtility.findViewById(convertView,
R.id.repost_msg_comment_count);
holder.pic = ViewUtility.findViewById(convertView, R.id.pic);
//set tag for convertview
convertView.setTag(R.drawable.ic_launcher + getItemViewType(position), holder);
convertView.setTag(R.string.listview_index_tag,
R.drawable.ic_launcher + getItemViewType(position));
tagIndexList.add(R.drawable.ic_launcher + getItemViewType(position));
} else {
holder = (ViewHolder) convertView
.getTag(R.drawable.ic_launcher + getItemViewType(position));
}
configViewFont(holder);
bindViewData(holder, position);
return convertView;
}
@SuppressLint("NewApi")
private void bindViewData(final ViewHolder holder, final int position) {
final MessageBean msg = list.get(position);
UserBean user = msg.getUser();
holder.root.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
fragment.startActivityForResult(
WeiboDetailActivity.newIntent(getActivity(), GlobalContext.getInstance().getAccountBean(), list.get(position), GlobalContext.getInstance().getSpecialToken()), 1);
getActivity().overridePendingTransition(
R.anim.push_left_in, R.anim.stay);
}
});
holder.more.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final PopupMenu popupMenu = new PopupMenu(getActivity(), holder.more);
popupMenu.inflate(R.menu.menu_timeline_item);
Menu menu = popupMenu.getMenu();
if (GlobalContext.getInstance().getAccountBean().getUid().equals(msg.getUser().getId())) {
menu.findItem(R.id.delete).setVisible(true);
}
if (msg.isFavorited()) {
menu.findItem(R.id.unfav).setVisible(true);
} else {
menu.findItem(R.id.fav).setVisible(true);
}
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
int id = item.getItemId();
Intent intent = null;
if (id == R.id.copy) {
ClipboardManager cmb = (ClipboardManager) getActivity().getSystemService(getActivity().CLIPBOARD_SERVICE);
cmb.setText(msg.getText().toString());
Toast.makeText(getActivity(), getActivity().getString(R.string.copy_successfully), Toast.LENGTH_SHORT).show();
} else if (id == R.id.fav) {
if (Utility.isTaskStopped(favTask) && Utility.isTaskStopped(unFavTask)) {
favTask = new FavTask(getActivity(), position);
favTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
}
} else if (id == R.id.unfav) {
if (Utility.isTaskStopped(favTask) && Utility.isTaskStopped(unFavTask)) {
unFavTask = new UnFavTask(getActivity(), position);
unFavTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
}
} else if (id == R.id.repost) {
intent = WriteRepostActivity.newIntent(getActivity(), GlobalContext.getInstance().getAccountBean(), msg, GlobalContext.getInstance().getSpecialToken());
getActivity().startActivity(intent);
} else if (id == R.id.comment) {
intent = WriteCommentActivity.newIntent(getActivity(), GlobalContext.getInstance().getAccountBean(), msg, GlobalContext.getInstance().getSpecialToken());
getActivity().startActivity(intent);
} else if (id == R.id.delete) {
final MaterialDialog alertDeleteDialog = new MaterialDialog(getActivity());
alertDeleteDialog.setTitle(getActivity().getString(R.string.notice)).setMessage(getActivity().getString(R.string.delete_status));
alertDeleteDialog.setPositiveButton(getActivity().getString(R.string.confirm), new OnClickListener() {
@Override
public void onClick(View v) {
destroyStatusTask = new DestroyStatusTask(context, position);
destroyStatusTask
.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
alertDeleteDialog.dismiss();
}
}).setNegativeButton(getActivity().getString(R.string.cancel), new OnClickListener() {
@Override
public void onClick(View v) {
alertDeleteDialog.dismiss();
}
}).show();
}
return true;
}
});
popupMenu.show();
}
});
if (user != null) {
holder.username.setVisibility(View.VISIBLE);
if (!TextUtils.isEmpty(user.getRemark())) {
holder.username
.setText(new StringBuilder(user.getScreen_name())
.append("(").append(user.getRemark())
.append(")").toString());
} else {
holder.username.setText(user.getScreen_name());
}
holder.avatar.checkVerified(user);
buildAvatar(holder.avatar, position, user);
} else {
holder.username.setVisibility(View.INVISIBLE);
holder.avatar.setVisibility(View.INVISIBLE);
}
if (!TextUtils.isEmpty(msg.getListViewSpannableString())) {
boolean haveCachedHeight = msgHeights.get(msg.getIdLong()) != null;
LayoutParams layoutParams = holder.content
.getLayoutParams();
if (haveCachedHeight) {
layoutParams.height = msgHeights.get(msg.getIdLong());
} else {
layoutParams.height = LayoutParams.WRAP_CONTENT;
}
boolean haveCachedWidth = msgWidths.get(msg.getIdLong()) != null;
if (haveCachedWidth) {
layoutParams.width = msgWidths.get(msg.getIdLong());
} else {
layoutParams.width = LayoutParams.WRAP_CONTENT;
}
holder.content.requestLayout();
holder.content.setText(msg.getListViewSpannableString());
if (!haveCachedHeight) {
msgHeights.append(msg.getIdLong(), layoutParams.height);
}
if (!haveCachedWidth) {
msgWidths.append(msg.getIdLong(), layoutParams.width);
}
} else {
TimeLineUtility.addJustHighLightLinks(msg);
holder.content.setText(msg.getListViewSpannableString());
}
holder.content.setMovementMethod(HackyMovementMethod.getInstance());
holder.time.setTime(msg.getMills());
if (holder.source != null) {
holder.source.setText(msg.getSourceString());
}
if (showOriStatus) {
boolean checkRepostsCount = (msg.getReposts_count() != 0);
boolean checkCommentsCount = (msg.getComments_count() != 0);
if (checkRepostsCount) {
holder.repost_count.setText(String.valueOf(msg
.getRepostscountString()));
holder.repost_count.setVisibility(View.VISIBLE);
} else {
holder.repost_count.setText("0");
holder.repost_count.setVisibility(View.VISIBLE);
}
if (checkCommentsCount) {
holder.comment_count.setText(String.valueOf(msg
.getCommentscountString()));
holder.comment_count.setVisibility(View.VISIBLE);
} else {
holder.comment_count.setText("0");
holder.comment_count.setVisibility(View.VISIBLE);
}
}
holder.repost_layout.setVisibility(View.GONE);
final MessageBean repost_msg = msg.getRetweeted_status();
if (!SettingUtility.getIntelligencePic()) {
if (msg.havePicture()) {
if (msg.isMultiPics()) {
buildMultiPic(msg, holder.content_pic_multi);
holder.content_pic.setVisibility(View.GONE);
} else {
buildPic(msg, holder.content_pic, position);
holder.content_pic_multi.setVisibility(View.GONE);
}
} else {
holder.content_pic.setVisibility(View.GONE);
holder.content_pic_multi.setVisibility(View.GONE);
}
holder.pic.setVisibility(View.GONE);
} else {
if (Utility.isWifi(getActivity())) {
if (msg.havePicture()) {
if (msg.isMultiPics()) {
buildMultiPic(msg, holder.content_pic_multi);
holder.content_pic.setVisibility(View.GONE);
} else {
buildPic(msg, holder.content_pic, position);
holder.content_pic_multi.setVisibility(View.GONE);
}
} else {
holder.content_pic.setVisibility(View.GONE);
holder.content_pic_multi.setVisibility(View.GONE);
}
} else {
if(msg.havePicture() || (repost_msg != null && repost_msg.havePicture())){
holder.pic.setVisibility(View.VISIBLE);
}else{
holder.pic.setVisibility(View.GONE);
}
holder.content_pic.setVisibility(View.GONE);
holder.content_pic_multi.setVisibility(View.GONE);
}
}
if (repost_msg != null && showOriStatus) {
if (holder.repost_layout != null) {
holder.repost_layout.setVisibility(View.VISIBLE);
}
if (holder.content_pic.getVisibility() != View.GONE) {
holder.content_pic.setVisibility(View.GONE);
}
if (holder.content_pic_multi.getVisibility() != View.GONE) {
holder.content_pic_multi.setVisibility(View.GONE);
}
buildRepostContent(msg, repost_msg, holder, position);
} else {
if (holder.repost_layout != null) {
holder.repost_layout.setVisibility(View.GONE);
}
}
boolean interruptPic = false;
boolean interruptMultiPic = false;
boolean interruptRepostPic = false;
boolean interruptRepostMultiPic = false;
if (msg.havePicture()) {
if (msg.isMultiPics()) {
interruptPic = true;
} else {
interruptMultiPic = true;
}
}
if (repost_msg != null && showOriStatus) {
if (repost_msg.havePicture()) {
if (repost_msg.isMultiPics()) {
interruptRepostPic = true;
} else {
interruptRepostMultiPic = true;
}
}
}
if (interruptPic) {
interruptPicDownload(holder.content_pic);
}
if (interruptMultiPic) {
interruptPicDownload(holder.content_pic_multi);
}
if (interruptRepostPic) {
interruptPicDownload(holder.repost_content_pic);
}
if (interruptRepostMultiPic) {
interruptPicDownload(holder.repost_content_pic_multi);
}
}
public void setIsFling(boolean isFling) {
this.isFling = isFling;
}
protected void interruptPicDownload(GridLayout gridLayout) {
for (int i = 0; i < gridLayout.getChildCount(); i++) {
ImageView iv = (ImageView) gridLayout.getChildAt(i);
if (iv != null) {
Drawable drawable = iv.getDrawable();
if (drawable instanceof PictureBitmapDrawable) {
PictureBitmapDrawable downloadedDrawable = (PictureBitmapDrawable) drawable;
IPictureWorker worker = downloadedDrawable
.getBitmapDownloaderTask();
if (worker != null) {
((MyAsyncTask) worker).cancel(true);
}
iv.setImageDrawable(null);
}
}
}
}
protected void interruptPicDownload(ISimRayDrawable view) {
Drawable drawable = view.getImageView().getDrawable();
if (drawable instanceof PictureBitmapDrawable) {
PictureBitmapDrawable downloadedDrawable = (PictureBitmapDrawable) drawable;
IPictureWorker worker = downloadedDrawable
.getBitmapDownloaderTask();
if (worker != null) {
((MyAsyncTask) worker).cancel(true);
}
}
view.getImageView().setImageDrawable(null);
}
@SuppressLint("NewApi")
private void buildRepostContent(MessageBean msg,
final MessageBean repost_msg, ViewHolder holder, int position) {
holder.repost_layout.setVisibility(View.VISIBLE);
if (!repost_msg.getId().equals((String) holder.repost_content.getTag())) {
boolean haveCachedHeight = oriMsgHeights.get(msg.getIdLong()) != null;
LayoutParams layoutParams = holder.repost_content
.getLayoutParams();
if (haveCachedHeight) {
layoutParams.height = oriMsgHeights.get(msg.getIdLong());
} else {
layoutParams.height = LayoutParams.WRAP_CONTENT;
}
boolean haveCachedWidth = oriMsgWidths.get(msg.getIdLong()) != null;
if (haveCachedWidth) {
layoutParams.width = oriMsgWidths.get(msg.getIdLong());
} else {
layoutParams.width = LayoutParams.WRAP_CONTENT;
}
holder.repost_content.requestLayout();
holder.repost_content.setText(repost_msg
.getListViewSpannableString());
if (!haveCachedHeight) {
oriMsgHeights.append(msg.getIdLong(), layoutParams.height);
}
if (!haveCachedWidth) {
oriMsgWidths.append(msg.getIdLong(), layoutParams.width);
}
holder.repost_content.setText(repost_msg
.getListViewSpannableString());
holder.repost_content.setTag(repost_msg.getId());
} else {
holder.repost_content.setText(repost_msg
.getListViewSpannableString());
}
holder.repost_content.setMovementMethod(HackyMovementMethod.getInstance());
holder.repost_msg_repost_count.setText("" + repost_msg.getRepostscountString());
holder.repost_msg_comment_count.setText("" + repost_msg.getCommentscountString());
if (SettingUtility.getIntelligencePic()) {
if (Utility.isWifi(getActivity())) {
if (repost_msg.havePicture()) {
if (repost_msg.isMultiPics()) {
buildMultiPic(repost_msg, holder.repost_content_pic_multi);
holder.repost_content_pic.setVisibility(View.GONE);
} else {
buildPic(repost_msg, holder.repost_content_pic, position);
holder.repost_content_pic_multi.setVisibility(View.GONE);
}
} else {
holder.repost_content_pic.setVisibility(View.GONE);
holder.repost_content_pic_multi.setVisibility(View.GONE);
}
} else {
holder.repost_content_pic.setVisibility(View.GONE);
holder.repost_content_pic_multi.setVisibility(View.GONE);
}
} else {
if (repost_msg.havePicture()) {
if (repost_msg.isMultiPics()) {
buildMultiPic(repost_msg, holder.repost_content_pic_multi);
holder.repost_content_pic.setVisibility(View.GONE);
} else {
buildPic(repost_msg, holder.repost_content_pic, position);
holder.repost_content_pic_multi.setVisibility(View.GONE);
}
} else {
holder.repost_content_pic.setVisibility(View.GONE);
holder.repost_content_pic_multi.setVisibility(View.GONE);
}
}
}
protected void buildAvatar(TimeLineRoundAvatarImageView view, int position,
final UserBean user) {
view.setVisibility(View.VISIBLE);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = UserActivity.newIntent(getActivity(), user);
getActivity().startActivity(intent);
getActivity().overridePendingTransition(R.anim.push_left_in, R.anim.stay);
}
});
view.checkVerified(user);
buildAvatar(view.getImageView(), position, user);
}
protected void buildAvatar(ImageView view, int position, final UserBean user) {
String image_url = user.getProfile_image_url();
if (!TextUtils.isEmpty(image_url)) {
view.setVisibility(View.VISIBLE);
LayoutParams params = view.getLayoutParams();
TimeLineBitmapDownloader.getInstance().downloadAvatar(view, user, false);
} else {
view.setVisibility(View.GONE);
}
}
protected void buildMultiPic(final MessageBean msg,
final GridLayout gridLayout) {
if (SettingUtility.isEnablePic()) {
gridLayout.setVisibility(View.VISIBLE);
final int count = msg.getPicCount();
for (int i = 0; i < count; i++) {
final ISimRayDrawable pic = (ISimRayDrawable) gridLayout
.getChildAt(i);
pic.setVisibility(View.VISIBLE);
TimeLineBitmapDownloader.getInstance().displayMultiPicture(
pic, msg.getThumbnailPicUrls().get(i),
FileLocationMethod.picture_thumbnail, isFling);
//}
final int finalI = i;
pic.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ArrayList<AnimationRect> animationRectArrayList = new ArrayList<AnimationRect>();
for (int i = 0; i < count; i++) {
final ISimRayDrawable pic = (ISimRayDrawable) gridLayout
.getChildAt(i);
ImageView imageView = (ImageView) pic;
if (imageView.getVisibility() == View.VISIBLE) {
AnimationRect rect = AnimationRect
.buildFromImageView(imageView);
animationRectArrayList.add(rect);
}
}
Intent intent = GalleryAnimationActivity.newIntent(msg,
animationRectArrayList, finalI);
getActivity().startActivity(intent);
}
});
}
if (count < 9) {
ImageView pic;
switch (count) {
case 8:
pic = (ImageView) gridLayout.getChildAt(8);
pic.setVisibility(View.INVISIBLE);
break;
case 7:
for (int i = 8; i > 6; i--) {
pic = (ImageView) gridLayout.getChildAt(i);
pic.setVisibility(View.INVISIBLE);
}
break;
case 6:
for (int i = 8; i > 5; i--) {
pic = (ImageView) gridLayout.getChildAt(i);
pic.setVisibility(View.GONE);
}
break;
case 5:
for (int i = 8; i > 5; i--) {
pic = (ImageView) gridLayout.getChildAt(i);
pic.setVisibility(View.GONE);
}
pic = (ImageView) gridLayout.getChildAt(5);
pic.setVisibility(View.INVISIBLE);
break;
case 4:
for (int i = 8; i > 5; i--) {
pic = (ImageView) gridLayout.getChildAt(i);
pic.setVisibility(View.GONE);
}
pic = (ImageView) gridLayout.getChildAt(5);
pic.setVisibility(View.INVISIBLE);
pic = (ImageView) gridLayout.getChildAt(4);
pic.setVisibility(View.INVISIBLE);
break;
case 3:
for (int i = 8; i > 2; i--) {
pic = (ImageView) gridLayout.getChildAt(i);
pic.setVisibility(View.GONE);
}
break;
case 2:
for (int i = 8; i > 2; i--) {
pic = (ImageView) gridLayout.getChildAt(i);
pic.setVisibility(View.GONE);
}
pic = (ImageView) gridLayout.getChildAt(2);
pic.setVisibility(View.INVISIBLE);
break;
}
}
} else {
gridLayout.setVisibility(View.GONE);
}
}
protected void buildPic(final MessageBean msg, final TimeLineImageView view,
int position) {
if (SettingUtility.isEnablePic()) {
view.setVisibility(View.VISIBLE);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ImageView imageView = view.getImageView();
AnimationRect rect = AnimationRect
.buildFromImageView(imageView);
ArrayList<AnimationRect> animationRectArrayList = new ArrayList<AnimationRect>();
animationRectArrayList.add(rect);
Intent intent = GalleryAnimationActivity.newIntent(msg,
animationRectArrayList, 0);
getActivity().startActivity(intent);
}
});
buildPic(msg, view);
} else {
view.setVisibility(View.GONE);
}
}
private void buildPic(final MessageBean msg, TimeLineImageView view) {
view.setVisibility(View.VISIBLE);
TimeLineBitmapDownloader.getInstance().downContentPic(view, msg,
isFling);
}
public static class ViewHolder {
LinearLayout root;
TextView username;
HackyTextView content;
TimeTextView time;
TextView source;
TextView repost_count;
TextView comment_count;
ImageView more;
TimeLineRoundAvatarImageView avatar;
TimeLineImageView content_pic;
GridLayout content_pic_multi;
LinearLayout repost_layout;
HackyTextView repost_content;
TimeLineImageView repost_content_pic;
GridLayout repost_content_pic_multi;
TextView repost_msg_repost_count;
TextView repost_msg_comment_count;
ImageView pic;
}
private class FavTask extends MyAsyncTask<Void, Void, FavBean> {
int position;
FavBean favBean = null;
Context context;
private FavTask(Context context, int position) {
this.context = context;
this.position = position;
}
@Override
protected FavBean doInBackground(Void... params) {
FavDao dao = new FavDao(GlobalContext.getInstance().getSpecialToken(), list.get(position).getId());
try {
favBean = dao.favIt();
} catch (WeiboException e) {
e.printStackTrace();
}
return favBean;
}
@Override
protected void onPostExecute(FavBean favBean) {
super.onPostExecute(favBean);
if (favBean != null) {
Toast.makeText(context, getActivity().getResources().getString(R.string.favorite_success), Toast.LENGTH_SHORT).show();
MessageBean bean = list.get(position);
bean.setFavorited(true);
list.remove(position);
list.add(position, bean);
FriendsTimeLineDBTask.asyncUpdateMsg(list.get(position).getId(), true);
}
}
}
private class UnFavTask extends MyAsyncTask<Void, Void, FavBean> {
int position;
FavBean favBean = null;
Context context;
WeiboException e;
private UnFavTask(Context context, int position) {
this.context = context;
this.position = position;
}
@Override
protected FavBean doInBackground(Void... params) {
FavDao dao = new FavDao(GlobalContext.getInstance().getSpecialToken(), list.get(position).getId());
try {
favBean = dao.unFavIt();
} catch (WeiboException e) {
e.printStackTrace();
this.e = e;
cancel(true);
return null;
}
return favBean;
}
@Override
protected void onCancelled(FavBean favBean) {
super.onCancelled(favBean);
if (favBean == null && this.e != null) {
Toast.makeText(GlobalContext.getInstance(), e.getError(), Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onPostExecute(FavBean favBean) {
super.onPostExecute(favBean);
if (favBean != null) {
Toast.makeText(context, getActivity().getResources().getString(R.string.unfavorite_success), Toast.LENGTH_SHORT).show();
MessageBean bean = list.get(position);
bean.setFavorited(false);
list.remove(position);
list.add(position, bean);
FriendsTimeLineDBTask.asyncUpdateMsg(list.get(position).getId(), false);
}
}
}
private class DestroyStatusTask extends
MyAsyncTask<Void, Void, DestroyResult> {
int position;
boolean result;
Context context;
public DestroyStatusTask(Context context, int position) {
super();
this.context = context;
this.position = position;
}
@Override
protected DestroyResult doInBackground(Void... params) {
DestroyStatusDao dao = new DestroyStatusDao(GlobalContext
.getInstance().getSpecialToken(), list.get(position)
.getId());
try {
result = dao.destroy();
} catch (WeiboException e) {
e.printStackTrace();
}
if (result) {
return DestroyResult.success;
} else {
return DestroyResult.failed;
}
}
@Override
protected void onPostExecute(DestroyResult result) {
super.onPostExecute(result);
switch (result) {
case success:
Toast.makeText(context, "删除微博成功!", Toast.LENGTH_SHORT).show();
FriendsTimeLineDBTask.deleteMsg(GlobalContext.getInstance()
.getAccountBean().getUid(), list.get(position).getId());
list.remove(position);
notifyDataSetChanged();
break;
case failed:
Toast.makeText(context, "删除微博失败!", Toast.LENGTH_SHORT).show();
break;
}
}
}
public enum DestroyResult {
success, failed
}
private void configViewFont(ViewHolder holder) {
int prefFontSizeSp = SettingUtility.getFontSize();
float currentWidgetTextSizePx;
currentWidgetTextSizePx = holder.content.getTextSize();
if (Utility.sp2px(prefFontSizeSp) != currentWidgetTextSizePx) {
holder.content.setTextSize(prefFontSizeSp);
}
if (holder.repost_content != null) {
currentWidgetTextSizePx = holder.repost_content.getTextSize();
if (Utility.sp2px(prefFontSizeSp - 2) != currentWidgetTextSizePx) {
holder.repost_content.setTextSize(prefFontSizeSp - 2);
}
}
}
}