ImageCardView.java revision 932feed83c3dbc49c9855a1736afd9d5a3428b8e
1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
12 * the License.
13 */
14package android.support.v17.leanback.widget;
15
16import android.content.Context;
17import android.graphics.drawable.Drawable;
18import android.support.v17.leanback.R;
19import android.text.TextUtils;
20import android.util.AttributeSet;
21import android.view.LayoutInflater;
22import android.view.View;
23import android.view.ViewGroup;
24import android.widget.ImageView;
25import android.widget.ImageView.ScaleType;
26import android.widget.TextView;
27
28/**
29 * A card view with an {@link ImageView} as its main region.
30 */
31public class ImageCardView extends BaseCardView {
32
33    private ImageView mImageView;
34    private View mInfoArea;
35    private TextView mTitleView;
36    private TextView mContentView;
37    private ImageView mBadgeImage;
38    private ImageView mBadgeFadeMask;
39
40    public ImageCardView(Context context) {
41        this(context, null);
42    }
43
44    public ImageCardView(Context context, AttributeSet attrs) {
45        this(context, attrs, R.attr.imageCardViewStyle);
46    }
47
48    public ImageCardView(Context context, AttributeSet attrs, int defStyle) {
49        super(context, attrs, defStyle);
50
51        LayoutInflater inflater = LayoutInflater.from(context);
52        View v = inflater.inflate(R.layout.lb_image_card_view, this);
53
54        mImageView = (ImageView) v.findViewById(R.id.main_image);
55        mImageView.setVisibility(View.INVISIBLE);
56        mInfoArea = v.findViewById(R.id.info_field);
57        mTitleView = (TextView) v.findViewById(R.id.title_text);
58        mContentView = (TextView) v.findViewById(R.id.content_text);
59        mBadgeImage = (ImageView) v.findViewById(R.id.extra_badge);
60        mBadgeFadeMask = (ImageView) v.findViewById(R.id.fade_mask);
61    }
62
63    public final ImageView getMainImageView() {
64        return mImageView;
65    }
66
67    public void setMainImageAdjustViewBounds(boolean adjustViewBounds) {
68        if (mImageView != null) {
69            mImageView.setAdjustViewBounds(adjustViewBounds);
70        }
71    }
72
73    public void setMainImageScaleType(ScaleType scaleType) {
74        if (mImageView != null) {
75            mImageView.setScaleType(scaleType);
76        }
77    }
78
79    /**
80     * Set drawable with fade-in animation.
81     */
82    public void setMainImage(Drawable drawable) {
83        setMainImage(drawable, true);
84    }
85
86    /**
87     * Set drawable with optional fade-in animation.
88     */
89    public void setMainImage(Drawable drawable, boolean fade) {
90        if (mImageView == null) {
91            return;
92        }
93
94        mImageView.setImageDrawable(drawable);
95        if (drawable == null) {
96            mImageView.animate().cancel();
97            mImageView.setAlpha(1f);
98            mImageView.setVisibility(View.INVISIBLE);
99        } else {
100            mImageView.setVisibility(View.VISIBLE);
101            if (fade) {
102                fadeIn(mImageView);
103            } else {
104                mImageView.animate().cancel();
105                mImageView.setAlpha(1f);
106            }
107        }
108    }
109
110    public void setMainImageDimensions(int width, int height) {
111        ViewGroup.LayoutParams lp = mImageView.getLayoutParams();
112        lp.width = width;
113        lp.height = height;
114        mImageView.setLayoutParams(lp);
115    }
116
117    public Drawable getMainImage() {
118        if (mImageView == null) {
119            return null;
120        }
121
122        return mImageView.getDrawable();
123    }
124
125    public void setTitleText(CharSequence text) {
126        if (mTitleView == null) {
127            return;
128        }
129
130        mTitleView.setText(text);
131        setTextMaxLines();
132    }
133
134    public CharSequence getTitleText() {
135        if (mTitleView == null) {
136            return null;
137        }
138
139        return mTitleView.getText();
140    }
141
142    public void setContentText(CharSequence text) {
143        if (mContentView == null) {
144            return;
145        }
146
147        mContentView.setText(text);
148        setTextMaxLines();
149    }
150
151    public CharSequence getContentText() {
152        if (mContentView == null) {
153            return null;
154        }
155
156        return mContentView.getText();
157    }
158
159    public void setBadgeImage(Drawable drawable) {
160        if (mBadgeImage == null) {
161            return;
162        }
163
164        if (drawable != null) {
165            mBadgeImage.setImageDrawable(drawable);
166            mBadgeImage.setVisibility(View.VISIBLE);
167            mBadgeFadeMask.setVisibility(View.VISIBLE);
168        } else {
169            mBadgeImage.setVisibility(View.GONE);
170            mBadgeFadeMask.setVisibility(View.GONE);
171        }
172    }
173
174    public Drawable getBadgeImage() {
175        if (mBadgeImage == null) {
176            return null;
177        }
178
179        return mBadgeImage.getDrawable();
180    }
181
182    private void fadeIn(View v) {
183        v.setAlpha(0f);
184        v.animate().alpha(1f).setDuration(v.getContext().getResources().getInteger(
185                android.R.integer.config_shortAnimTime)).start();
186    }
187
188    private void setTextMaxLines() {
189        if (TextUtils.isEmpty(getTitleText())) {
190            mContentView.setMaxLines(2);
191        } else {
192            mContentView.setMaxLines(1);
193        }
194        if (TextUtils.isEmpty(getContentText())) {
195            mTitleView.setMaxLines(2);
196        } else {
197            mTitleView.setMaxLines(1);
198        }
199    }
200}
201