/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package android.support.v17.leanback.widget; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.support.v17.leanback.R; 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.ImageView.ScaleType; import android.widget.TextView; /** * A card view with an {@link ImageView} as its main region. */ public class ImageCardView extends BaseCardView { private ImageView mImageView; private View mInfoArea; private TextView mTitleView; private TextView mContentView; private ImageView mBadgeImage; private ImageView mBadgeFadeMask; private boolean mAttachedToWindow; public ImageCardView(Context context) { this(context, null); } public ImageCardView(Context context, AttributeSet attrs) { this(context, attrs, R.attr.imageCardViewStyle); } public ImageCardView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); LayoutInflater inflater = LayoutInflater.from(context); View v = inflater.inflate(R.layout.lb_image_card_view, this); mImageView = (ImageView) v.findViewById(R.id.main_image); mImageView.setVisibility(View.INVISIBLE); mInfoArea = v.findViewById(R.id.info_field); mTitleView = (TextView) v.findViewById(R.id.title_text); mContentView = (TextView) v.findViewById(R.id.content_text); mBadgeImage = (ImageView) v.findViewById(R.id.extra_badge); mBadgeFadeMask = (ImageView) v.findViewById(R.id.fade_mask); 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 final ImageView getMainImageView() { return mImageView; } public void setMainImageAdjustViewBounds(boolean adjustViewBounds) { if (mImageView != null) { mImageView.setAdjustViewBounds(adjustViewBounds); } } public void setMainImageScaleType(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(); } 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); } 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 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); mBadgeFadeMask.setVisibility(View.VISIBLE); } else { mBadgeImage.setVisibility(View.GONE); mBadgeFadeMask.setVisibility(View.GONE); } } public Drawable getBadgeImage() { if (mBadgeImage == null) { return null; } return mBadgeImage.getDrawable(); } private void fadeIn() { mImageView.setAlpha(0f); if (mAttachedToWindow) { mImageView.animate().alpha(1f).setDuration(mImageView.getResources().getInteger( android.R.integer.config_shortAnimTime)); } } @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); } } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); mAttachedToWindow = true; if (mImageView.getAlpha() == 0) { fadeIn(); } } @Override protected void onDetachedFromWindow() { mAttachedToWindow = false; mImageView.animate().cancel(); mImageView.setAlpha(1f); super.onDetachedFromWindow(); } }