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