package com.abewy.android.apps.klyph.adapter.graph; import android.content.Intent; import android.graphics.PorterDuff; import android.text.Spannable; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.style.DynamicDrawableSpan; import android.text.style.ImageSpan; import android.text.style.TextAppearanceSpan; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; import android.widget.TextView; import com.abewy.android.apps.klyph.KlyphBundleExtras; import com.abewy.android.apps.klyph.R; import com.abewy.android.apps.klyph.adapter.KlyphAdapter; import com.abewy.android.apps.klyph.adapter.holder.CommentHolder; import com.abewy.android.apps.klyph.app.ImageActivity; import com.abewy.android.apps.klyph.core.graph.Comment; import com.abewy.android.apps.klyph.core.graph.Comment.Attachment; import com.abewy.android.apps.klyph.core.graph.Comment.Attachment.Media.Image; import com.abewy.android.apps.klyph.core.graph.Comment.Attachment.Target; import com.abewy.android.apps.klyph.core.graph.GraphObject; import com.abewy.android.apps.klyph.core.util.AttrUtil; import com.abewy.android.apps.klyph.util.DateUtil; import com.abewy.android.apps.klyph.util.KlyphUtil; import com.abewy.android.apps.klyph.util.TextViewUtil; import com.abewy.android.apps.klyph.widget.ProfileImageView; import com.abewy.android.extended.widget.RatioImageView; import com.abewy.util.Android; import com.abewy.util.PhoneUtil; public class CommentAdapter extends KlyphAdapter { private int placeHolder = -1; private int profilePlaceHolder = -1; private final int colorFilter = 0xAA000000; public CommentAdapter() { super(); } @Override protected int getLayout() { return R.layout.item_comment; } @Override protected void attachHolder(View view) { ImageView depthBar = (ImageView) view.findViewById(R.id.depth_bar); ImageView authorPicture = (ImageView) view.findViewById(R.id.author_picture); TextView authorName = (TextView) view.findViewById(R.id.author_name); TextView commentText = (TextView) view.findViewById(R.id.comment_text); ImageView commentImage = (ImageView) view.findViewById(R.id.comment_image); ImageView commentImagePlay = (ImageView) view.findViewById(R.id.comment_image_play); ImageView commentLinkImage = (ImageView) view.findViewById(R.id.comment_link_image); ImageView commentLinkImageBackground = (ImageView) view.findViewById(R.id.comment_link_image_background); TextView commentLinkName = (TextView) view.findViewById(R.id.comment_link_name); TextView commentLinkUrl = (TextView) view.findViewById(R.id.comment_link_url); TextView commentLinkDescription = (TextView) view.findViewById(R.id.comment_link_description); setHolder(view, new CommentHolder(depthBar, authorPicture, authorName, commentText, commentImage, commentImagePlay, commentLinkImage, commentLinkImageBackground, commentLinkName, commentLinkUrl, commentLinkDescription)); } @Override protected void mergeViewWithData(View view, GraphObject data) { super.mergeViewWithData(view, data); Comment comment = (Comment) data; final CommentHolder holder = (CommentHolder) getHolder(view); holder.getDepthBar().setVisibility(comment.hasParentComment() ? View.VISIBLE : View.GONE); holder.getAuthorName().setAutoLinkMask(0); holder.getAuthorName().setText(""); String name = comment.getFrom().getName(); String time = DateUtil.timeAgoInWords(getContext(view), comment.getCreated_time()); String text = name + " " + time + " "; holder.getAuthorName().setText(text); TextViewUtil.setElementClickable(getContext(view), holder.getAuthorName(), comment.getFrom().getName(), comment.getFrom().getId(), "user", false); Spannable styledText = new SpannableString(holder.getAuthorName().getText()); TextAppearanceSpan span1 = new TextAppearanceSpan(getContext(holder.getAuthorName()), R.style.Klyph_CommentTextName); TextAppearanceSpan span2 = new TextAppearanceSpan(getContext(holder.getAuthorName()), R.style.Klyph_CommentTextTime); if (Android.isMinAPI(11)) styledText.setSpan(span1, 0, name.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); styledText.setSpan(span2, name.length() + 2, name.length() + 2 + time.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); holder.getAuthorName().setText(styledText); String commentText = comment.getMessage(); int numLikes = comment.getLike_count(); if (numLikes > 0) { if (commentText.length() > 0) commentText += " "; commentText += numLikes + " "; } final SpannableStringBuilder sb = new SpannableStringBuilder(); sb.append(commentText); if (numLikes > 0) { ImageSpan span3 = new ImageSpan(getContext(holder.getAuthorName()), AttrUtil.getResourceId(getContext(holder.getAuthorName()), comment.getUser_likes() ? R.attr.userLikeSmallIcon : R.attr.likeIconSmall), DynamicDrawableSpan.ALIGN_BASELINE); TextAppearanceSpan span4 = new TextAppearanceSpan(getContext(holder.getAuthorName()), R.style.Klyph_CommentTextTime); int likesLength = String.valueOf(numLikes).length(); sb.setSpan(span3, commentText.length() - 2, commentText.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); sb.setSpan(span4, commentText.length() - (likesLength + 2), commentText.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } holder.getCommentText().setText(sb); if (placeHolder == -1) placeHolder = KlyphUtil.getPlaceHolder(view.getContext()); if (profilePlaceHolder == -1) profilePlaceHolder = KlyphUtil.getProfilePlaceHolder(view.getContext()); ((ProfileImageView) holder.getAuthorPicture()).disableBorder(); String url = comment.getFrom().getPicture().getUrl(); loadImage(holder.getAuthorPicture(), url, profilePlaceHolder, data); holder.getCommentImage().setOnClickListener(null); holder.getCommentLinkImage().setOnClickListener(null); if (comment.getAttachment().isPhoto() || comment.getAttachment().isVideoShare()) { Image image = comment.getAttachment().getMedia().getImage(); RatioImageView rImageview = (RatioImageView) holder.getCommentImage(); rImageview.setImageSize(image.getWidth(), image.getHeight()); int parentWidth = ((ViewGroup) holder.getCommentImage().getParent()).getWidth(); if (parentWidth > 0) { LayoutParams params = holder.getCommentImage().getLayoutParams(); params.width = Math.min(parentWidth, image.getWidth()); holder.getCommentImage().setLayoutParams(params); } loadImage(holder.getCommentImage(), image.getSrc(), placeHolder, data); final Target target = comment.getAttachment().getTarget(); holder.getCommentLinkImage().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getContext(holder.getCommentImage()), ImageActivity.class); intent.putExtra(KlyphBundleExtras.PHOTO_ID, target.getId()); getContext(holder.getCommentLinkImage()).startActivity(intent); } }); } else if (comment.getAttachment().isShare()) { final Attachment att = comment.getAttachment(); Image image = comment.getAttachment().getMedia().getImage(); holder.getCommentLinkImageBackground().setColorFilter(colorFilter, PorterDuff.Mode.SRC_OVER); loadImage(holder.getCommentLinkImage(), image.getSrc(), placeHolder, data); loadImage(holder.getCommentLinkImageBackground(), image.getSrc(), placeHolder, data); holder.getCommentLinkName().setText(att.getTitle()); holder.getCommentLinkUrl().setText(att.getUrl()); holder.getCommentLinkDescription().setText(att.getDescription()); holder.getCommentLinkImage().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { PhoneUtil.openURL(getContext(holder.getCommentLinkImage()), att.getUrl()); } }); } if (comment.getAttachment().isVideoShare()) holder.getCommentImagePlay().setVisibility(View.VISIBLE); else holder.getCommentImagePlay().setVisibility(View.GONE); ((View) holder.getCommentImage().getParent()) .setVisibility(comment.getAttachment().isPhoto() || comment.getAttachment().isVideoShare() ? View.VISIBLE : View.GONE); ((View) holder.getCommentLinkImage().getParent()).setVisibility(comment.getAttachment().isShare() ? View.VISIBLE : View.GONE); } }