package org.wikipedia.feed.view;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
import android.support.v7.widget.PopupMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import org.apache.commons.lang3.StringUtils;
import org.wikipedia.R;
import org.wikipedia.feed.model.Card;
import org.wikipedia.history.HistoryEntry;
import org.wikipedia.views.GoneIfEmptyTextView;
import org.wikipedia.views.ViewUtil;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class ListCardItemView extends FrameLayout {
public interface Callback {
void onSelectPage(@NonNull Card card, @NonNull HistoryEntry entry);
void onAddPageToList(@NonNull HistoryEntry entry);
void onSharePage(@NonNull HistoryEntry entry);
}
@BindView(R.id.view_list_card_item_image) SimpleDraweeView imageView;
@BindView(R.id.view_list_card_item_title) TextView titleView;
@BindView(R.id.view_list_card_item_subtitle) GoneIfEmptyTextView subtitleView;
@Nullable private Card card;
@Nullable private Callback callback;
@Nullable private HistoryEntry entry;
public ListCardItemView(Context context) {
super(context);
setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
inflate(getContext(), R.layout.view_list_card_item, this);
ButterKnife.bind(this);
}
@NonNull public ListCardItemView setCard(@Nullable Card card) {
this.card = card;
return this;
}
@NonNull public ListCardItemView setCallback(@Nullable Callback callback) {
this.callback = callback;
return this;
}
@NonNull public ListCardItemView setHistoryEntry(@NonNull HistoryEntry entry) {
this.entry = entry;
setTitle(entry.getTitle().getDisplayText());
setSubtitle(entry.getTitle().getDescription());
setImage(entry.getTitle().getThumbUrl());
return this;
}
@OnClick void onClick(View view) {
if (callback != null && entry != null && card != null) {
callback.onSelectPage(card, entry);
}
}
@OnClick(R.id.view_list_card_item_menu) void showOverflowMenu(View anchorView) {
PopupMenu menu = new PopupMenu(getContext(), anchorView);
menu.getMenuInflater().inflate(R.menu.menu_feed_card_item, menu.getMenu());
menu.setOnMenuItemClickListener(new CardItemMenuClickListener());
menu.show();
}
@VisibleForTesting @Nullable Callback getCallback() {
return callback;
}
@VisibleForTesting @Nullable HistoryEntry getHistoryEntry() {
return entry;
}
@VisibleForTesting void setImage(@Nullable String url) {
ViewUtil.loadImageUrlInto(imageView, url);
}
@VisibleForTesting void setTitle(@Nullable CharSequence text) {
titleView.setText(text);
}
@VisibleForTesting void setSubtitle(@Nullable CharSequence text) {
subtitleView.setText(text != null ? StringUtils.capitalize(text.toString()) : null);
}
private class CardItemMenuClickListener implements PopupMenu.OnMenuItemClickListener {
@Override public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_feed_card_item_save:
if (callback != null && entry != null) {
callback.onAddPageToList(entry);
return true;
}
break;
case R.id.menu_feed_card_item_share:
if (callback != null && entry != null) {
callback.onSharePage(entry);
return true;
}
break;
default:
break;
}
return false;
}
}
}