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;
4089589687d8aafcfdc11d9760205e9d0b16505201Craig 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);
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
75a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
76a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Returns the main image view.
77a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
789de363b8db05106b03d115c266859fe200d41db7Dake Gu    public final ImageView getMainImageView() {
799de363b8db05106b03d115c266859fe200d41db7Dake Gu        return mImageView;
809de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
819de363b8db05106b03d115c266859fe200d41db7Dake Gu
82a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
83a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Enables or disables adjustment of view bounds on the main image.
84a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
859de363b8db05106b03d115c266859fe200d41db7Dake Gu    public void setMainImageAdjustViewBounds(boolean adjustViewBounds) {
869de363b8db05106b03d115c266859fe200d41db7Dake Gu        if (mImageView != null) {
879de363b8db05106b03d115c266859fe200d41db7Dake Gu            mImageView.setAdjustViewBounds(adjustViewBounds);
889de363b8db05106b03d115c266859fe200d41db7Dake Gu        }
899de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
909de363b8db05106b03d115c266859fe200d41db7Dake Gu
91a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
92a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the ScaleType of the main image.
93a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
949de363b8db05106b03d115c266859fe200d41db7Dake Gu    public void setMainImageScaleType(ScaleType scaleType) {
959de363b8db05106b03d115c266859fe200d41db7Dake Gu        if (mImageView != null) {
969de363b8db05106b03d115c266859fe200d41db7Dake Gu            mImageView.setScaleType(scaleType);
979de363b8db05106b03d115c266859fe200d41db7Dake Gu        }
989de363b8db05106b03d115c266859fe200d41db7Dake Gu    }
999de363b8db05106b03d115c266859fe200d41db7Dake Gu
100932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    /**
101a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the image drawable with fade-in animation.
102932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu     */
103b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setMainImage(Drawable drawable) {
104932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu        setMainImage(drawable, true);
105932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    }
106932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu
107932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    /**
108a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the image drawable with optional fade-in animation.
109932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu     */
110932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu    public void setMainImage(Drawable drawable, boolean fade) {
111b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mImageView == null) {
112b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
113b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
114b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
115b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mImageView.setImageDrawable(drawable);
116b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        if (drawable == null) {
117932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            mImageView.animate().cancel();
118932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            mImageView.setAlpha(1f);
119b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mImageView.setVisibility(View.INVISIBLE);
120b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        } else {
121b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson            mImageView.setVisibility(View.VISIBLE);
122932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            if (fade) {
12389589687d8aafcfdc11d9760205e9d0b16505201Craig Stout                fadeIn();
124932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            } else {
125932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu                mImageView.animate().cancel();
126932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu                mImageView.setAlpha(1f);
127932feed83c3dbc49c9855a1736afd9d5a3428b8eDake Gu            }
128b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        }
129b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    }
130b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
131a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
132a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the layout dimensions of the ImageView.
133a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
134b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    public void setMainImageDimensions(int width, int height) {
135b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        ViewGroup.LayoutParams lp = mImageView.getLayoutParams();
136b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        lp.width = width;
137b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        lp.height = height;
138b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson        mImageView.setLayoutParams(lp);
139b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
140b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
141a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
142a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Returns the ImageView drawable.
143a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
144b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public Drawable getMainImage() {
145b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mImageView == null) {
146b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
147b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
148b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
149b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mImageView.getDrawable();
150b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
151b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
152a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
153a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Returns the info area background drawable.
154a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
155ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    public Drawable getInfoAreaBackground() {
156ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
157ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            return mInfoArea.getBackground();
158ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
159ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        return null;
160ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    }
161ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
162a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
163a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the info area background drawable.
164a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
165ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    public void setInfoAreaBackground(Drawable drawable) {
166ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
167ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            mInfoArea.setBackground(drawable);
168ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
169ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    }
170ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
171a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
172a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the info area background color.
1730670f090a011e864bd726784c2a85333bf2ae7fbCraig Stout     */
17470acb0c19be3831a2080e4f902324de16bfbf62eTor Norbye    public void setInfoAreaBackgroundColor(@ColorInt int color) {
175ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        if (mInfoArea != null) {
176ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu            mInfoArea.setBackgroundColor(color);
177ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu        }
178ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu    }
179ae2614fe4c86c79344dc7dcb07777143b2fbd0d6Dake Gu
180a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
181a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the title text.
182a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
183b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setTitleText(CharSequence text) {
184b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mTitleView == null) {
185b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
186b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
187b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
188b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mTitleView.setText(text);
189b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
190b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
191a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
192a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Returns the title text.
193a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
194b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public CharSequence getTitleText() {
195b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mTitleView == null) {
196b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
197b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
198b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
199b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mTitleView.getText();
200b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
201b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
202a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
203a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the content text.
204a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
205b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setContentText(CharSequence text) {
206b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mContentView == null) {
207b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
208b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
209b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
210b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        mContentView.setText(text);
211b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
212b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
213a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
214a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Returns the content text.
215a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
216b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public CharSequence getContentText() {
217b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mContentView == null) {
218b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
219b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
220b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
221b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mContentView.getText();
222b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
223b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
224a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
225a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets the badge image drawable.
226a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
227b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public void setBadgeImage(Drawable drawable) {
228b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mBadgeImage == null) {
229b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return;
230b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
231cb933aeb5c89f168f604bf081d6f8f4fdde6534fDake Gu        mBadgeImage.setImageDrawable(drawable);
232cb933aeb5c89f168f604bf081d6f8f4fdde6534fDake Gu        if (drawable != null && mContentView!= null && mContentView.getVisibility() != GONE) {
233b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeImage.setVisibility(View.VISIBLE);
234b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        } else {
235b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            mBadgeImage.setVisibility(View.GONE);
236b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
237b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
238b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
239a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
240a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Returns the badge image drawable.
241a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
242b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    public Drawable getBadgeImage() {
243b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        if (mBadgeImage == null) {
244b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn            return null;
245b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        }
246b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn
247b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn        return mBadgeImage.getDrawable();
248b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn    }
249b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
25089589687d8aafcfdc11d9760205e9d0b16505201Craig Stout    private void fadeIn() {
25189589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        mImageView.setAlpha(0f);
25289589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        if (mAttachedToWindow) {
25389589687d8aafcfdc11d9760205e9d0b16505201Craig Stout            mImageView.animate().alpha(1f).setDuration(mImageView.getResources().getInteger(
25489589687d8aafcfdc11d9760205e9d0b16505201Craig Stout                    android.R.integer.config_shortAnimTime));
25589589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        }
256b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson    }
257b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson
258ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu    @Override
259ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu    public boolean hasOverlappingRendering() {
260ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu        return false;
261ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu    }
262ceb7ab2ddd6e157cd4ade0f14a382c39428163c4Dake Gu
2635358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout    @Override
26489589687d8aafcfdc11d9760205e9d0b16505201Craig Stout    protected void onAttachedToWindow() {
26589589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        super.onAttachedToWindow();
26689589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        mAttachedToWindow = true;
26789589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        if (mImageView.getAlpha() == 0) {
26889589687d8aafcfdc11d9760205e9d0b16505201Craig Stout            fadeIn();
26989589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        }
27089589687d8aafcfdc11d9760205e9d0b16505201Craig Stout    }
27189589687d8aafcfdc11d9760205e9d0b16505201Craig Stout
27289589687d8aafcfdc11d9760205e9d0b16505201Craig Stout    @Override
2735358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout    protected void onDetachedFromWindow() {
27489589687d8aafcfdc11d9760205e9d0b16505201Craig Stout        mAttachedToWindow = false;
2755358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout        mImageView.animate().cancel();
2765358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout        mImageView.setAlpha(1f);
2775358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout        super.onDetachedFromWindow();
2785358b0ca6ed795892bd097fdf15d41fb6b1a03d2Craig Stout    }
279b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn}
280