CardPresenter.java revision 58b7bbb83053e664ada2e1ace49f8960dfecdbfd
1/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
15 */
16
17package com.google.android.leanbackjank.presenter;
18
19import android.support.v17.leanback.widget.ImageCardView;
20import android.support.v17.leanback.widget.Presenter;
21import android.view.ViewGroup;
22
23import com.bumptech.glide.Glide;
24import com.google.android.leanbackjank.R;
25import com.google.android.leanbackjank.model.VideoInfo;
26
27public class CardPresenter extends Presenter {
28    private int mSelectedBackgroundColor = -1;
29    private int mDefaultBackgroundColor = -1;
30    private int mCardWidth;
31    private int mCardHeight;
32
33    public CardPresenter(int width, int height) {
34        mCardWidth = width;
35        mCardHeight = height;
36    }
37
38    @Override
39    public ViewHolder onCreateViewHolder(ViewGroup parent) {
40        mDefaultBackgroundColor = parent.getResources().getColor(R.color.jank_blue, null);
41        mSelectedBackgroundColor = parent.getResources().getColor(R.color.jank_red, null);
42
43        ImageCardView cardView = new ImageCardView(parent.getContext()) {
44            @Override
45            public void setSelected(boolean selected) {
46                updateCardBackgroundColor(this, selected);
47                super.setSelected(selected);
48            }
49        };
50
51        cardView.setFocusable(true);
52        cardView.setFocusableInTouchMode(true);
53        updateCardBackgroundColor(cardView, false);
54        return new ViewHolder(cardView);
55    }
56
57    private void updateCardBackgroundColor(ImageCardView view, boolean selected) {
58        int color = selected ? mSelectedBackgroundColor : mDefaultBackgroundColor;
59
60        // Both background colors should be set because the view's
61        // background is temporarily visible during animations.
62        view.setBackgroundColor(color);
63        view.findViewById(R.id.info_field).setBackgroundColor(color);
64    }
65
66    @Override
67    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
68        VideoInfo videoInfo = (VideoInfo) item;
69
70        ImageCardView cardView = (ImageCardView) viewHolder.view;
71        cardView.setTitleText(videoInfo.getTitle());
72        cardView.setContentText(videoInfo.getStudio());
73        cardView.setMainImageDimensions(mCardWidth, mCardHeight);
74
75        Glide.with(cardView.getContext())
76                .load(videoInfo.getImageUri())
77                .into(cardView.getMainImageView());
78    }
79
80    @Override
81    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
82        ImageCardView cardView = (ImageCardView) viewHolder.view;
83
84        // Remove references to images so that the garbage collector can free up memory.
85        cardView.setBadgeImage(null);
86        cardView.setMainImage(null);
87    }
88}
89