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;
4007a94289970bb0badbd427b40eca97131638874dCraig Stout    private boolean mAttachedToWindow;
41b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
42b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public ImageCardView(Context context) {
43b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        this(context, null);
44b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
45b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
46b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public ImageCardView(Context context, AttributeSet attrs) {
47b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        this(context, attrs, R.attr.imageCardViewStyle);
48b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
49b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
50b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public ImageCardView(Context context, AttributeSet attrs, int defStyle) {
51b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        super(context, attrs, defStyle);
52b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
53b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        LayoutInflater inflater = LayoutInflater.from(context);
54b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        View v = inflater.inflate(R.layout.lb_image_card_view, this);
55b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
56b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mImageView = (ImageView) v.findViewById(R.id.main_image);
57b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        mImageView.setVisibility(View.INVISIBLE);
58b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mInfoArea = v.findViewById(R.id.info_field);
59b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mTitleView = (TextView) v.findViewById(R.id.title_text);
60b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mContentView = (TextView) v.findViewById(R.id.content_text);
61b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mBadgeImage = (ImageView) v.findViewById(R.id.extra_badge);
62b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mBadgeFadeMask = (ImageView) v.findViewById(R.id.fade_mask);
63ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
64ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
65ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.lbImageCardView,
66ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                    defStyle, 0);
67ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            try {
68ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                setInfoAreaBackground(
69ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                        a.getDrawable(R.styleable.lbImageCardView_infoAreaBackground));
70ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            } finally {
71ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                a.recycle();
72ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            }
73ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
74b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
75b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
769de363b8db05106b03d115c266859fe200d41db7Dake Gu    public final ImageView getMainImageView() {
779de363b8db05106b03d115c266859fe200d41db7Dake Gu        return mImageView;
789de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
799de363b8db05106b03d115c266859fe200d41db7Dake Gu
809de363b8db05106b03d115c266859fe200d41db7Dake Gu    public void setMainImageAdjustViewBounds(boolean adjustViewBounds) {
819de363b8db05106b03d115c266859fe200d41db7Dake Gu        if (mImageView != null) {
829de363b8db05106b03d115c266859fe200d41db7Dake Gu            mImageView.setAdjustViewBounds(adjustViewBounds);
839de363b8db05106b03d115c266859fe200d41db7Dake Gu        }
849de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
859de363b8db05106b03d115c266859fe200d41db7Dake Gu
869de363b8db05106b03d115c266859fe200d41db7Dake Gu    public void setMainImageScaleType(ScaleType scaleType) {
879de363b8db05106b03d115c266859fe200d41db7Dake Gu        if (mImageView != null) {
889de363b8db05106b03d115c266859fe200d41db7Dake Gu            mImageView.setScaleType(scaleType);
899de363b8db05106b03d115c266859fe200d41db7Dake Gu        }
909de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
919de363b8db05106b03d115c266859fe200d41db7Dake Gu
92932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    /**
93932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu     * Set drawable with fade-in animation.
94932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu     */
95b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setMainImage(Drawable drawable) {
96932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu        setMainImage(drawable, true);
97932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    }
98932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu
99932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    /**
100932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu     * Set drawable with optional fade-in animation.
101932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu     */
102932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    public void setMainImage(Drawable drawable, boolean fade) {
103b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mImageView == null) {
104b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
105b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
106b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
107b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mImageView.setImageDrawable(drawable);
108b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        if (drawable == null) {
109932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            mImageView.animate().cancel();
110932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            mImageView.setAlpha(1f);
111b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mImageView.setVisibility(View.INVISIBLE);
112b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        } else {
113b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mImageView.setVisibility(View.VISIBLE);
114932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            if (fade) {
11507a94289970bb0badbd427b40eca97131638874dCraig Stout                fadeIn();
116932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            } else {
117932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu                mImageView.animate().cancel();
118932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu                mImageView.setAlpha(1f);
119932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            }
120b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        }
121b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    }
122b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
123b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    public void setMainImageDimensions(int width, int height) {
124b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        ViewGroup.LayoutParams lp = mImageView.getLayoutParams();
125b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        lp.width = width;
126b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        lp.height = height;
127b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        mImageView.setLayoutParams(lp);
128b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
129b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
130b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public Drawable getMainImage() {
131b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mImageView == null) {
132b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
133b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
134b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
135b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mImageView.getDrawable();
136b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
137b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
138ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    public Drawable getInfoAreaBackground() {
139ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
140ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            return mInfoArea.getBackground();
141ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
142ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        return null;
143ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    }
144ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
145ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    public void setInfoAreaBackground(Drawable drawable) {
146ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
147ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            mInfoArea.setBackground(drawable);
148ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            if (mBadgeImage != null) {
149ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                mBadgeImage.setBackground(drawable);
150ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            }
151ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
152ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    }
153ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
154ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    public void setInfoAreaBackgroundColor(int color) {
155ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
156ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            mInfoArea.setBackgroundColor(color);
157ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            if (mBadgeImage != null) {
158ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                mBadgeImage.setBackgroundColor(color);
159ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            }
160ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
161ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    }
162ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
163b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setTitleText(CharSequence text) {
164b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mTitleView == null) {
165b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
166b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
167b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
168b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mTitleView.setText(text);
169b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        setTextMaxLines();
170b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
171b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
172b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public CharSequence getTitleText() {
173b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mTitleView == null) {
174b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
175b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
176b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
177b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mTitleView.getText();
178b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
179b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
180b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setContentText(CharSequence text) {
181b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mContentView == null) {
182b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
183b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
184b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
185b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mContentView.setText(text);
186b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        setTextMaxLines();
187b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
188b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
189b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public CharSequence getContentText() {
190b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mContentView == null) {
191b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
192b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
193b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
194b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mContentView.getText();
195b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
196b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
197b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setBadgeImage(Drawable drawable) {
198b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mBadgeImage == null) {
199b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
200b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
201b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
202b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (drawable != null) {
203b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeImage.setImageDrawable(drawable);
204b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeImage.setVisibility(View.VISIBLE);
205b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeFadeMask.setVisibility(View.VISIBLE);
206b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        } else {
207b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeImage.setVisibility(View.GONE);
208b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeFadeMask.setVisibility(View.GONE);
209b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
210b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
211b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
212b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public Drawable getBadgeImage() {
213b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mBadgeImage == null) {
214b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
215b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
216b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
217b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mBadgeImage.getDrawable();
218b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
219b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
22007a94289970bb0badbd427b40eca97131638874dCraig Stout    private void fadeIn() {
22107a94289970bb0badbd427b40eca97131638874dCraig Stout        mImageView.setAlpha(0f);
22207a94289970bb0badbd427b40eca97131638874dCraig Stout        if (mAttachedToWindow) {
22307a94289970bb0badbd427b40eca97131638874dCraig Stout            mImageView.animate().alpha(1f).setDuration(mImageView.getResources().getInteger(
22407a94289970bb0badbd427b40eca97131638874dCraig Stout                    android.R.integer.config_shortAnimTime));
22507a94289970bb0badbd427b40eca97131638874dCraig Stout        }
226b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    }
227b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
228ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu    @Override
229ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu    public boolean hasOverlappingRendering() {
230ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu        return false;
231ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu    }
232ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu
233b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    private void setTextMaxLines() {
234b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        if (TextUtils.isEmpty(getTitleText())) {
235b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mContentView.setMaxLines(2);
236b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        } else {
237b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mContentView.setMaxLines(1);
238b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        }
239b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        if (TextUtils.isEmpty(getContentText())) {
240b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mTitleView.setMaxLines(2);
241b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        } else {
242b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mTitleView.setMaxLines(1);
243b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        }
244b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    }
2455358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout
2465358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout    @Override
24707a94289970bb0badbd427b40eca97131638874dCraig Stout    protected void onAttachedToWindow() {
24807a94289970bb0badbd427b40eca97131638874dCraig Stout        super.onAttachedToWindow();
24907a94289970bb0badbd427b40eca97131638874dCraig Stout        mAttachedToWindow = true;
25007a94289970bb0badbd427b40eca97131638874dCraig Stout        if (mImageView.getAlpha() == 0) {
25107a94289970bb0badbd427b40eca97131638874dCraig Stout            fadeIn();
25207a94289970bb0badbd427b40eca97131638874dCraig Stout        }
25307a94289970bb0badbd427b40eca97131638874dCraig Stout    }
25407a94289970bb0badbd427b40eca97131638874dCraig Stout
25507a94289970bb0badbd427b40eca97131638874dCraig Stout    @Override
2565358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout    protected void onDetachedFromWindow() {
25707a94289970bb0badbd427b40eca97131638874dCraig Stout        mAttachedToWindow = false;
2585358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout        mImageView.animate().cancel();
2595358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout        mImageView.setAlpha(1f);
2605358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout        super.onDetachedFromWindow();
2615358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout    }
262b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn}
263