ImageCardView.java revision 9de363b8db05106b03d115c266859fe200d41db7
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    public void setMainImage(Drawable drawable) {
80        if (mImageView == null) {
81            return;
82        }
83
84        mImageView.setImageDrawable(drawable);
85        if (drawable == null) {
86            mImageView.setVisibility(View.INVISIBLE);
87        } else {
88            mImageView.setVisibility(View.VISIBLE);
89            fadeIn(mImageView);
90        }
91    }
92
93    public void setMainImageDimensions(int width, int height) {
94        ViewGroup.LayoutParams lp = mImageView.getLayoutParams();
95        lp.width = width;
96        lp.height = height;
97        mImageView.setLayoutParams(lp);
98    }
99
100    public Drawable getMainImage() {
101        if (mImageView == null) {
102            return null;
103        }
104
105        return mImageView.getDrawable();
106    }
107
108    public void setTitleText(CharSequence text) {
109        if (mTitleView == null) {
110            return;
111        }
112
113        mTitleView.setText(text);
114        setTextMaxLines();
115    }
116
117    public CharSequence getTitleText() {
118        if (mTitleView == null) {
119            return null;
120        }
121
122        return mTitleView.getText();
123    }
124
125    public void setContentText(CharSequence text) {
126        if (mContentView == null) {
127            return;
128        }
129
130        mContentView.setText(text);
131        setTextMaxLines();
132    }
133
134    public CharSequence getContentText() {
135        if (mContentView == null) {
136            return null;
137        }
138
139        return mContentView.getText();
140    }
141
142    public void setBadgeImage(Drawable drawable) {
143        if (mBadgeImage == null) {
144            return;
145        }
146
147        if (drawable != null) {
148            mBadgeImage.setImageDrawable(drawable);
149            mBadgeImage.setVisibility(View.VISIBLE);
150            mBadgeFadeMask.setVisibility(View.VISIBLE);
151        } else {
152            mBadgeImage.setVisibility(View.GONE);
153            mBadgeFadeMask.setVisibility(View.GONE);
154        }
155    }
156
157    public Drawable getBadgeImage() {
158        if (mBadgeImage == null) {
159            return null;
160        }
161
162        return mBadgeImage.getDrawable();
163    }
164
165    private void fadeIn(View v) {
166        v.setAlpha(0f);
167        v.animate().alpha(1f).setDuration(v.getContext().getResources().getInteger(
168                android.R.integer.config_shortAnimTime)).start();
169    }
170
171    private void setTextMaxLines() {
172        if (TextUtils.isEmpty(getTitleText())) {
173            mContentView.setMaxLines(2);
174        } else {
175            mContentView.setMaxLines(1);
176        }
177        if (TextUtils.isEmpty(getContentText())) {
178            mTitleView.setMaxLines(2);
179        } else {
180            mTitleView.setMaxLines(1);
181        }
182    }
183}
184