ImageCardView.java revision ceb7ab2ddd6e157cd4ade0f14a382c39428163c4
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;
17ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Guimport android.content.res.TypedArray;
18b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.graphics.drawable.Drawable;
19b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.support.v17.leanback.R;
20b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilsonimport android.text.TextUtils;
21b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.util.AttributeSet;
22b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.view.LayoutInflater;
23b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.view.View;
24b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilsonimport android.view.ViewGroup;
25b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.widget.ImageView;
269de363b8db05106b03d115c266859fe200d41db7Dake Guimport android.widget.ImageView.ScaleType;
27b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.widget.TextView;
28b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
29961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn/**
30961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn * A card view with an {@link ImageView} as its main region.
31961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn */
32b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournpublic class ImageCardView extends BaseCardView {
33b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
34b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private ImageView mImageView;
35b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private View mInfoArea;
36b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private TextView mTitleView;
37b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private TextView mContentView;
38b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private ImageView mBadgeImage;
39b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private ImageView mBadgeFadeMask;
40b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
41b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public ImageCardView(Context context) {
42b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        this(context, null);
43b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
44b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
45b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public ImageCardView(Context context, AttributeSet attrs) {
46b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        this(context, attrs, R.attr.imageCardViewStyle);
47b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
48b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
49b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public ImageCardView(Context context, AttributeSet attrs, int defStyle) {
50b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        super(context, attrs, defStyle);
51b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
52b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        LayoutInflater inflater = LayoutInflater.from(context);
53b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        View v = inflater.inflate(R.layout.lb_image_card_view, this);
54b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
55b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mImageView = (ImageView) v.findViewById(R.id.main_image);
56b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        mImageView.setVisibility(View.INVISIBLE);
57b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mInfoArea = v.findViewById(R.id.info_field);
58b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mTitleView = (TextView) v.findViewById(R.id.title_text);
59b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mContentView = (TextView) v.findViewById(R.id.content_text);
60b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mBadgeImage = (ImageView) v.findViewById(R.id.extra_badge);
61b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mBadgeFadeMask = (ImageView) v.findViewById(R.id.fade_mask);
62ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
63ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
64ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.lbImageCardView,
65ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                    defStyle, 0);
66ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            try {
67ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                setInfoAreaBackground(
68ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                        a.getDrawable(R.styleable.lbImageCardView_infoAreaBackground));
69ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            } finally {
70ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                a.recycle();
71ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            }
72ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
73b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
74b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
759de363b8db05106b03d115c266859fe200d41db7Dake Gu    public final ImageView getMainImageView() {
769de363b8db05106b03d115c266859fe200d41db7Dake Gu        return mImageView;
779de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
789de363b8db05106b03d115c266859fe200d41db7Dake Gu
799de363b8db05106b03d115c266859fe200d41db7Dake Gu    public void setMainImageAdjustViewBounds(boolean adjustViewBounds) {
809de363b8db05106b03d115c266859fe200d41db7Dake Gu        if (mImageView != null) {
819de363b8db05106b03d115c266859fe200d41db7Dake Gu            mImageView.setAdjustViewBounds(adjustViewBounds);
829de363b8db05106b03d115c266859fe200d41db7Dake Gu        }
839de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
849de363b8db05106b03d115c266859fe200d41db7Dake Gu
859de363b8db05106b03d115c266859fe200d41db7Dake Gu    public void setMainImageScaleType(ScaleType scaleType) {
869de363b8db05106b03d115c266859fe200d41db7Dake Gu        if (mImageView != null) {
879de363b8db05106b03d115c266859fe200d41db7Dake Gu            mImageView.setScaleType(scaleType);
889de363b8db05106b03d115c266859fe200d41db7Dake Gu        }
899de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
909de363b8db05106b03d115c266859fe200d41db7Dake Gu
91932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    /**
92932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu     * Set drawable with fade-in animation.
93932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu     */
94b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setMainImage(Drawable drawable) {
95932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu        setMainImage(drawable, true);
96932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    }
97932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu
98932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    /**
99932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu     * Set drawable with optional fade-in animation.
100932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu     */
101932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    public void setMainImage(Drawable drawable, boolean fade) {
102b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mImageView == null) {
103b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
104b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
105b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
106b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mImageView.setImageDrawable(drawable);
107b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        if (drawable == null) {
108932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            mImageView.animate().cancel();
109932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            mImageView.setAlpha(1f);
110b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mImageView.setVisibility(View.INVISIBLE);
111b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        } else {
112b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mImageView.setVisibility(View.VISIBLE);
113932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            if (fade) {
114932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu                fadeIn(mImageView);
115932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            } else {
116932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu                mImageView.animate().cancel();
117932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu                mImageView.setAlpha(1f);
118932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            }
119b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        }
120b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    }
121b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
122b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    public void setMainImageDimensions(int width, int height) {
123b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        ViewGroup.LayoutParams lp = mImageView.getLayoutParams();
124b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        lp.width = width;
125b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        lp.height = height;
126b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        mImageView.setLayoutParams(lp);
127b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
128b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
129b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public Drawable getMainImage() {
130b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mImageView == null) {
131b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
132b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
133b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
134b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mImageView.getDrawable();
135b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
136b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
137ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    public Drawable getInfoAreaBackground() {
138ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
139ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            return mInfoArea.getBackground();
140ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
141ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        return null;
142ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    }
143ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
144ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    public void setInfoAreaBackground(Drawable drawable) {
145ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
146ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            mInfoArea.setBackground(drawable);
147ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            if (mBadgeImage != null) {
148ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                mBadgeImage.setBackground(drawable);
149ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            }
150ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
151ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    }
152ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
153ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    public void setInfoAreaBackgroundColor(int color) {
154ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
155ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            mInfoArea.setBackgroundColor(color);
156ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            if (mBadgeImage != null) {
157ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                mBadgeImage.setBackgroundColor(color);
158ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            }
159ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
160ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    }
161ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
162b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setTitleText(CharSequence text) {
163b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mTitleView == null) {
164b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
165b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
166b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
167b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mTitleView.setText(text);
168b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        setTextMaxLines();
169b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
170b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
171b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public CharSequence getTitleText() {
172b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mTitleView == null) {
173b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
174b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
175b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
176b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mTitleView.getText();
177b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
178b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
179b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setContentText(CharSequence text) {
180b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mContentView == null) {
181b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
182b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
183b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
184b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mContentView.setText(text);
185b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        setTextMaxLines();
186b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
187b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
188b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public CharSequence getContentText() {
189b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mContentView == null) {
190b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
191b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
192b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
193b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mContentView.getText();
194b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
195b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
196b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setBadgeImage(Drawable drawable) {
197b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mBadgeImage == null) {
198b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
199b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
200b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
201b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (drawable != null) {
202b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeImage.setImageDrawable(drawable);
203b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeImage.setVisibility(View.VISIBLE);
204b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeFadeMask.setVisibility(View.VISIBLE);
205b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        } else {
206b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeImage.setVisibility(View.GONE);
207b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeFadeMask.setVisibility(View.GONE);
208b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
209b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
210b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
211b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public Drawable getBadgeImage() {
212b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mBadgeImage == null) {
213b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
214b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
215b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
216b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mBadgeImage.getDrawable();
217b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
218b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
219b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    private void fadeIn(View v) {
220b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        v.setAlpha(0f);
221b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        v.animate().alpha(1f).setDuration(v.getContext().getResources().getInteger(
222b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson                android.R.integer.config_shortAnimTime)).start();
223b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    }
224b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
225ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu    @Override
226ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu    public boolean hasOverlappingRendering() {
227ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu        return false;
228ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu    }
229ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu
230b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    private void setTextMaxLines() {
231b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        if (TextUtils.isEmpty(getTitleText())) {
232b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mContentView.setMaxLines(2);
233b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        } else {
234b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mContentView.setMaxLines(1);
235b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        }
236b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        if (TextUtils.isEmpty(getContentText())) {
237b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mTitleView.setMaxLines(2);
238b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        } else {
239b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mTitleView.setMaxLines(1);
240b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        }
241b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    }
2425358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout
2435358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout    @Override
2445358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout    protected void onDetachedFromWindow() {
2455358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout        mImageView.animate().cancel();
2465358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout        mImageView.setAlpha(1f);
2475358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout        super.onDetachedFromWindow();
2485358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout    }
249b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn}
250