1package android.support.v17.leanback.widget; 2 3import android.support.v17.leanback.R; 4 5import android.graphics.drawable.Drawable; 6import android.view.LayoutInflater; 7import android.view.View; 8import android.view.ViewGroup; 9import android.view.ViewGroup.MarginLayoutParams; 10import android.widget.ImageView; 11 12/** 13 * Presenter that responsible to create a ImageView and bind to DetailsOverviewRow. The default 14 * implementation uses {@link DetailsOverviewRow#getImageDrawable()} and binds to {@link ImageView}. 15 * <p> 16 * Subclass may override and has its own image view. Subclass may also download image from URL 17 * instead of using {@link DetailsOverviewRow#getImageDrawable()}. It's subclass's responsibility to 18 * call {@link FullWidthDetailsOverviewRowPresenter#notifyOnBindLogo(FullWidthDetailsOverviewRowPresenter.ViewHolder)} 19 * whenever {@link #isBoundToImage(ViewHolder, DetailsOverviewRow)} turned to true so that activity 20 * transition can be started. 21 */ 22public class DetailsOverviewLogoPresenter extends Presenter { 23 24 public static class ViewHolder extends Presenter.ViewHolder { 25 26 protected FullWidthDetailsOverviewRowPresenter mParentPresenter; 27 protected FullWidthDetailsOverviewRowPresenter.ViewHolder mParentViewHolder; 28 29 public ViewHolder(View view) { 30 super(view); 31 } 32 } 33 34 @Override 35 public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) { 36 View view = LayoutInflater.from(parent.getContext()) 37 .inflate(R.layout.lb_fullwidth_details_overview_logo, parent, false); 38 view.setLayoutParams(new ViewGroup.MarginLayoutParams(0, 0)); 39 return new ViewHolder(view); 40 } 41 42 /** 43 * Called from {@link FullWidthDetailsOverviewRowPresenter} to setup FullWidthDetailsOverviewRowPresenter 44 * and FullWidthDetailsOverviewRowPresenter.ViewHolder that hosts the logo. 45 * @param viewHolder 46 * @param parentViewHolder 47 * @param parentPresenter 48 */ 49 public void setContext(ViewHolder viewHolder, 50 FullWidthDetailsOverviewRowPresenter.ViewHolder parentViewHolder, 51 FullWidthDetailsOverviewRowPresenter parentPresenter) { 52 viewHolder.mParentViewHolder = parentViewHolder; 53 viewHolder.mParentPresenter = parentPresenter; 54 } 55 56 /** 57 * Returns true if the logo view is bound to image. Subclass may override. The default 58 * implementation returns true when {@link DetailsOverviewRow#getImageDrawable()} is not null. 59 * If subclass of DetailsOverviewLogoPresenter manages its own image drawable, it should 60 * override this function to report status correctly and invoke 61 * {@link FullWidthDetailsOverviewRowPresenter#notifyOnBindLogo(FullWidthDetailsOverviewRowPresenter.ViewHolder)} 62 * when image view is bound to the drawable. 63 */ 64 public boolean isBoundToImage(ViewHolder viewHolder, DetailsOverviewRow row) { 65 return row != null && row.getImageDrawable() != null; 66 } 67 68 @Override 69 public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { 70 DetailsOverviewRow row = (DetailsOverviewRow) item; 71 ImageView imageView = ((ImageView) viewHolder.view); 72 imageView.setImageDrawable(row.getImageDrawable()); 73 if (isBoundToImage((ViewHolder) viewHolder, row)) { 74 ViewGroup.LayoutParams lp = imageView.getLayoutParams(); 75 lp.width = row.getImageDrawable().getIntrinsicWidth(); 76 lp.height = row.getImageDrawable().getIntrinsicHeight(); 77 imageView.setLayoutParams(lp); 78 ViewHolder vh = (ViewHolder) viewHolder; 79 vh.mParentPresenter.notifyOnBindLogo(vh.mParentViewHolder); 80 } 81 } 82 83 @Override 84 public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { 85 } 86 87} 88