/*****************************************************************************
* CardPresenter.java
*****************************************************************************
* Copyright © 2014-2015 VLC authors, VideoLAN and VideoLabs
* Author: Geoffrey Métais
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
package org.videolan.vlc.gui.tv;
import org.videolan.vlc.MediaDatabase;
import org.videolan.vlc.MediaWrapper;
import org.videolan.vlc.R;
import org.videolan.vlc.gui.audio.AudioUtil;
import org.videolan.vlc.gui.tv.browser.GridFragment;
import org.videolan.vlc.gui.tv.browser.MusicFragment;
import org.videolan.vlc.util.BitmapUtil;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.v17.leanback.widget.ImageCardView;
import android.support.v17.leanback.widget.Presenter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class CardPresenter extends Presenter {
private static final String TAG = "CardPresenter";
private static Context sContext;
private static Resources mRes;
private static int CARD_WIDTH;
private static int CARD_HEIGHT = 0;
private static MediaDatabase sMediaDatabase = MediaDatabase.getInstance();
private static Drawable sDefaultCardImage;
public CardPresenter(Context context){
sContext = context;
mRes = sContext.getResources();
sDefaultCardImage = mRes.getDrawable(R.drawable.background_cone);
CARD_WIDTH = mRes.getDimensionPixelSize(R.dimen.grid_card_thumb_width);
CARD_HEIGHT = mRes.getDimensionPixelSize(R.dimen.grid_card_thumb_height);
}
static class ViewHolder extends Presenter.ViewHolder {
private ImageCardView mCardView;
public ViewHolder(View view) {
super(view);
mCardView = (ImageCardView) view;
}
public ImageCardView getCardView() {
return mCardView;
}
protected void updateCardViewImage(MediaWrapper mediaWrapper) {
mCardView.getMainImageView().setScaleType(ImageView.ScaleType.CENTER);
Bitmap picture = null;
if (mediaWrapper.getType() == mediaWrapper.TYPE_AUDIO) {
picture = AudioUtil.getCover(sContext, mediaWrapper, 320);
if (picture == null)
picture = BitmapFactory.decodeResource(mRes, R.drawable.ic_browser_audio_big_normal);
} else if (mediaWrapper.getType() == mediaWrapper.TYPE_VIDEO) {
picture = BitmapUtil.getPictureFromCache(mediaWrapper);
if (picture == null)
picture = BitmapFactory.decodeResource(mRes, R.drawable.ic_browser_video_big_normal);
} else if (mediaWrapper.getType() == mediaWrapper.TYPE_DIR)
picture = BitmapFactory.decodeResource(mRes, R.drawable.ic_menu_network_big);
else
picture = BitmapFactory.decodeResource(mRes, R.drawable.ic_browser_unknown_big_normal);
if (picture != null && picture.getByteCount() > 4)
mCardView.setMainImage(new BitmapDrawable(mRes, picture));
else
mCardView.setMainImage(sDefaultCardImage);
}
protected void updateCardViewImage(Drawable image) {
mCardView.getMainImageView().setScaleType(ImageView.ScaleType.CENTER);
mCardView.setMainImage(image);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent) {
ImageCardView cardView = new ImageCardView(sContext);
cardView.setFocusable(true);
cardView.setFocusableInTouchMode(true);
cardView.setBackgroundColor(mRes.getColor(R.color.lb_details_overview_bg_color));
cardView.setMainImageDimensions(CARD_WIDTH, CARD_HEIGHT);
return new ViewHolder(cardView);
}
@Override
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
ViewHolder holder = ((ViewHolder) viewHolder);
if (item instanceof MediaWrapper) {
MediaWrapper MediaWrapper = (MediaWrapper) item;
holder.mCardView.setTitleText(MediaWrapper.getTitle());
holder.mCardView.setContentText(MediaWrapper.getDescription());
if (MediaWrapper.getType() == MediaWrapper.TYPE_GROUP)
holder.updateCardViewImage(mRes.getDrawable(
R.drawable.ic_video_collection_big));
else
holder.updateCardViewImage(MediaWrapper);
} else if (item instanceof MusicFragment.ListItem) {
MusicFragment.ListItem listItem = (MusicFragment.ListItem) item;
MediaWrapper MediaWrapper = listItem.mediaList.get(0);
holder.mCardView.setTitleText(listItem.mTitle);
holder.mCardView.setContentText(listItem.mSubTitle);
holder.updateCardViewImage(MediaWrapper);
} else if (item instanceof SimpleCard){
SimpleCard card = (SimpleCard) item;
holder.mCardView.setTitleText(card.getName());
holder.updateCardViewImage(mRes.getDrawable(card.getImageId()));
}else if (item instanceof String){
holder.mCardView.setTitleText((String) item);
holder.updateCardViewImage(sDefaultCardImage);
}
}
@Override
public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
}
@Override
public void onViewAttachedToWindow(Presenter.ViewHolder viewHolder) {
// TODO?
}
public static class SimpleCard {
int id;
int imageId;
String name;
SimpleCard(int id, String name, int imageId){
this.id = id;
this.name = name;
this.imageId = imageId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getImageId() {
return imageId;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}