ImageCardView.java revision 0670f090a011e864bd726784c2a85333bf2ae7fb
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;
1970acb0c19be3831a2080e4f902324de16bfbf62eTor Norbyeimport android.support.annotation.ColorInt;
20b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.support.v17.leanback.R;
21b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilsonimport android.text.TextUtils;
22b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.util.AttributeSet;
23b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.view.LayoutInflater;
24b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.view.View;
25b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilsonimport android.view.ViewGroup;
26b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.widget.ImageView;
279de363b8db05106b03d115c266859fe200d41db7Dake Guimport android.widget.ImageView.ScaleType;
28b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.widget.TextView;
29b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
30961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn/**
31a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * A subclass of {@link BaseCardView} with an {@link ImageView} as its main region.
32961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn */
33b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournpublic class ImageCardView extends BaseCardView {
34b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
35b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private ImageView mImageView;
36b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private View mInfoArea;
37b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private TextView mTitleView;
38b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private TextView mContentView;
39b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private ImageView mBadgeImage;
40b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    private ImageView mBadgeFadeMask;
4189589687d8aafcfdc11d9760205e9d0b16505201Craig Stout    private boolean mAttachedToWindow;
42b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
43b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public ImageCardView(Context context) {
44b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        this(context, null);
45b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
46b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
47b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public ImageCardView(Context context, AttributeSet attrs) {
48b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        this(context, attrs, R.attr.imageCardViewStyle);
49b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
50b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
51b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public ImageCardView(Context context, AttributeSet attrs, int defStyle) {
52b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        super(context, attrs, defStyle);
53b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
54b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        LayoutInflater inflater = LayoutInflater.from(context);
55b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        View v = inflater.inflate(R.layout.lb_image_card_view, this);
56b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
57b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mImageView = (ImageView) v.findViewById(R.id.main_image);
58b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        mImageView.setVisibility(View.INVISIBLE);
59b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mInfoArea = v.findViewById(R.id.info_field);
60b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mTitleView = (TextView) v.findViewById(R.id.title_text);
61b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mContentView = (TextView) v.findViewById(R.id.content_text);
62b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mBadgeImage = (ImageView) v.findViewById(R.id.extra_badge);
63b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mBadgeFadeMask = (ImageView) v.findViewById(R.id.fade_mask);
64ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
65ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
66ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.lbImageCardView,
67ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                    defStyle, 0);
68ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            try {
69ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                setInfoAreaBackground(
70ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                        a.getDrawable(R.styleable.lbImageCardView_infoAreaBackground));
71ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            } finally {
72ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                a.recycle();
73ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            }
74ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
75b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
76b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
77a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
78a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Returns the main image view.
79a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
809de363b8db05106b03d115c266859fe200d41db7Dake Gu    public final ImageView getMainImageView() {
819de363b8db05106b03d115c266859fe200d41db7Dake Gu        return mImageView;
829de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
839de363b8db05106b03d115c266859fe200d41db7Dake Gu
84a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
85a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Enables or disables adjustment of view bounds on the main image.
86a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
879de363b8db05106b03d115c266859fe200d41db7Dake Gu    public void setMainImageAdjustViewBounds(boolean adjustViewBounds) {
889de363b8db05106b03d115c266859fe200d41db7Dake Gu        if (mImageView != null) {
899de363b8db05106b03d115c266859fe200d41db7Dake Gu            mImageView.setAdjustViewBounds(adjustViewBounds);
909de363b8db05106b03d115c266859fe200d41db7Dake Gu        }
919de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
929de363b8db05106b03d115c266859fe200d41db7Dake Gu
93a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
94a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the ScaleType of the main image.
95a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
969de363b8db05106b03d115c266859fe200d41db7Dake Gu    public void setMainImageScaleType(ScaleType scaleType) {
979de363b8db05106b03d115c266859fe200d41db7Dake Gu        if (mImageView != null) {
989de363b8db05106b03d115c266859fe200d41db7Dake Gu            mImageView.setScaleType(scaleType);
999de363b8db05106b03d115c266859fe200d41db7Dake Gu        }
1009de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
1019de363b8db05106b03d115c266859fe200d41db7Dake Gu
102932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    /**
103a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the image drawable with fade-in animation.
104932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu     */
105b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setMainImage(Drawable drawable) {
106932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu        setMainImage(drawable, true);
107932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    }
108932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu
109932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    /**
110a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the image drawable with optional fade-in animation.
111932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu     */
112932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    public void setMainImage(Drawable drawable, boolean fade) {
113b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mImageView == null) {
114b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
115b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
116b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
117b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mImageView.setImageDrawable(drawable);
118b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        if (drawable == null) {
119932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            mImageView.animate().cancel();
120932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            mImageView.setAlpha(1f);
121b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mImageView.setVisibility(View.INVISIBLE);
122b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        } else {
123b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mImageView.setVisibility(View.VISIBLE);
124932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            if (fade) {
12589589687d8aafcfdc11d9760205e9d0b16505201Craig Stout                fadeIn();
126932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            } else {
127932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu                mImageView.animate().cancel();
128932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu                mImageView.setAlpha(1f);
129932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            }
130b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        }
131b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    }
132b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
133a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
134a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the layout dimensions of the ImageView.
135a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
136b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    public void setMainImageDimensions(int width, int height) {
137b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        ViewGroup.LayoutParams lp = mImageView.getLayoutParams();
138b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        lp.width = width;
139b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        lp.height = height;
140b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        mImageView.setLayoutParams(lp);
141b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
142b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
143a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
144a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Returns the ImageView drawable.
145a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
146b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public Drawable getMainImage() {
147b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mImageView == null) {
148b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
149b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
150b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
151b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mImageView.getDrawable();
152b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
153b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
154a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
155a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Returns the info area background drawable.
156a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
157ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    public Drawable getInfoAreaBackground() {
158ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
159ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            return mInfoArea.getBackground();
160ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
161ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        return null;
162ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    }
163ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
164a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
165a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the info area background drawable.
166a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
167ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    public void setInfoAreaBackground(Drawable drawable) {
168ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
169ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            mInfoArea.setBackground(drawable);
170ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            if (mBadgeImage != null) {
171ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                mBadgeImage.setBackground(drawable);
172ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            }
173ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
174ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    }
175ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
176a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
177a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the info area background color.
1780670f090a011e864bd726784c2a85333bf2ae7fbCraig Stout     */
17970acb0c19be3831a2080e4f902324de16bfbf62eTor Norbye    public void setInfoAreaBackgroundColor(@ColorInt int color) {
180ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
181ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            mInfoArea.setBackgroundColor(color);
182ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            if (mBadgeImage != null) {
183ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu                mBadgeImage.setBackgroundColor(color);
184ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            }
185ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
186ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    }
187ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
188a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
189a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the title text.
190a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
191b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setTitleText(CharSequence text) {
192b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mTitleView == null) {
193b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
194b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
195b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
196b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mTitleView.setText(text);
197b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        setTextMaxLines();
198b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
199b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
200a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
201a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Returns the title text.
202a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
203b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public CharSequence getTitleText() {
204b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mTitleView == null) {
205b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
206b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
207b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
208b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mTitleView.getText();
209b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
210b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
211a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
212a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the content text.
213a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
214b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setContentText(CharSequence text) {
215b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mContentView == null) {
216b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
217b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
218b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
219b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mContentView.setText(text);
220b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        setTextMaxLines();
221b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
222b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
223a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
224a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Returns the content text.
225a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
226b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public CharSequence getContentText() {
227b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mContentView == null) {
228b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
229b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
230b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
231b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mContentView.getText();
232b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
233b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
234a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
235a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the badge image drawable.
236a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
237b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setBadgeImage(Drawable drawable) {
238b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mBadgeImage == null) {
239b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
240b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
241b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
242b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (drawable != null) {
243b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeImage.setImageDrawable(drawable);
244b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeImage.setVisibility(View.VISIBLE);
245b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeFadeMask.setVisibility(View.VISIBLE);
246b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        } else {
247b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeImage.setVisibility(View.GONE);
248b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeFadeMask.setVisibility(View.GONE);
249b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
250b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
251b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
252a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
253a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Returns the badge image drawable.
254a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
255b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public Drawable getBadgeImage() {
256b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mBadgeImage == null) {
257b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
258b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
259b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
260b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mBadgeImage.getDrawable();
261b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
262b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
26389589687d8aafcfdc11d9760205e9d0b16505201Craig Stout    private void fadeIn() {
26489589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        mImageView.setAlpha(0f);
26589589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        if (mAttachedToWindow) {
26689589687d8aafcfdc11d9760205e9d0b16505201Craig Stout            mImageView.animate().alpha(1f).setDuration(mImageView.getResources().getInteger(
26789589687d8aafcfdc11d9760205e9d0b16505201Craig Stout                    android.R.integer.config_shortAnimTime));
26889589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        }
269b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    }
270b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
271ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu    @Override
272ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu    public boolean hasOverlappingRendering() {
273ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu        return false;
274ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu    }
275ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu
276b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    private void setTextMaxLines() {
277b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        if (TextUtils.isEmpty(getTitleText())) {
278b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mContentView.setMaxLines(2);
279b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        } else {
280b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mContentView.setMaxLines(1);
281b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        }
282b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        if (TextUtils.isEmpty(getContentText())) {
283b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mTitleView.setMaxLines(2);
284b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        } else {
285b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mTitleView.setMaxLines(1);
286b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        }
287b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    }
2885358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout
2895358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout    @Override
29089589687d8aafcfdc11d9760205e9d0b16505201Craig Stout    protected void onAttachedToWindow() {
29189589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        super.onAttachedToWindow();
29289589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        mAttachedToWindow = true;
29389589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        if (mImageView.getAlpha() == 0) {
29489589687d8aafcfdc11d9760205e9d0b16505201Craig Stout            fadeIn();
29589589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        }
29689589687d8aafcfdc11d9760205e9d0b16505201Craig Stout    }
29789589687d8aafcfdc11d9760205e9d0b16505201Craig Stout
29889589687d8aafcfdc11d9760205e9d0b16505201Craig Stout    @Override
2995358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout    protected void onDetachedFromWindow() {
30089589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        mAttachedToWindow = false;
3015358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout        mImageView.animate().cancel();
3025358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout        mImageView.setAlpha(1f);
3035358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout        super.onDetachedFromWindow();
3045358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout    }
305b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn}
306