package org.wikipedia.feed.image; import android.content.Context; import android.net.Uri; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.View; import android.widget.TextView; import org.wikipedia.R; import org.wikipedia.feed.view.ActionFooterView; import org.wikipedia.feed.view.CardHeaderView; import org.wikipedia.feed.view.DefaultFeedCardView; import org.wikipedia.feed.view.FeedAdapter; import org.wikipedia.richtext.RichTextUtil; import org.wikipedia.views.FaceAndColorDetectImageView; import org.wikipedia.views.ItemTouchHelperSwipeAdapter; import org.wikipedia.views.ViewUtil; import butterknife.BindView; import butterknife.ButterKnife; import static org.apache.commons.lang3.StringUtils.defaultString; public class FeaturedImageCardView extends DefaultFeedCardView<FeaturedImageCard> implements ItemTouchHelperSwipeAdapter.SwipeableView { public interface Callback { void onShareImage(@NonNull FeaturedImageCard card); void onDownloadImage(@NonNull FeaturedImage image); void onFeaturedImageSelected(@NonNull FeaturedImageCard card); } @BindView(R.id.view_featured_image_card_header) View headerView; @BindView(R.id.view_featured_image_card_footer) View footerView; @BindView(R.id.view_featured_image_card_image) FaceAndColorDetectImageView imageView; @BindView(R.id.featured_image_description_Text) TextView descriptionView; public FeaturedImageCardView(Context context) { super(context); inflate(getContext(), R.layout.view_card_featured_image, this); ButterKnife.bind(this); } @Override public void setCard(@NonNull FeaturedImageCard card) { super.setCard(card); // TODO: superimpose text onto image thumb image(card.image()); description(defaultString(card.description())); //Can check language before doing this if we want header(card); footer(); onClickListener(new CardClickListener()); } @Override public void setCallback(@Nullable FeedAdapter.Callback callback) { super.setCallback(callback); if (headerView instanceof CardHeaderView) { ((CardHeaderView) headerView).setCallback(callback); } } private void image(@NonNull Uri uri) { imageView.loadImage(uri); } private void description(@NonNull String text) { descriptionView.setText(RichTextUtil.stripHtml(text)); } private void onClickListener(@NonNull OnClickListener listener) { imageView.setOnClickListener(listener); } private void header(@NonNull FeaturedImageCard card) { CardHeaderView header = new CardHeaderView(getContext()) .setTitle(card.title()) .setSubtitle(card.subtitle()) .setImage(R.drawable.icon_potd_photo_camera) .setImageCircleColor(R.color.gray_highlight) .setCard(card) .setCallback(getCallback()); header(header); } private void footer() { footer(new ActionFooterView(getContext()) .actionIcon(R.drawable.ic_file_download) .actionText(R.string.view_featured_image_card_download) .onActionListener(new CardDownloadListener()) .onShareListener(new CardShareListener())); } private void header(@NonNull View view) { ViewUtil.replace(headerView, view); headerView = view; } private void footer(@NonNull View view) { ViewUtil.replace(footerView, view); footerView = view; } private class CardClickListener implements OnClickListener { @Override public void onClick(View v) { if (getCallback() != null && getCard() != null) { getCallback().onFeaturedImageSelected(getCard()); } } } private class CardDownloadListener implements OnClickListener { @Override public void onClick(View v) { if (getCallback() != null && getCard() != null) { getCallback().onDownloadImage(getCard().baseImage()); } } } private class CardShareListener implements OnClickListener { @Override public void onClick(View v) { if (getCallback() != null && getCard() != null) { getCallback().onShareImage(getCard()); } } } }