package tv.emby.embyatv.presentation; /** * Created by Eric on 12/29/2014. * Modified ImageCard with no fade on the badge */ import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.Drawable; import android.support.v17.leanback.R; import android.support.v17.leanback.widget.BaseCardView; import android.text.TextUtils; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import mediabrowser.model.dto.BaseItemDto; import tv.emby.embyatv.TvApp; import tv.emby.embyatv.itemhandling.BaseRowItem; import tv.emby.embyatv.util.Utils; /** * A card view with an {@link ImageView} as its main region. */ public class MyImageCardView extends BaseCardView { private ImageView mBanner; private ViewGroup mInfoOverlay; private ImageView mOverlayIcon; private TextView mOverlayName; private TextView mOverlayCount; private ImageView mImageView; private View mInfoArea; private TextView mTitleView; private TextView mContentView; private ImageView mBadgeImage; private ImageView mFavIcon; private int BANNER_SIZE = Utils.convertDpToPixel(TvApp.getApplication(), 50); public MyImageCardView(Context context) { this(context, null, true); } public MyImageCardView(Context context, boolean showInfo) { this(context, null, showInfo); } public MyImageCardView(Context context, AttributeSet attrs, boolean showInfo) { this(context, attrs, R.attr.imageCardViewStyle, showInfo); } public MyImageCardView(Context context, AttributeSet attrs, int defStyle, boolean showInfo) { super(context, attrs, defStyle); if (!showInfo) { setCardType(CARD_TYPE_MAIN_ONLY); } LayoutInflater inflater = LayoutInflater.from(context); View v = inflater.inflate(tv.emby.embyatv.R.layout.image_card_view, this); mImageView = (ImageView) v.findViewById(tv.emby.embyatv.R.id.main_image); mInfoArea = v.findViewById(tv.emby.embyatv.R.id.info_field); mTitleView = (TextView) v.findViewById(tv.emby.embyatv.R.id.title_text); mContentView = (TextView) v.findViewById(tv.emby.embyatv.R.id.content_text); mBadgeImage = (ImageView) v.findViewById(tv.emby.embyatv.R.id.extra_badge); mOverlayName = (TextView) v.findViewById(tv.emby.embyatv.R.id.overlay_text); mOverlayName.setTypeface(TvApp.getApplication().getDefaultFont()); mOverlayCount = (TextView) v.findViewById(tv.emby.embyatv.R.id.overlay_count); mOverlayCount.setTypeface(TvApp.getApplication().getDefaultFont()); mOverlayIcon = (ImageView) v.findViewById(tv.emby.embyatv.R.id.icon); mInfoOverlay = (ViewGroup) v.findViewById(tv.emby.embyatv.R.id.name_overlay); mInfoOverlay.setVisibility(GONE); mFavIcon = (ImageView) v.findViewById(tv.emby.embyatv.R.id.favIcon); if (mInfoArea != null) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.lbImageCardView, defStyle, 0); try { setInfoAreaBackground( a.getDrawable(R.styleable.lbImageCardView_infoAreaBackground)); } finally { a.recycle(); } } } public void setBanner(int bannerResource) { if (mBanner == null) { mBanner = new ImageView(getContext()); mBanner.setLayoutParams(new ViewGroup.LayoutParams(BANNER_SIZE, BANNER_SIZE)); ((ViewGroup)getRootView()).addView(mBanner); } mBanner.setImageResource(bannerResource); mBanner.setVisibility(VISIBLE); } public final ImageView getMainImageView() { return mImageView; } public void setMainImageAdjustViewBounds(boolean adjustViewBounds) { if (mImageView != null) { mImageView.setAdjustViewBounds(adjustViewBounds); } } public void setPlayingIndicator(boolean playing) { if (playing) { mBadgeImage.setBackgroundResource(tv.emby.embyatv.R.drawable.eq_animation); mBadgeImage.setVisibility(VISIBLE); ((AnimationDrawable)mBadgeImage.getBackground()).start(); } else { mBadgeImage.setBackgroundResource(tv.emby.embyatv.R.drawable.blank10x10); } } public void setMainImageScaleType(ImageView.ScaleType scaleType) { if (mImageView != null) { mImageView.setScaleType(scaleType); } } /** * Set drawable with fade-in animation. */ public void setMainImage(Drawable drawable) { setMainImage(drawable, true); } /** * Set drawable with optional fade-in animation. */ public void setMainImage(Drawable drawable, boolean fade) { if (mImageView == null) { return; } mImageView.setImageDrawable(drawable); if (drawable == null) { mImageView.animate().cancel(); mImageView.setAlpha(1f); mImageView.setVisibility(View.INVISIBLE); } else { mImageView.setVisibility(View.VISIBLE); if (fade) { fadeIn(mImageView); } else { mImageView.animate().cancel(); mImageView.setAlpha(1f); } } } public void setMainImageDimensions(int width, int height) { ViewGroup.LayoutParams lp = mImageView.getLayoutParams(); lp.width = width; lp.height = height; mImageView.setLayoutParams(lp); if (mBanner != null) mBanner.setX(width - BANNER_SIZE); } public Drawable getMainImage() { if (mImageView == null) { return null; } return mImageView.getDrawable(); } public Drawable getInfoAreaBackground() { if (mInfoArea != null) { return mInfoArea.getBackground(); } return null; } public void setInfoAreaBackground(Drawable drawable) { if (mInfoArea != null) { mInfoArea.setBackground(drawable); if (mBadgeImage != null) { mBadgeImage.setBackground(drawable); } } } public void setInfoAreaBackgroundColor(int color) { if (mInfoArea != null) { mInfoArea.setBackgroundColor(color); if (mBadgeImage != null) { mBadgeImage.setBackgroundColor(color); } } } public void setTitleText(CharSequence text) { if (mTitleView == null) { return; } mTitleView.setText(text); setTextMaxLines(); } public void setOverlayText(String text) { if (getCardType() == BaseCardView.CARD_TYPE_MAIN_ONLY) { mOverlayName.setText(text); mInfoOverlay.setVisibility(VISIBLE); hideIcon(); } else { mInfoOverlay.setVisibility(GONE); } } public void setOverlayInfo(BaseRowItem item) { if (mOverlayName == null) return; if (getCardType() == BaseCardView.CARD_TYPE_MAIN_ONLY && item.showCardInfoOverlay()) { switch (item.getType()) { case "Photo": mOverlayName.setText(item.getBaseItem().getPremiereDate() != null ? android.text.format.DateFormat.getDateFormat(TvApp.getApplication()).format(Utils.convertToLocalDate(item.getBaseItem().getPremiereDate())) : item.getFullName()); mOverlayIcon.setImageResource(tv.emby.embyatv.R.drawable.camera); break; case "PhotoAlbum": mOverlayName.setText(item.getFullName()); mOverlayIcon.setImageResource(tv.emby.embyatv.R.drawable.photoalbum); break; case "Video": mOverlayName.setText(item.getFullName()); mOverlayIcon.setImageResource(tv.emby.embyatv.R.drawable.film); break; case "Playlist": case "MusicArtist": case "Person": mOverlayName.setText(item.getFullName()); hideIcon(); break; default: mOverlayName.setText(item.getFullName()); mOverlayIcon.setImageResource(item.isFolder() ? tv.emby.embyatv.R.drawable.foldersmall : tv.emby.embyatv.R.drawable.blank30x30); break; } mOverlayCount.setText(item.getChildCountStr()); mInfoOverlay.setVisibility(VISIBLE); } else { mInfoOverlay.setVisibility(GONE); } } protected int noIconMargin = Utils.convertDpToPixel(TvApp.getApplication(), 5); protected void hideIcon() { mOverlayIcon.setVisibility(GONE); RelativeLayout.LayoutParams parms = (RelativeLayout.LayoutParams) mOverlayName.getLayoutParams(); parms.rightMargin = noIconMargin; parms.leftMargin = noIconMargin; mOverlayName.setLayoutParams(parms); } public CharSequence getTitleText() { if (mTitleView == null) { return null; } return mTitleView.getText(); } public void setContentText(CharSequence text) { if (mContentView == null) { return; } mContentView.setText(text); setTextMaxLines(); } public CharSequence getContentText() { if (mContentView == null) { return null; } return mContentView.getText(); } public void setBadgeImage(Drawable drawable) { if (mBadgeImage == null) { return; } if (drawable != null) { mBadgeImage.setImageDrawable(drawable); mBadgeImage.setVisibility(View.VISIBLE); } else { mBadgeImage.setVisibility(View.GONE); } } public Drawable getBadgeImage() { if (mBadgeImage == null) { return null; } return mBadgeImage.getDrawable(); } private void fadeIn(View v) { v.setAlpha(0f); v.animate().alpha(1f).setDuration(v.getContext().getResources().getInteger( android.R.integer.config_shortAnimTime)).start(); } @Override public boolean hasOverlappingRendering() { return false; } private void setTextMaxLines() { if (TextUtils.isEmpty(getTitleText())) { mContentView.setMaxLines(2); } else { mContentView.setMaxLines(1); } if (TextUtils.isEmpty(getContentText())) { mTitleView.setMaxLines(2); } else { mTitleView.setMaxLines(1); } } public void clearBanner() { if (mBanner != null) { mBanner.setVisibility(GONE); } } public void showFavIcon(boolean show) { mFavIcon.setVisibility(show ? VISIBLE : GONE); } @Override protected void onDetachedFromWindow() { mImageView.animate().cancel(); mImageView.setAlpha(1f); super.onDetachedFromWindow(); } }