package org.goodev.discourse.ui;
import android.app.Activity;
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.TextView;
import org.goodev.discourse.App;
import org.goodev.discourse.R;
import org.goodev.discourse.api.Api;
import org.goodev.discourse.api.TopicStream;
import org.goodev.discourse.api.data.Post;
import org.goodev.discourse.api.data.PostAction;
import org.goodev.discourse.utils.ImageLoader;
import org.goodev.discourse.utils.Utils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.sufficientlysecure.htmltextview.HtmlTextView;
import java.util.ArrayList;
public class PostRowViewBinder {
private static OnLongClickListener popuplistener = new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
showPopup(v);
return true;
}
};
public static void bindItemView(final Activity a, View view, Post data, ImageLoader imageLoader, TopicStream ts, int position, OnClickListener listener) {
ViewHolder vh = (ViewHolder) view.getTag();
if (vh == null) {
vh = new ViewHolder();
view.setTag(vh);
// vh.mBookmark = (ImageView) view.findViewById(R.id.post_bookmark);
// vh.mFlag = (ImageView) view.findViewById(R.id.post_flag);
// vh.mImageHsv = (HorizontalScrollView) view.findViewById(R.id.post_image_hsv);
// vh.mImageLayout = (LinearLayout) view.findViewById(R.id.post_images_layout);
vh.mLikeContent = (TextView) view.findViewById(R.id.post_like_content);
// vh.mLinkCount = (TextView) view.findViewById(R.id.post_link_count);
vh.mModifyCount = (TextView) view.findViewById(R.id.modify_count);
vh.mPostContent = (HtmlTextView) view.findViewById(R.id.post_content);
vh.mPostContent.setImageLoader(imageLoader);
vh.mPostCount = (TextView) view.findViewById(R.id.post_count);
// vh.mPosterCount = (TextView) view.findViewById(R.id.topic_poster_count);
vh.mPostTime = (TextView) view.findViewById(R.id.post_time);
vh.mUserIcon = (ImageView) view.findViewById(R.id.user_icon);
vh.mUserName = (TextView) view.findViewById(R.id.user_name);
// vh.mUserTitle = (TextView) view.findViewById(R.id.user_title);
vh.mViewCount = (TextView) view.findViewById(R.id.view_count);
vh.mUserLayout = view.findViewById(R.id.post_user_info_layout);
vh.mUserLayout.setOnClickListener(listener);
vh.mShare = (ImageView) view.findViewById(R.id.post_share);
vh.mLike = (ImageView) view.findViewById(R.id.post_like);
vh.mEdit = (ImageView) view.findViewById(R.id.post_edit);
vh.mRecover = (ImageView) view.findViewById(R.id.post_recover);
vh.mReply = (ImageView) view.findViewById(R.id.post_replay);
vh.mOverflowMenu = view.findViewById(R.id.overflow_menu);
vh.mShare.setOnClickListener(listener);
vh.mLike.setOnClickListener(listener);
vh.mEdit.setOnClickListener(listener);
vh.mRecover.setOnClickListener(listener);
vh.mReply.setOnClickListener(listener);
vh.mOverflowMenu.setOnClickListener(listener);
vh.mShare.setOnLongClickListener(popuplistener);
vh.mLike.setOnLongClickListener(popuplistener);
vh.mEdit.setOnLongClickListener(popuplistener);
vh.mRecover.setOnLongClickListener(popuplistener);
vh.mReply.setOnLongClickListener(popuplistener);
vh.mOverflowMenu.setOnLongClickListener(popuplistener);
}
vh.mEdit.setVisibility(data.can_edit ? View.VISIBLE : View.GONE);
vh.mRecover.setVisibility(data.can_recover ? View.VISIBLE : View.GONE);
boolean canReply = (!ts.mTopic.closed && App.isLogin());
vh.mReply.setVisibility(canReply ? View.VISIBLE : View.GONE);
final Context ctx = view.getContext();
int size = Api.AVATAR_SIZE_BIG;
if (!TextUtils.isEmpty(data.avatar_template)) {
String iconUrl = Utils.getAvatarUrl(data.avatar_template, size);
imageLoader.get(iconUrl, vh.mUserIcon);
}
String nameAndTitle;
if (!TextUtils.isEmpty(data.user_title) && !Api.NULL.equals(data.user_title)) {
nameAndTitle = ctx.getString(R.string.post_name_and_title, data.username, data.user_title);
} else {
nameAndTitle = data.username;
}
vh.mUserLayout.setTag(data.username);
vh.mUserName.setText(nameAndTitle);
// vh.mUserTitle.setText(title);
vh.mPostTime.setText(Utils.formatPostTime(data.created_at));
int version = (int) (data.version - 1);
if (version > 0) {
vh.mModifyCount.setText(String.valueOf(version));
vh.mModifyCount.setVisibility(View.VISIBLE);
} else {
vh.mModifyCount.setVisibility(View.INVISIBLE);
}
if (position == 0) {
vh.mPostCount.setText(String.valueOf(ts.mTopic.posts_count));
vh.mViewCount.setText(String.valueOf(ts.mTopic.views));
vh.mPostCount.setVisibility(View.VISIBLE);
vh.mViewCount.setVisibility(View.VISIBLE);
} else {
vh.mPostCount.setVisibility(View.INVISIBLE);
vh.mViewCount.setVisibility(View.INVISIBLE);
}
Document doc = Jsoup.parse(data.cooked);
Elements elements = doc.select("div a.lightbox");
ArrayList<String> images = new ArrayList<String>();
for (Element element : elements) {
String imgUrl = element.attr("href");
images.add(imgUrl);
// TODO 由于完美解决了图片显示问题 ,这里就不用提取图片了吧。。。
// element.remove();
}
Elements videos = doc.select("p iframe");
StringBuilder sb = new StringBuilder();
for (Element element : videos) {
sb.append("<br/>");
String src = element.attr("src");
if (src != null && src.startsWith(Utils.SLASH)) {
sb.append(Utils.AVATAR_HTTP_PREFIX);
}
sb.append(element.attr("src"));
element.remove();
}
String html = doc.body().html() + sb.toString();
if (images.size() > 0) {
vh.mPostContent.setTag(R.id.poste_image_data, images);
}
vh.mPostContent.setHtmlFromString(html);
// vh.mImageLayout.removeAllViews();
// if (images.size() > 0) {
// String[] imgs = new String[images.size()];
// imgs = images.toArray(imgs);
// vh.mPostContent.setTag(R.id.poste_image_data, images);
// size = ctx.getResources().getInteger(R.integer.post_item_img_size);
// LayoutInflater inflater = LayoutInflater.from(ctx);
// vh.mImageHsv.setVisibility(View.VISIBLE);
// int index = 0;
// for (String img : images) {
// ImageView iv = (ImageView) inflater.inflate(
// R.layout.post_image_item, vh.mImageLayout, false);
// imageLoader.get(img, iv, placeHolder, size, size);
// vh.mImageLayout.addView(iv);
// iv.setTag(R.id.poste_image_data, imgs);
// iv.setTag(R.id.poste_image_index, Integer.valueOf(index));
// index++;
// iv.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// final String[] img = (String[]) v.getTag(R.id.poste_image_data);
// final Integer index = (Integer) v.getTag(R.id.poste_image_index);
// ActivityUtils.openPhotosActivity(a, index, img);
// }
// });
// }
// } else {
// vh.mImageHsv.setVisibility(View.GONE);
// }
PostAction like = data.getLikeAction();
vh.mLikeContent.setVisibility(View.GONE);
if (like == null || (!like.can_act && !like.can_undo)) {
vh.mLike.setVisibility(View.GONE);
} else {
vh.mLike.setVisibility(View.VISIBLE);
int resId = like.acted ? R.drawable.ic_heart_checked : R.drawable.ic_heart_black;
vh.mLike.setImageResource(resId);
if (like.count > 0) {
vh.mLikeContent.setText(ctx.getString(R.string.like_content, like.count));
vh.mLikeContent.setVisibility(View.VISIBLE);
}
}
// int v = data.showFlag() ? View.VISIBLE : View.GONE;
// vh.mFlag.setVisibility(v);
//
// int bookmarkId = data.bookmarked ? R.drawable.ic_bookmark_checked : R.drawable.ic_bookmark;
// vh.mBookmark.setImageResource(bookmarkId);
// int links = data.getLinksSize();
// vh.mLinkCount.setVisibility(links > 0 ? View.VISIBLE : View.GONE);
// vh.mLinkCount.setText(String.valueOf(links));
//
// if (position == 0) {
// int posterSize = ts.getPosterSize();
// vh.mPosterCount.setVisibility(View.VISIBLE);
// vh.mPosterCount.setText(String.valueOf(posterSize));
// } else {
// vh.mPosterCount.setVisibility(View.GONE);
// }
}
public static void showPopup(View v) {
final Context c = v.getContext();
LayoutInflater inflater = LayoutInflater.from(c);
TextView contentView = (TextView) inflater.inflate(R.layout.participant_popup_item, null);
contentView.setText(v.getContentDescription());
PopupWindow popup = new PopupWindow(c);
popup.setContentView(contentView);
popup.setOutsideTouchable(true);
popup.setWindowLayoutMode(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
popup.setBackgroundDrawable(c.getResources().getDrawable(R.drawable.poster_popup_bg));
popup.showAsDropDown(v, 0, -v.getHeight() * 2);
}
private static class ViewHolder {
private ImageView mUserIcon;
private TextView mUserName;
// private TextView mUserTitle;
private TextView mPostTime;
private TextView mModifyCount;
private TextView mViewCount;
private TextView mPostCount;
private HtmlTextView mPostContent;
// private HorizontalScrollView mImageHsv;
// private LinearLayout mImageLayout;
// private ImageView mFlag;
private ImageView mLike;
private ImageView mShare;
private ImageView mEdit;
private ImageView mRecover;
private ImageView mReply;
private View mOverflowMenu;
// private ImageView mBookmark;
// private TextView mLinkCount;
// private TextView mPosterCount;
private TextView mLikeContent;
private View mUserLayout;
}
}