ImageCardView.java revision b6e24f60743bd2022dd496126f0ff683ff6b3713
1b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn/* 2b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * Copyright (C) 2014 The Android Open Source Project 3b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * 4b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * in compliance with the License. You may obtain a copy of the License at 6b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * 7b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * http://www.apache.org/licenses/LICENSE-2.0 8b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * 9b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * Unless required by applicable law or agreed to in writing, software distributed under the License 10b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * or implied. See the License for the specific language governing permissions and limitations under 12b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * the License. 13b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn */ 14b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournpackage android.support.v17.leanback.widget; 15b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 16b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.content.Context; 17b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.graphics.drawable.Drawable; 18b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.support.v17.leanback.R; 19b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilsonimport android.text.TextUtils; 20b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.util.AttributeSet; 21b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.view.LayoutInflater; 22b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.view.View; 23b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilsonimport android.view.ViewGroup; 24b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.widget.ImageView; 25b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.widget.TextView; 26b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 27b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournpublic class ImageCardView extends BaseCardView { 28b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 29b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn private ImageView mImageView; 30b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn private View mInfoArea; 31b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn private TextView mTitleView; 32b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn private TextView mContentView; 33b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn private ImageView mBadgeImage; 34b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn private ImageView mBadgeFadeMask; 35b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 36b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public ImageCardView(Context context) { 37b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn this(context, null); 38b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 39b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 40b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public ImageCardView(Context context, AttributeSet attrs) { 41b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn this(context, attrs, R.attr.imageCardViewStyle); 42b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 43b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 44b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public ImageCardView(Context context, AttributeSet attrs, int defStyle) { 45b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn super(context, attrs, defStyle); 46b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 47b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn LayoutInflater inflater = LayoutInflater.from(context); 48b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn View v = inflater.inflate(R.layout.lb_image_card_view, this); 49b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 50b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mImageView = (ImageView) v.findViewById(R.id.main_image); 51b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mImageView.setVisibility(View.INVISIBLE); 52b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mInfoArea = v.findViewById(R.id.info_field); 53b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mTitleView = (TextView) v.findViewById(R.id.title_text); 54b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mContentView = (TextView) v.findViewById(R.id.content_text); 55b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mBadgeImage = (ImageView) v.findViewById(R.id.extra_badge); 56b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mBadgeFadeMask = (ImageView) v.findViewById(R.id.fade_mask); 57b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 58b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 59b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public void setMainImage(Drawable drawable) { 60b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mImageView == null) { 61b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return; 62b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 63b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 64b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mImageView.setImageDrawable(drawable); 65b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson if (drawable == null) { 66b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mImageView.setVisibility(View.INVISIBLE); 67b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } else { 68b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mImageView.setVisibility(View.VISIBLE); 69b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson fadeIn(mImageView); 70b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } 71b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } 72b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson 73b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson public void setMainImageDimensions(int width, int height) { 74b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson ViewGroup.LayoutParams lp = mImageView.getLayoutParams(); 75b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson lp.width = width; 76b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson lp.height = height; 77b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mImageView.setLayoutParams(lp); 78b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 79b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 80b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public Drawable getMainImage() { 81b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mImageView == null) { 82b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return null; 83b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 84b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 85b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return mImageView.getDrawable(); 86b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 87b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 88b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public void setTitleText(CharSequence text) { 89b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mTitleView == null) { 90b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return; 91b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 92b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 93b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mTitleView.setText(text); 94b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson setTextMaxLines(); 95b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 96b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 97b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public CharSequence getTitleText() { 98b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mTitleView == null) { 99b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return null; 100b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 101b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 102b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return mTitleView.getText(); 103b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 104b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 105b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public void setContentText(CharSequence text) { 106b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mContentView == null) { 107b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return; 108b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 109b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 110b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mContentView.setText(text); 111b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson setTextMaxLines(); 112b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 113b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 114b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public CharSequence getContentText() { 115b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mContentView == null) { 116b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return null; 117b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 118b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 119b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return mContentView.getText(); 120b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 121b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 122b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public void setBadgeImage(Drawable drawable) { 123b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mBadgeImage == null) { 124b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return; 125b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 126b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 127b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (drawable != null) { 128b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mBadgeImage.setImageDrawable(drawable); 129b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mBadgeImage.setVisibility(View.VISIBLE); 130b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mBadgeFadeMask.setVisibility(View.VISIBLE); 131b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } else { 132b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mBadgeImage.setVisibility(View.GONE); 133b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mBadgeFadeMask.setVisibility(View.GONE); 134b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 135b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 136b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 137b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public Drawable getBadgeImage() { 138b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mBadgeImage == null) { 139b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return null; 140b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 141b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 142b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return mBadgeImage.getDrawable(); 143b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 144b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson 145b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson private void fadeIn(View v) { 146b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson v.setAlpha(0f); 147b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson v.animate().alpha(1f).setDuration(v.getContext().getResources().getInteger( 148b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson android.R.integer.config_shortAnimTime)).start(); 149b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } 150b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson 151b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson private void setTextMaxLines() { 152b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson if (TextUtils.isEmpty(getTitleText())) { 153b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mContentView.setMaxLines(2); 154b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } else { 155b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mContentView.setMaxLines(1); 156b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } 157b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson if (TextUtils.isEmpty(getContentText())) { 158b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mTitleView.setMaxLines(2); 159b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } else { 160b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mTitleView.setMaxLines(1); 161b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } 162b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } 163b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn} 164