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 17 package com.android.tv.dvr.ui; 18 19 import android.content.Context; 20 import android.graphics.Bitmap; 21 import android.graphics.drawable.BitmapDrawable; 22 import android.graphics.drawable.Drawable; 23 import android.net.Uri; 24 import android.support.annotation.Nullable; 25 import android.support.v17.leanback.widget.BaseCardView; 26 import android.text.TextUtils; 27 import android.view.LayoutInflater; 28 import android.widget.ImageView; 29 import android.widget.TextView; 30 31 import com.android.tv.R; 32 import com.android.tv.util.ImageLoader; 33 34 /** 35 * A CardView for displaying info about a {@link com.android.tv.dvr.ScheduledRecording} or 36 * {@link com.android.tv.common.recording.RecordedProgram} 37 */ 38 class RecordingCardView extends BaseCardView { 39 private final ImageView mImageView; 40 private final int mImageWidth; 41 private final int mImageHeight; 42 private String mImageUri; 43 private final TextView mTitleView; 44 private final TextView mContentView; 45 private final Drawable mDefaultImage; 46 47 RecordingCardView(Context context) { 48 super(context); 49 //TODO(dvr): move these to the layout XML. 50 setCardType(BaseCardView.CARD_TYPE_INFO_UNDER_WITH_EXTRA); 51 setFocusable(true); 52 setFocusableInTouchMode(true); 53 mDefaultImage = getResources().getDrawable(R.drawable.default_now_card, null); 54 55 LayoutInflater inflater = LayoutInflater.from(getContext()); 56 inflater.inflate(R.layout.dvr_recording_card_view, this); 57 58 mImageView = (ImageView) findViewById(R.id.image); 59 mImageWidth = getResources().getDimensionPixelSize(R.dimen.dvr_card_image_layout_width); 60 mImageHeight = getResources().getDimensionPixelSize(R.dimen.dvr_card_image_layout_width); 61 mTitleView = (TextView) findViewById(R.id.title); 62 mContentView = (TextView) findViewById(R.id.content); 63 } 64 65 void setTitle(CharSequence title) { 66 mTitleView.setText(title); 67 } 68 69 void setContent(CharSequence content) { 70 mContentView.setText(content); 71 } 72 73 void setImageUri(String uri) { 74 mImageUri = uri; 75 if (TextUtils.isEmpty(uri)) { 76 mImageView.setImageDrawable(mDefaultImage); 77 } else { 78 ImageLoader.loadBitmap(getContext(), uri, mImageWidth, mImageHeight, 79 new RecordingCardImageLoaderCallback(this, uri)); 80 } 81 } 82 83 public void setImageUri(Uri uri) { 84 if (uri != null) { 85 setImageUri(uri.toString()); 86 } else { 87 setImageUri(""); 88 } 89 } 90 91 private static class RecordingCardImageLoaderCallback 92 extends ImageLoader.ImageLoaderCallback<RecordingCardView> { 93 private final String mUri; 94 95 RecordingCardImageLoaderCallback(RecordingCardView referent, String uri) { 96 super(referent); 97 mUri = uri; 98 } 99 100 @Override 101 public void onBitmapLoaded(RecordingCardView view, @Nullable Bitmap bitmap) { 102 if (bitmap == null || !mUri.equals(view.mImageUri)) { 103 view.mImageView.setImageDrawable(view.mDefaultImage); 104 } else { 105 view.mImageView.setImageDrawable(new BitmapDrawable(view.getResources(), bitmap)); 106 } 107 } 108 } 109 110 public void reset() { 111 mTitleView.setText(""); 112 mContentView.setText(""); 113 mImageView.setImageDrawable(mDefaultImage); 114 } 115 } 116