ImageCardViewPresenter.java revision 86163d539e1aeb9ae7612def7aaf7dbfc5b88f28
1/* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 * in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the License 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 * or implied. See the License for the specific language governing permissions and limitations under 12 * the License. 13 */ 14 15package android.support.v17.leanback.supportleanbackshowcase.cards.presenters; 16 17import android.content.Context; 18import android.graphics.drawable.ColorDrawable; 19import android.graphics.drawable.Drawable; 20import android.support.v17.leanback.supportleanbackshowcase.Constants; 21import android.support.v17.leanback.supportleanbackshowcase.R; 22import android.support.v17.leanback.supportleanbackshowcase.Utils; 23import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card; 24import android.support.v17.leanback.supportleanbackshowcase.cards.views.ImageCardViewReplacement; 25import android.util.Log; 26import android.view.View; 27 28import com.squareup.picasso.Picasso; 29 30import java.util.HashMap; 31 32/** 33 * A ImageCardViewPresenter is used to generate Views and bind Objects to them on demand. It 34 * contains an {@link ImageCardViewReplacement}. 35 */ 36public class ImageCardViewPresenter extends AbstractCardPresenter<ImageCardViewReplacement> { 37 38 private static final String TAG = "ImageCardViewPresenter"; 39 private final int mImageWidthInDp; 40 private final int mImageHeightDp; 41 private final Drawable mLoadingErrorDrawable; 42 private final HashMap<Object, Integer> mSelectedColors = new HashMap<Object, Integer>(); 43 private int mDefaultFooterColor; 44 45 public ImageCardViewPresenter(Context context, int imageWidthInDp, int imageHeightInDp) { 46 super(context); 47 int color = context.getResources().getColor(R.color.loading_error_card_background); 48 mLoadingErrorDrawable = new ColorDrawable(color); 49 50 mDefaultFooterColor = context.getResources() 51 .getColor(R.color.default_card_footer_background_color); 52 mImageWidthInDp = imageWidthInDp; 53 mImageHeightDp = imageHeightInDp; 54 } 55 56 @Override protected ImageCardViewReplacement onCreateView() { 57 if (Constants.LOCAL_LOGD) Log.d(TAG, "onCreateView()"); 58 final ImageCardViewReplacement cardView = new ImageCardViewReplacement(getContext(), 59 mImageWidthInDp, 60 mImageHeightDp); 61 cardView.setOnFocusChangeListener(new View.OnFocusChangeListener() { 62 @Override public void onFocusChange(View v, boolean hasFocus) { 63 udateCardUi(cardView); 64 } 65 }); 66 return cardView; 67 } 68 69 @Override public void onBindViewHolder(Card card, ImageCardViewReplacement cardView) { 70 if (Constants.LOCAL_LOGD) Log.d(TAG, "onBindViewHolder(Card,ImageCardViewReplacement)"); 71 cardView.setTag(card); 72 73 // Display description iff there is one. 74 if (card.getDescription() == null || card.getDescription().length() == 0) { 75 cardView.getSecondaryTextView().setVisibility(View.GONE); 76 cardView.getPrimaryTextView().setLines(2); 77 cardView.getPrimaryTextView().setMaxLines(2); 78 } else { 79 cardView.getPrimaryTextView().setLines(1); 80 cardView.getPrimaryTextView().setMaxLines(1); 81 cardView.getSecondaryTextView().setText(card.getDescription()); 82 cardView.getSecondaryTextView().setVisibility(View.VISIBLE); 83 } 84 85 // Display title iff there is one. 86 if (card.getTitle() == null || card.getTitle().length() == 0) { 87 cardView.getPrimaryTextView().setVisibility(View.GONE); 88 cardView.getSecondaryTextView().setLines(2); 89 cardView.getSecondaryTextView().setMaxLines(2); 90 } else { 91 cardView.getSecondaryTextView().setLines(1); 92 cardView.getSecondaryTextView().setMaxLines(1); 93 cardView.getPrimaryTextView().setText(card.getTitle()); 94 cardView.getPrimaryTextView().setVisibility(View.VISIBLE); 95 } 96 // Load main image from an URI or a local resource. 97 if (card.getImageURI() != null) { 98 Utils.loadImageFromUri(getContext(), card.getImageURI(), cardView.getImageView(), 99 mImageWidthInDp, mImageHeightDp, true, mLoadingErrorDrawable); 100 } else if (card.getLocalImageResourceName() != null) { 101 int resourceId = getContext().getResources() 102 .getIdentifier(card.getLocalImageResourceName(), 103 "drawable", getContext().getPackageName()); 104 Picasso.with(getContext()).load(resourceId).resize(mImageWidthInDp, mImageHeightDp) 105 .centerCrop().into(cardView.getImageView()); 106 } 107 108 // Load footer icon from a local resource or hide it. 109 cardView.getViewById(R.id.container).setVisibility(View.VISIBLE); 110 if (card.getFooterLocalImageResourceName() != null) { 111 int resourceId = getContext().getResources() 112 .getIdentifier(card.getFooterLocalImageResourceName(), 113 "drawable", getContext().getPackageName()); 114 Picasso.with(getContext()).load(resourceId).into(cardView.getIconView()); 115 cardView.getIconView().setVisibility(View.VISIBLE); 116 } else { 117 if (card.getDescription() == null || card.getDescription().isEmpty()) { 118 cardView.getViewById(R.id.container).setVisibility(View.GONE); 119 } 120 cardView.getIconView().setVisibility(View.GONE); 121 } 122 123 // Update background color depending on the card's focused state. 124 udateCardUi(cardView); 125 } 126 127 private void udateCardUi(ImageCardViewReplacement view) { 128 int color = mDefaultFooterColor; 129 130 if (view.getTag() != null) { 131 Card card = (Card) view.getTag(); 132 if (card.getSelectedColor() != -1 && view.isSelected()) { 133 color = card.getSelectedColor(); 134 } 135 if (card.getFooterColor() != -1) { 136 color = card.getFooterColor(); 137 } 138 } 139 view.getInfoBoxView().setBackgroundColor(color); 140 } 141} 142