package org.aisen.weibo.sina.ui.fragment.timeline; import android.content.DialogInterface; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.support.v7.widget.CardView; import android.text.Html; import android.text.TextUtils; import android.util.TypedValue; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import org.aisen.android.common.context.GlobalContext; import org.aisen.android.component.bitmaploader.BitmapLoader; import org.aisen.android.support.inject.ViewInject; import org.aisen.android.ui.fragment.ABaseFragment; import org.aisen.android.ui.fragment.adapter.ARecycleViewItemView; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.base.AppContext; import org.aisen.weibo.sina.base.AppSettings; import org.aisen.weibo.sina.sinasdk.bean.Group; import org.aisen.weibo.sina.sinasdk.bean.Groups; import org.aisen.weibo.sina.sinasdk.bean.StatusContent; import org.aisen.weibo.sina.sinasdk.bean.WeiBoUser; import org.aisen.weibo.sina.support.action.DoLikeAction; import org.aisen.weibo.sina.support.bean.LikeBean; import org.aisen.weibo.sina.support.utils.AisenUtils; import org.aisen.weibo.sina.support.utils.ImageConfigUtils; import org.aisen.weibo.sina.ui.activity.profile.UserProfileActivity; import org.aisen.weibo.sina.ui.fragment.base.BizFragment; import org.aisen.weibo.sina.ui.fragment.comment.TimelineCommentFragment; import org.aisen.weibo.sina.ui.fragment.comment.TimelineDetailPagerFragment; import org.aisen.weibo.sina.ui.fragment.mention.MentionTimelineFragment; import org.aisen.weibo.sina.ui.fragment.search.SearchFragment; import org.aisen.weibo.sina.ui.widget.AisenTextView; import org.aisen.weibo.sina.ui.widget.TimelinePicsView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by wangdan on 16/1/4. */ public class TimelineItemView extends ARecycleViewItemView<StatusContent> implements View.OnClickListener, DoLikeAction.OnLikeCallback { public static final int LAYOUT_RES = R.layout.item_timeline; @ViewInject(id = R.id.cardView) CardView cardView; @ViewInject(id = R.id.imgPhoto) ImageView imgPhoto; @ViewInject(id = R.id.txtName) TextView txtName; @ViewInject(id = R.id.imgVerified) ImageView imgVerified; @ViewInject(id = R.id.txtDesc) TextView txtDesc; @ViewInject(id = R.id.btnLike) View btnLike; @ViewInject(id = R.id.imgLike) ImageView imgLike; @ViewInject(id = R.id.txtLike) TextView txtLike; @ViewInject(id = R.id.btnRepost) View btnRepost; @ViewInject(id = R.id.txtRepost) protected TextView txtRepost; @ViewInject(id = R.id.btnCmt) View btnComment; @ViewInject(id = R.id.txtComment) protected TextView txtComment; @ViewInject(id = R.id.txtContent) AisenTextView txtContent; @ViewInject(id = R.id.layRe) View layRe; @ViewInject(id = R.id.txtReContent) AisenTextView txtReContent; @ViewInject(id = R.id.layPicturs) TimelinePicsView layPicturs; @ViewInject(id = R.id.btnMenus) View btnMenus; @ViewInject(id = R.id.txtPics) TextView txtPics; @ViewInject(id = R.id.txtVisiable) TextView txtVisiable; private int textSize = 0; private static Map<String, String> groupMap; private int vPadding; private ABaseFragment fragment; private BizFragment bizFragment; private StatusContent data; public TimelineItemView(View convertView, ABaseFragment fragment) { super(fragment.getActivity(), convertView); this.fragment = fragment; bizFragment = BizFragment.createBizFragment(fragment); textSize = AppSettings.getTextSize(); vPadding = GlobalContext.getInstance().getResources().getDimensionPixelSize(R.dimen.comm_v_gap); Groups groups = AppContext.getAccount().getGroups(); if (groups != null && (groupMap == null || groupMap.size() != groups.getLists().size())) { groupMap = new HashMap<>(); for (Group group : groups.getLists()) groupMap.put(group.getIdstr(), group.getName()); } } @Override public void onBindData(View convertView, StatusContent data, int position) { this.data = data; WeiBoUser user = data.getUser(); // userInfo setUserInfo(user, txtName, imgPhoto, imgVerified); // desc String createAt = ""; if (!TextUtils.isEmpty(data.getCreated_at())) createAt = AisenUtils.convDate(data.getCreated_at()); String from = ""; if (!TextUtils.isEmpty(data.getSource())) from = String.format("%s", Html.fromHtml(data.getSource())); String desc = String.format("%s %s", createAt, from); txtDesc.setText(desc); // counter if (data.getReposts_count() == 0) { txtRepost.setVisibility(View.GONE); } else { txtRepost.setVisibility(View.VISIBLE); txtRepost.setText(AisenUtils.getCounter(data.getReposts_count())); } if (btnRepost != null) { btnRepost.setTag(data); btnRepost.setOnClickListener(this); if (data.getVisible() == null || "0".equals(data.getVisible().getType())) btnRepost.setVisibility(View.VISIBLE); else btnRepost.setVisibility(View.GONE); } if (data.getComments_count() == 0) { txtComment.setVisibility(View.GONE); } else { txtComment.setVisibility(View.VISIBLE); txtComment.setText(AisenUtils.getCounter(data.getComments_count())); } if (btnComment != null) { btnComment.setTag(data); btnComment.setOnClickListener(this); } setLikeView(); // 文本 // txtContent.setText(data.getText()); txtContent.setContent(data.getText()); setTextSize(txtContent, textSize); // reContent StatusContent reContent = data.getRetweeted_status(); if (reContent == null) { layRe.setVisibility(View.GONE); } else { layRe.setVisibility(View.VISIBLE); layRe.setTag(reContent); WeiBoUser reUser = reContent.getUser(); String reUserName = ""; if (reUser != null && !TextUtils.isEmpty(reUser.getScreen_name())) reUserName = String.format("@%s :", reUser.getScreen_name()); txtReContent.setContent(reUserName + reContent.getText()); // 正文 setTextSize(txtReContent, textSize); } // pictures StatusContent s = data.getRetweeted_status() != null ? data.getRetweeted_status() : data; if (AppSettings.isPicNone() && !(fragment instanceof TimelineCommentFragment)) { layPicturs.setVisibility(View.GONE); if (s.getPic_urls() != null && s.getPic_urls().length > 0) { txtPics.setText(String.format("%dPics", s.getPic_urls().length)); txtPics.setVisibility(View.VISIBLE); txtPics.setTag(s); txtPics.setOnClickListener(this); } else txtPics.setVisibility(View.GONE); } else { txtPics.setVisibility(View.GONE); layPicturs.setPics(s, fragment); } // group visiable txtVisiable.setVisibility(View.GONE); if (data.getVisible() != null && groupMap != null) { String name = groupMap.get(data.getVisible().getList_id()); if (!TextUtils.isEmpty(name)) { txtVisiable.setText(String.format(fragment.getString(R.string.publish_group_visiable), name)); txtVisiable.setVisibility(View.VISIBLE); if (layPicturs.getVisibility() == View.GONE) { txtVisiable.setPadding(0, 0, 0, 0); } else { txtVisiable.setPadding(0, vPadding, 0, 0); } } } btnMenus.setTag(data); btnMenus.setOnClickListener(this); } public void setLikeView() { LikeBean likeBean = DoLikeAction.likeCache.get(data.getId() + ""); if (btnLike != null) { btnLike.setTag(data); btnLike.setOnClickListener(this); if (likeBean != null && likeBean.isLiked()) { imgLike.setSelected(true); if (data.getAttitudes_count() > 0) txtLike.setText(AisenUtils.getCounter(data.getAttitudes_count(), "+1")); else txtLike.setText("+1"); } else { imgLike.setSelected(false); if (data.getAttitudes_count() > 0) txtLike.setText(AisenUtils.getCounter(data.getAttitudes_count()) + ""); else txtLike.setText(""); } } } private View.OnClickListener searchProfileOnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { WeiBoUser user = (WeiBoUser) v.getTag(); UserProfileActivity.launch(fragment.getActivity(), user.getScreen_name()); } }; private void setUserInfo(WeiBoUser user, TextView txtName, ImageView imgPhoto, ImageView imgVerified) { if (user != null) { txtName.setText(AisenUtils.getUserScreenName(user)); if (imgPhoto != null) { BitmapLoader.getInstance().display(fragment, AisenUtils.getUserPhoto(user), imgPhoto, ImageConfigUtils.getLargePhotoConfig()); if (fragment instanceof SearchFragment) { imgPhoto.setTag(user); imgPhoto.setOnClickListener(searchProfileOnClickListener); } else { bizFragment.userShow(imgPhoto, user); } } AisenUtils.setImageVerified(imgVerified, user); } else { if (imgPhoto != null) { imgPhoto.setImageDrawable(new ColorDrawable(Color.GRAY)); bizFragment.userShow(imgPhoto, null); } imgVerified.setVisibility(View.GONE); } } public static void setTextSize(TextView textView, float size) { textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, size); } @Override public void onClick(View v) { // 查看转发微博信息 if (v.getId() == R.id.layRe) { StatusContent reContent = (StatusContent) v.getTag(); TimelineDetailPagerFragment.launch(fragment.getActivity(), reContent); } // 转发 else if (v.getId() == R.id.btnRepost) { StatusContent status = (StatusContent) v.getTag(); bizFragment.statusRepost(status); } // 评论 else if (v.getId() == R.id.btnCmt) { StatusContent status = (StatusContent) v.getTag(); bizFragment.commentCreate(status); } // 点赞 else if (v.getId() == R.id.btnLike) { StatusContent status = (StatusContent) v.getTag(); LikeBean likeBean = DoLikeAction.likeCache.get(status.getId() + ""); boolean like = likeBean == null || !likeBean.isLiked(); v.findViewById(R.id.imgLike).setSelected(like); bizFragment.doLike(status, like, v, this); } // 溢出菜单 else if (v.getId() == R.id.btnMenus) { final String[] timelineMenuArr = GlobalContext.getInstance().getResources().getStringArray(R.array.timeline_menus); final StatusContent status = (StatusContent) v.getTag(); List<String> menuList = new ArrayList<String>(); if (status.getRetweeted_status() != null && status.getRetweeted_status().getUser() != null) menuList.add(timelineMenuArr[0]); // menuList.add(timelineMenuArr[3]); // if (status.getVisible() == null || "0".equals(status.getVisible().getType())) // menuList.add(timelineMenuArr[2]); menuList.add(timelineMenuArr[4]); menuList.add(timelineMenuArr[5]); menuList.add(timelineMenuArr[1]); if (status.getUser() != null && status.getUser().getIdstr().equals(AppContext.getAccount().getUser().getIdstr())) menuList.add(timelineMenuArr[6]); if (fragment instanceof MentionTimelineFragment) menuList.add(timelineMenuArr[7]); final String[] menus = new String[menuList.size()]; for (int i = 0; i < menuList.size(); i++) menus[i] = menuList.get(i); AisenUtils.showMenuDialog(fragment, v, menus, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { AisenUtils.timelineMenuSelected(fragment, menus[which], status); } }); } } @Override public void onLikeFaild() { setLikeView(); } @Override public void onLikeSuccess(StatusContent data, View likeView) { if (fragment.getActivity() == null) return; setLikeView(); if (likeView.getTag() == data) { bizFragment.animScale(likeView); } } }