package net.oschina.gitapp.adapter;
import java.util.List;
import net.oschina.gitapp.R;
import net.oschina.gitapp.bean.Commit;
import net.oschina.gitapp.bean.Event;
import net.oschina.gitapp.bean.User;
import net.oschina.gitapp.common.BitmapManager;
import net.oschina.gitapp.common.HtmlRegexpUtils;
import net.oschina.gitapp.common.StringUtils;
import net.oschina.gitapp.common.UIHelper;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
* 个人动态列表适配器
*
* @created 2014-05-20 下午15:28
* @author 火蚁(http://my.oschina.net/LittleDY)
*/
public class MySelfEventListAdapter extends MyBaseAdapter<Event> {
// 图像管理线程类
private final BitmapManager bmpManager;
static class ListItemView {
public ImageView face;// 用户头像
public TextView user_name;
public TextView content;// 更新内容
public LinearLayout commitLists;// commits的列表
public TextView date;// 更新时间
}
public MySelfEventListAdapter(Context context, List<Event> data,
int resource) {
super(context, data, resource);
this.bmpManager = new BitmapManager(BitmapFactory.decodeResource(
context.getResources(), R.drawable.widget_dface_loading));
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ListItemView listItemView = null;
Event event = listData.get(position);
if (convertView == null) {
// 获取list_item布局文件的视图
convertView = listContainer.inflate(this.itemViewResource, null);
listItemView = new ListItemView();
// 获取控件对象
listItemView.face = (ImageView) convertView
.findViewById(R.id.event_listitem_userface);
listItemView.user_name = (TextView) convertView
.findViewById(R.id.event_listitem_username);
listItemView.content = (TextView) convertView
.findViewById(R.id.event_listitem_content);
listItemView.date = (TextView) convertView
.findViewById(R.id.event_listitem_date);
listItemView.commitLists = (LinearLayout) convertView
.findViewById(R.id.event_listitem_commits_list);
// 设置控件集到convertView
convertView.setTag(listItemView);
} else {
listItemView = (ListItemView) convertView.getTag();
}
displayContent(listItemView, event);
return convertView;
}
private void displayContent(ListItemView listItemView, final Event event) {
// 1.加载头像
String portraitURL = event.getAuthor().getNew_portrait();
if (portraitURL.endsWith("portrait.gif")) {
listItemView.face.setImageResource(R.drawable.mini_avatar);
} else {
bmpManager.loadBitmap(portraitURL, listItemView.face);
}
listItemView.face.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
User user = event.getAuthor();
if (user == null) {
return;
}
UIHelper.showUserInfoDetail(context, user, null);
}
});
// 2.显示相关信息
listItemView.user_name.setText(UIHelper.parseEventTitle(event
.getAuthor().getName(), event.getProject().getOwner().getName()
+ " / " + event.getProject().getName(), event));
// commits信息的显示
listItemView.commitLists.setVisibility(View.GONE);
listItemView.commitLists.removeAllViews();
if (event.getData() != null) {
List<Commit> commits = event.getData().getCommits();
if (commits != null && commits.size() > 0) {
showCommitInfo(listItemView.commitLists, commits);
listItemView.commitLists.setVisibility(View.VISIBLE);
}
}
listItemView.content.setVisibility(View.GONE);
// 评论的内容
if (event.getEvents().getNote() != null
&& event.getEvents().getNote().getNote() != null) {
listItemView.content.setText(HtmlRegexpUtils.filterHtml(event
.getEvents().getNote().getNote()));
listItemView.content.setVisibility(View.VISIBLE);
} else
// issue的title
if (event.getEvents().getIssue() != null
&& event.getEvents().getNote() == null) {
listItemView.content.setText(event.getEvents().getIssue()
.getTitle());
listItemView.content.setVisibility(View.VISIBLE);
}
// pr的title
if (event.getEvents().getPull_request() != null
&& event.getEvents().getNote() == null) {
listItemView.content.setText(event.getEvents().getPull_request()
.getTitle());
listItemView.content.setVisibility(View.VISIBLE);
}
listItemView.date.setText(StringUtils.friendly_time(event
.getUpdated_at()));
}
private void showCommitInfo(LinearLayout layout, List<Commit> commits) {
if (commits.size() >= 2) {
addCommitItem(layout, commits.get(0));
addCommitItem(layout, commits.get(1));
} else {
for (Commit commit : commits) {
addCommitItem(layout, commit);
}
}
}
/**
* 添加commit项
*
* @param layout
* @param commit
*/
private void addCommitItem(LinearLayout layout, Commit commit) {
View v = listContainer.inflate(R.layout.event_commits_listitem, null);
((TextView) v.findViewById(R.id.event_commits_listitem_commitid))
.setText(commit.getId());
((TextView) v.findViewById(R.id.event_commits_listitem_username))
.setText(commit.getAuthor().getName());
((TextView) v.findViewById(R.id.event_commits_listitem_message))
.setText(commit.getMessage());
layout.addView(v);
}
}