package org.wordpress.android.ui.reader.views; import android.content.Context; import android.support.annotation.NonNull; import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import org.wordpress.android.R; import org.wordpress.android.models.ReaderPost; import org.wordpress.android.ui.reader.ReaderActivityLauncher; import org.wordpress.android.ui.reader.actions.ReaderActions; import org.wordpress.android.ui.reader.actions.ReaderBlogActions; import org.wordpress.android.util.AppLog; import org.wordpress.android.util.GravatarUtils; import org.wordpress.android.util.NetworkUtils; import org.wordpress.android.util.PhotonUtils; import org.wordpress.android.util.ToastUtils; import org.wordpress.android.widgets.WPNetworkImageView; /** * topmost view in post detail - shows blavatar + avatar, author name, blog name, and follow button */ public class ReaderPostDetailHeaderView extends LinearLayout { private ReaderPost mPost; private ReaderFollowButton mFollowButton; private boolean mEnableBlogPreview = true; public ReaderPostDetailHeaderView(Context context) { super(context); initView(context); } public ReaderPostDetailHeaderView(Context context, AttributeSet attrs) { super(context, attrs); initView(context); } public ReaderPostDetailHeaderView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(context); } private void initView(Context context) { View view = inflate(context, R.layout.reader_post_detail_header_view, this); mFollowButton = (ReaderFollowButton) view.findViewById(R.id.header_follow_button); } public void setPost(@NonNull ReaderPost post, boolean isSignedInWPCom) { mPost = post; TextView txtTitle = (TextView) findViewById(R.id.text_header_title); TextView txtSubtitle = (TextView) findViewById(R.id.text_header_subtitle); boolean hasBlogName = mPost.hasBlogName(); boolean hasAuthorName = mPost.hasAuthorName(); if (hasBlogName && hasAuthorName) { // don't show author name if it's the same as the blog name if (mPost.getAuthorName().equals(mPost.getBlogName())) { txtTitle.setText(mPost.getAuthorName()); txtSubtitle.setVisibility(View.GONE); } else { txtTitle.setText(mPost.getAuthorName()); txtSubtitle.setText(mPost.getBlogName()); } } else if (hasBlogName) { txtTitle.setText(mPost.getBlogName()); txtSubtitle.setVisibility(View.GONE); } else if (hasAuthorName) { txtTitle.setText(mPost.getAuthorName()); txtSubtitle.setVisibility(View.GONE); } else { txtTitle.setText(R.string.untitled); txtSubtitle.setVisibility(View.GONE); } if (mEnableBlogPreview) { txtTitle.setOnClickListener(mClickListener); txtSubtitle.setOnClickListener(mClickListener); } else { int color = getContext().getResources().getColor(R.color.grey_dark); txtTitle.setTextColor(color); txtSubtitle.setTextColor(color); } if (isSignedInWPCom) { mFollowButton.setVisibility(View.VISIBLE); mFollowButton.setIsFollowed(mPost.isFollowedByCurrentUser); mFollowButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { toggleFollowStatus(); } }); } else { mFollowButton.setVisibility(View.GONE); } showBlavatarAndAvatar(mPost.getBlogImageUrl(), mPost.getPostAvatar()); } private void showBlavatarAndAvatar(String blavatarUrl, String avatarUrl) { boolean hasBlavatar = !TextUtils.isEmpty(blavatarUrl); boolean hasAvatar = !TextUtils.isEmpty(avatarUrl); AppLog.w(AppLog.T.READER, avatarUrl); int frameSize = getResources().getDimensionPixelSize(R.dimen.reader_detail_header_avatar_frame); View avatarFrame = findViewById(R.id.frame_avatar); WPNetworkImageView imgBlavatar = (WPNetworkImageView) findViewById(R.id.image_header_blavatar); WPNetworkImageView imgAvatar = (WPNetworkImageView) findViewById(R.id.image_header_avatar); /* * - if there's a blavatar and an avatar, show both of them overlaid using default sizing * - if there's only a blavatar, show it the full size of the parent frame and hide the avatar * - if there's only an avatar, show it the full size of the parent frame and hide the blavatar * - if there's neither a blavatar nor an avatar, hide them both */ if (hasBlavatar && hasAvatar) { int blavatarSz = getResources().getDimensionPixelSize(R.dimen.reader_detail_header_blavatar); imgBlavatar.getLayoutParams().height = blavatarSz; imgBlavatar.getLayoutParams().width = blavatarSz; imgBlavatar.setImageUrl( PhotonUtils.getPhotonImageUrl(blavatarUrl, blavatarSz, blavatarSz), WPNetworkImageView.ImageType.BLAVATAR); imgBlavatar.setVisibility(View.VISIBLE); int avatarSz = getResources().getDimensionPixelSize(R.dimen.reader_detail_header_avatar); imgAvatar.getLayoutParams().height = avatarSz; imgAvatar.getLayoutParams().width = avatarSz; imgAvatar.setImageUrl( GravatarUtils.fixGravatarUrl(avatarUrl, avatarSz), WPNetworkImageView.ImageType.AVATAR); imgAvatar.setVisibility(View.VISIBLE); } else if (hasBlavatar) { imgBlavatar.getLayoutParams().height = frameSize; imgBlavatar.getLayoutParams().width = frameSize; imgBlavatar.setImageUrl( PhotonUtils.getPhotonImageUrl(blavatarUrl, frameSize, frameSize), WPNetworkImageView.ImageType.BLAVATAR); imgBlavatar.setVisibility(View.VISIBLE); imgAvatar.setVisibility(View.GONE); } else if (hasAvatar) { imgBlavatar.setVisibility(View.GONE); imgAvatar.getLayoutParams().height = frameSize; imgAvatar.getLayoutParams().width = frameSize; imgAvatar.setImageUrl( GravatarUtils.fixGravatarUrl(avatarUrl, frameSize), WPNetworkImageView.ImageType.AVATAR); imgAvatar.setVisibility(View.VISIBLE); } else { imgBlavatar.setVisibility(View.GONE); imgAvatar.setVisibility(View.GONE); } // hide the frame if there's neither a blavatar nor an avatar avatarFrame.setVisibility(hasAvatar || hasBlavatar ? View.VISIBLE : View.GONE); if (mEnableBlogPreview) { imgBlavatar.setOnClickListener(mClickListener); imgAvatar.setOnClickListener(mClickListener); } } /* * click listener which shows blog preview */ private final OnClickListener mClickListener = new OnClickListener() { @Override public void onClick(View v) { if (mPost != null) { ReaderActivityLauncher.showReaderBlogPreview(v.getContext(), mPost); } } }; private void toggleFollowStatus() { if (!NetworkUtils.checkConnection(getContext())) return; final boolean isAskingToFollow = !mPost.isFollowedByCurrentUser; ReaderActions.ActionListener listener = new ReaderActions.ActionListener() { @Override public void onActionResult(boolean succeeded) { if (getContext() == null) return; mFollowButton.setEnabled(true); if (succeeded) { mPost.isFollowedByCurrentUser = isAskingToFollow; } else { int errResId = isAskingToFollow ? R.string.reader_toast_err_follow_blog : R.string.reader_toast_err_unfollow_blog; ToastUtils.showToast(getContext(), errResId); mFollowButton.setIsFollowed(!isAskingToFollow); } } }; // disable follow button until API call returns mFollowButton.setEnabled(false); boolean result; if (mPost.isExternal) { result = ReaderBlogActions.followFeedById(mPost.feedId, isAskingToFollow, listener); } else { result = ReaderBlogActions.followBlogById(mPost.blogId, isAskingToFollow, listener); } if (result) { mFollowButton.setIsFollowedAnimated(isAskingToFollow); } } }