package org.wikipedia.views; import android.content.Context; import android.support.annotation.DrawableRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.v4.content.ContextCompat; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; import org.wikipedia.R; import org.wikipedia.util.FeedbackUtil; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.OnLongClick; import static org.wikipedia.util.ResourceUtil.getThemedAttributeId; /* * TODO: Use this for future RecyclerView updates where we show a list of pages * (e.g. History, Search, Disambiguation) */ public class PageItemView<T> extends FrameLayout { public interface Callback<T> { void onClick(@Nullable T item); boolean onLongClick(@Nullable T item); void onThumbClick(@Nullable T item); void onActionClick(@Nullable T item, @NonNull PageItemView view); void onSecondaryActionClick(@Nullable T item, @NonNull PageItemView view); } @BindView(R.id.page_list_item_title) TextView titleView; @BindView(R.id.page_list_item_description) TextView descriptionView; @BindView(R.id.page_list_item_image) SimpleDraweeView imageView; @BindView(R.id.page_list_item_action_primary) ImageView primaryActionView; @BindView(R.id.page_list_item_action_secondary) ImageView secondaryActionView; @BindView(R.id.page_list_item_selected_image) View imageSelectedView; @BindView(R.id.page_list_header_text) GoneIfEmptyTextView headerView; @Nullable private Callback<T> callback; @Nullable private T item; private boolean selected; public PageItemView(@NonNull Context context) { super(context); init(); } public void setItem(@Nullable T item) { this.item = item; } public void setCallback(@Nullable Callback<T> callback) { this.callback = callback; } public void setTitle(@Nullable CharSequence text) { titleView.setText(text); } public void setDescription(@Nullable CharSequence text) { descriptionView.setText(text); } public void setImageUrl(@Nullable String url) { ViewUtil.loadImageUrlInto(imageView, url); } public void setActionIcon(@DrawableRes int id) { primaryActionView.setImageResource(id); primaryActionView.setVisibility(VISIBLE); } public void setActionHint(@StringRes int id) { primaryActionView.setContentDescription(getContext().getString(id)); } public void setSecondaryActionIcon(@DrawableRes int id, boolean show) { if (show) { secondaryActionView.setImageResource(id); } secondaryActionView.setVisibility(show ? VISIBLE : GONE); } public void setSecondaryActionHint(@StringRes int id) { secondaryActionView.setContentDescription(getContext().getString(id)); } public void setHeaderText(@Nullable CharSequence text) { headerView.setText(text); } public void setSelected(boolean selected) { if (this.selected != selected) { this.selected = selected; updateSelectedState(); } } @OnClick(R.id.page_list_item_container) void onClick() { if (callback != null) { callback.onClick(item); } } @OnLongClick(R.id.page_list_item_container) boolean onLongClick() { if (callback != null) { return callback.onLongClick(item); } return false; } @OnClick(R.id.page_list_item_image_container) void onThumbClick() { if (callback != null) { callback.onThumbClick(item); } } @OnClick(R.id.page_list_item_action_primary) void onActionClick() { if (callback != null) { callback.onActionClick(item, this); } } @OnClick(R.id.page_list_item_action_secondary) void onSecondaryActionClick() { if (callback != null) { callback.onSecondaryActionClick(item, this); } } private void init() { inflate(getContext(), R.layout.item_page_list_entry, this); ButterKnife.bind(this); setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); FeedbackUtil.setToolbarButtonLongPressToast(primaryActionView); FeedbackUtil.setToolbarButtonLongPressToast(secondaryActionView); } private void updateSelectedState() { imageView.setVisibility(selected ? GONE : VISIBLE); imageSelectedView.setVisibility(selected ? VISIBLE : GONE); // TODO: animate? if (selected) { setBackgroundColor(ContextCompat.getColor(getContext(), getThemedAttributeId(getContext(), R.attr.multi_select_background_color))); } else { setBackground(null); } } }