package org.wikipedia.feed.view; import android.content.Context; import android.content.res.ColorStateList; import android.support.annotation.ColorRes; import android.support.annotation.DrawableRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.annotation.VisibleForTesting; import android.support.v4.content.ContextCompat; import android.support.v4.view.ViewCompat; import android.support.v7.widget.AppCompatImageView; import android.support.v7.widget.PopupMenu; import android.view.MenuItem; import android.view.View; import android.widget.FrameLayout; import android.widget.TextView; import org.wikipedia.R; import org.wikipedia.feed.model.Card; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class CardHeaderView extends FrameLayout { public interface Callback { boolean onRequestDismissCard(@NonNull Card card); } @BindView(R.id.view_card_header_image) AppCompatImageView imageView; @BindView(R.id.view_card_header_title) TextView titleView; @BindView(R.id.view_card_header_subtitle) TextView subtitleView; @Nullable private Card card; @Nullable private Callback callback; public CardHeaderView(Context context) { super(context); inflate(context, R.layout.view_card_header, this); ButterKnife.bind(this); } @NonNull public CardHeaderView setCard(@NonNull Card card) { this.card = card; return this; } @NonNull public CardHeaderView setCallback(@Nullable Callback callback) { this.callback = callback; return this; } @NonNull public CardHeaderView setImage(@DrawableRes int resId) { imageView.setImageResource(resId); return this; } @NonNull public CardHeaderView setImageCircleColor(@ColorRes int color) { ColorStateList colorStateList = new ColorStateList( new int[][]{new int[]{}}, new int[]{ContextCompat.getColor(getContext(), color)} ); ViewCompat.setBackgroundTintList(imageView, colorStateList); return this; } @NonNull public CardHeaderView setTitle(@Nullable CharSequence title) { titleView.setText(title); return this; } @NonNull public CardHeaderView setTitle(@StringRes int id) { titleView.setText(id); return this; } @NonNull public CardHeaderView setSubtitle(@Nullable CharSequence subtitle) { subtitleView.setText(subtitle); return this; } @VisibleForTesting @Nullable Card getCard() { return card; } @OnClick(R.id.view_list_card_header_menu) void onMenuClick(View v) { showOverflowMenu(v); } private void showOverflowMenu(View anchorView) { PopupMenu menu = new PopupMenu(anchorView.getContext(), anchorView); menu.getMenuInflater().inflate(R.menu.menu_feed_card_header, menu.getMenu()); menu.setOnMenuItemClickListener(new CardHeaderMenuClickListener()); menu.show(); } private class CardHeaderMenuClickListener implements PopupMenu.OnMenuItemClickListener { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.menu_feed_card_dismiss: if (callback != null & card != null) { return callback.onRequestDismissCard(card); } return false; default: return false; } } } }