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