ImageCardView.java revision 9de363b8db05106b03d115c266859fe200d41db7
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;
259de363b8db05106b03d115c266859fe200d41db7Dake Guimport android.widget.ImageView.ScaleType;
26b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.widget.TextView;
27b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
28961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn/**
29961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn * A card view with an {@link ImageView} as its main region.
30961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn */
31b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournpublic class ImageCardView extends BaseCardView {
32b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
33b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private ImageView mImageView;
34b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private View mInfoArea;
35b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private TextView mTitleView;
36b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private TextView mContentView;
37b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private ImageView mBadgeImage;
38b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private ImageView mBadgeFadeMask;
39b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
40b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public ImageCardView(Context context) {
41b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        this(context, null);
42b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
43b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
44b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public ImageCardView(Context context, AttributeSet attrs) {
45b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        this(context, attrs, R.attr.imageCardViewStyle);
46b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
47b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
48b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public ImageCardView(Context context, AttributeSet attrs, int defStyle) {
49b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        super(context, attrs, defStyle);
50b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
51b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        LayoutInflater inflater = LayoutInflater.from(context);
52b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        View v = inflater.inflate(R.layout.lb_image_card_view, this);
53b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
54b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mImageView = (ImageView) v.findViewById(R.id.main_image);
55b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        mImageView.setVisibility(View.INVISIBLE);
56b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mInfoArea = v.findViewById(R.id.info_field);
57b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mTitleView = (TextView) v.findViewById(R.id.title_text);
58b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mContentView = (TextView) v.findViewById(R.id.content_text);
59b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mBadgeImage = (ImageView) v.findViewById(R.id.extra_badge);
60b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mBadgeFadeMask = (ImageView) v.findViewById(R.id.fade_mask);
61b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
62b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
639de363b8db05106b03d115c266859fe200d41db7Dake Gu    public final ImageView getMainImageView() {
649de363b8db05106b03d115c266859fe200d41db7Dake Gu        return mImageView;
659de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
669de363b8db05106b03d115c266859fe200d41db7Dake Gu
679de363b8db05106b03d115c266859fe200d41db7Dake Gu    public void setMainImageAdjustViewBounds(boolean adjustViewBounds) {
689de363b8db05106b03d115c266859fe200d41db7Dake Gu        if (mImageView != null) {
699de363b8db05106b03d115c266859fe200d41db7Dake Gu            mImageView.setAdjustViewBounds(adjustViewBounds);
709de363b8db05106b03d115c266859fe200d41db7Dake Gu        }
719de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
729de363b8db05106b03d115c266859fe200d41db7Dake Gu
739de363b8db05106b03d115c266859fe200d41db7Dake Gu    public void setMainImageScaleType(ScaleType scaleType) {
749de363b8db05106b03d115c266859fe200d41db7Dake Gu        if (mImageView != null) {
759de363b8db05106b03d115c266859fe200d41db7Dake Gu            mImageView.setScaleType(scaleType);
769de363b8db05106b03d115c266859fe200d41db7Dake Gu        }
779de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
789de363b8db05106b03d115c266859fe200d41db7Dake Gu
79b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setMainImage(Drawable drawable) {
80b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mImageView == null) {
81b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
82b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
83b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
84b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mImageView.setImageDrawable(drawable);
85b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        if (drawable == null) {
86b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mImageView.setVisibility(View.INVISIBLE);
87b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        } else {
88b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mImageView.setVisibility(View.VISIBLE);
89b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            fadeIn(mImageView);
90b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        }
91b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    }
92b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
93b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    public void setMainImageDimensions(int width, int height) {
94b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        ViewGroup.LayoutParams lp = mImageView.getLayoutParams();
95b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        lp.width = width;
96b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        lp.height = height;
97b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        mImageView.setLayoutParams(lp);
98b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
99b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
100b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public Drawable getMainImage() {
101b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mImageView == null) {
102b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
103b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
104b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
105b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mImageView.getDrawable();
106b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
107b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
108b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setTitleText(CharSequence text) {
109b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mTitleView == null) {
110b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
111b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
112b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
113b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mTitleView.setText(text);
114b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        setTextMaxLines();
115b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
116b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
117b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public CharSequence getTitleText() {
118b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mTitleView == null) {
119b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
120b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
121b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
122b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mTitleView.getText();
123b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
124b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
125b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setContentText(CharSequence text) {
126b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mContentView == null) {
127b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
128b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
129b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
130b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mContentView.setText(text);
131b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        setTextMaxLines();
132b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
133b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
134b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public CharSequence getContentText() {
135b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mContentView == null) {
136b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
137b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
138b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
139b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mContentView.getText();
140b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
141b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
142b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setBadgeImage(Drawable drawable) {
143b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mBadgeImage == null) {
144b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
145b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
146b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
147b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (drawable != null) {
148b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeImage.setImageDrawable(drawable);
149b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeImage.setVisibility(View.VISIBLE);
150b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeFadeMask.setVisibility(View.VISIBLE);
151b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        } else {
152b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeImage.setVisibility(View.GONE);
153b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeFadeMask.setVisibility(View.GONE);
154b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
155b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
156b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
157b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public Drawable getBadgeImage() {
158b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mBadgeImage == null) {
159b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
160b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
161b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
162b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mBadgeImage.getDrawable();
163b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
164b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
165b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    private void fadeIn(View v) {
166b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        v.setAlpha(0f);
167b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        v.animate().alpha(1f).setDuration(v.getContext().getResources().getInteger(
168b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson                android.R.integer.config_shortAnimTime)).start();
169b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    }
170b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
171b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    private void setTextMaxLines() {
172b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        if (TextUtils.isEmpty(getTitleText())) {
173b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mContentView.setMaxLines(2);
174b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        } else {
175b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mContentView.setMaxLines(1);
176b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        }
177b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        if (TextUtils.isEmpty(getContentText())) {
178b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mTitleView.setMaxLines(2);
179b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        } else {
180b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mTitleView.setMaxLines(1);
181b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        }
182b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    }
183b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn}
184