package org.goodev.discourse.ui;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.CheckBox;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
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.LatestTopics;
import org.goodev.discourse.api.data.Category;
import org.goodev.discourse.api.data.Topic;
import org.goodev.discourse.api.data.TopicPoster;
import org.goodev.discourse.api.data.User;
import org.goodev.discourse.utils.ImageLoader;
import org.goodev.discourse.utils.Utils;
import java.util.ArrayList;
public class TopicRowViewBinder {
public static void bindItemView(View view, Topic t, ImageLoader imageLoader, boolean b, LatestTopics lt, OnCheckedChangeListener listener) {
ViewHolder holder = (ViewHolder) view.getTag();
if (holder == null) {
holder = new ViewHolder();
view.setTag(holder);
holder.mStatusView = (TextView) view.findViewById(R.id.topic_status_view);
holder.mCategoryTV = (TextView) view.findViewById(R.id.topic_category);
// holder.mFirstTimeTV = (TextView) view.findViewById(R.id.topic_first_time);
holder.mLastTimeTV = (TextView) view.findViewById(R.id.topic_last_time);
holder.mLikesNumberTV = (TextView) view.findViewById(R.id.topic_likes_number);
holder.mParticipantsLayout = (LinearLayout) view.findViewById(R.id.participants);
holder.mPostsNumberTV = (TextView) view.findViewById(R.id.topic_posts_number);
holder.mStarCB = (CheckBox) view.findViewById(R.id.topic_star);
holder.mTitleTV = (TextView) view.findViewById(R.id.topic_title);
holder.mViewsNumberTV = (TextView) view.findViewById(R.id.topic_views_number);
}
holder.mStarCB.setOnCheckedChangeListener(null);
holder.mStarCB.setVisibility(App.isLogin() ? View.VISIBLE : View.INVISIBLE);
holder.mStarCB.setTag(t);
int left = 0;
int right = 0;
if (t.pinned) {
right = R.drawable.ic_pin;
}
if (t.closed) {
left = R.drawable.ic_locked;
}
holder.mStatusView.setCompoundDrawablesWithIntrinsicBounds(left, 0, right, 0);
// holder.mFirstTimeTV.setText(Utils.formatPostTime(t.created_at));
long lastPostTime = t.last_posted_at;
if (lastPostTime == 0) {
lastPostTime = t.created_at;
}
holder.mLastTimeTV.setText(Utils.formatPostTime(lastPostTime));
holder.mStarCB.setChecked(t.starred);
// 设置完默认值后 在设置 listener
holder.mStarCB.setOnCheckedChangeListener(listener);
holder.mStarCB.setVisibility(listener == null ? View.GONE : View.VISIBLE);
Category cat = App.getCategory(t.getCategoryId());
Utils.setCategoryView(cat, holder.mCategoryTV);
holder.mLikesNumberTV.setText(String.valueOf(t.like_count));
holder.mPostsNumberTV.setText(String.valueOf(t.posts_count));
holder.mViewsNumberTV.setText(Utils.formatTopicViews(t.views));
if (t.unseen) {
holder.mTitleTV.setText(Utils.getNewTitleSpan(t.title));
} else {
holder.mTitleTV.setText(t.title);
}
// 设置参与者
if (lt == null) {
return;
}
final LinearLayout layout = holder.mParticipantsLayout;
layout.removeAllViews();
ArrayList<TopicPoster> posters = lt.getPosters(t.id);
if (posters != null) {
final Context ctx = view.getContext();
int maxSize = Api.AVATAR_SIZE_SMALL;
String iconUrl = null;
LayoutInflater inflater = LayoutInflater.from(ctx);
for (TopicPoster poster : posters) {
User u = lt.getUser(poster.user_id);
if (u != null) {
ImageView iv = (ImageView) inflater.inflate(R.layout.topic_participant_icon, layout, false);
iconUrl = Utils.getAvatarUrl(u.avatar_template, maxSize);
imageLoader.get(iconUrl, iv);
layout.addView(iv);
iv.setTag(R.id.poster_des, poster.description);
iv.setTag(R.id.poster_name, u.username);
iv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showPopup(v);
}
});
}
}
}
}
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(c.getString(R.string.participant_popup_text, v.getTag(R.id.poster_name), v.getTag(R.id.poster_des)));
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);
}
private static class ViewHolder {
// private TextView mFirstTimeTV;
private TextView mLastTimeTV;
private CheckBox mStarCB;
private TextView mTitleTV;
private TextView mCategoryTV;
private LinearLayout mParticipantsLayout;
private TextView mPostsNumberTV;
private TextView mLikesNumberTV;
private TextView mViewsNumberTV;
private TextView mStatusView;
}
}