/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.androideasyapps.phoenix; import android.content.Context; import android.graphics.Bitmap; 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.TextView; import com.androideasyapps.phoenix.dao.MediaFile; import com.androideasyapps.phoenix.shared.AppInstance; import com.androideasyapps.phoenix.util.MediaUtil; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageSize; import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; import java.net.URI; /* * A CardPresenter is used to generate Views and bind Objects to them on demand. * It contains an Image CardView */ public class CardPresenter extends Presenter { private static Context mContext; private static int CARD_WIDTH = 150*2; private static int CARD_HEIGHT = 200*2; static class ViewHolder extends Presenter.ViewHolder { private MediaFile mMovie; private ImageCardView mCardView; private Drawable mDefaultCardImage; public ViewHolder(View view) { super(view); mCardView = (ImageCardView) view; mDefaultCardImage = mContext.getResources().getDrawable(R.drawable.movie); } public void setMovie(MediaFile m) { mMovie = m; } public MediaFile getMovie() { return mMovie; } public ImageCardView getCardView() { return mCardView; } protected void updateCardViewImageUIL(URI uri) { mCardView.getMainImageView().setImageBitmap(null); ImageLoader.getInstance().loadImage(uri.toString(), new ImageSize(Utils.convertDpToPixel(mContext, CARD_WIDTH), Utils.convertDpToPixel(mContext, CARD_HEIGHT)), new SimpleImageLoadingListener() { @Override public void onLoadingComplete(String imageUri, View view, Bitmap bitmap) { Drawable bitmapDrawable = new BitmapDrawable(mContext.getResources(), bitmap); mCardView.setMainImage(bitmapDrawable); } }); } } @Override public ViewHolder onCreateViewHolder(ViewGroup parent) { mContext = parent.getContext(); ImageCardView cardView = new ImageCardView(mContext); cardView.setFocusable(true); cardView.setFocusableInTouchMode(true); cardView.setBackgroundColor(mContext.getResources().getColor(R.color.fastlane_background)); return new ViewHolder(cardView); } @Override public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { MediaFile movie = (MediaFile) item; ((ViewHolder) viewHolder).setMovie(movie); if (movie.getMediaFileId()==0 && movie.getParts()>1) { ((ViewHolder) viewHolder).mCardView.setTitleText(movie.getTitle()); ((ViewHolder) viewHolder).mCardView.setContentText(String.valueOf(movie.getParts() + " Items")); } else { ((ViewHolder) viewHolder).mCardView.setTitleText(movie.getTitle()); if ("tv".equalsIgnoreCase(movie.getMediaType())) { ((ViewHolder) viewHolder).mCardView.setContentText(getTVContextText(movie)); } else { ((ViewHolder) viewHolder).mCardView.setContentText(getMovieContentText(movie)); } } ((ViewHolder) viewHolder).mCardView.setMainImageDimensions(CARD_WIDTH, CARD_HEIGHT); ((ViewHolder) viewHolder).updateCardViewImageUIL(URI.create(MediaUtil.getPosterURL(AppInstance.getInstance(mContext).getServer(), movie, MediaUtil.DEFAULT_POSTER_WIDTH))); } private CharSequence getTVContextText(MediaFile file) { if (!MediaUtil.isGroupedItem(file) && file.getMediaFileId()==0) { // scheduled recording if (file.getEpisode() > 0) { return String.format("%s %dx%d %s", MediaUtil.formatShortDateTimeForAiring(file), file.getSeason(), file.getEpisode(), file.getEpisodeTitle()); } else { return String.format("%s %s", MediaUtil.formatShortDateTimeForAiring(file), file.getEpisodeTitle()); } } else { if (file.getEpisode() > 0) { return String.format("%dx%d %s", file.getSeason(), file.getEpisode(), file.getEpisodeTitle()); } else { return file.getEpisodeTitle(); } } } private CharSequence getMovieContentText(MediaFile movie) { long minutes = movie.getDuration() / (60 * 1000); String str = String.format("%d mins", minutes); return str + ((movie.getGenre()!=null)?(" " + movie.getGenre()):""); } // not used private Drawable getBadge(MediaFile movie) { if (true) { return mContext.getResources().getDrawable(R.drawable.ic_action_a); } TextView tv = new TextView(mContext); tv.setDrawingCacheEnabled(true); tv.setText(String.valueOf(movie.getParts())); tv.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); tv.layout(0, 0, tv.getMeasuredWidth(), tv.getMeasuredHeight()); tv.buildDrawingCache(true); Drawable drawable = new BitmapDrawable(tv.getDrawingCache()); return drawable; } @Override public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { } @Override public void onViewAttachedToWindow(Presenter.ViewHolder viewHolder) { // TO DO } }