// Path: episode_4/TVDemoApp/app/src/main/java/com/sgottard/tvdemoapp/model/Movie.java
// public class Movie implements Parcelable {
//     private static final String TAG = "Movie";
//     static final long serialVersionUID = 727566175075960653L;
//     private static int sCount = 0;
//     private String mId;
//     private String mTitle;
//     private String mDescription;
//     private String mBgImageUrl;
//     private String mCardImageUrl;
//     private String mVideoUrl;
//     private String mStudio;
//     private String mCategory;
// 
//     public Movie() {
// 
//     }
// 
//     public Movie(Parcel in){
//         String[] data = new String[8];
// 
//         in.readStringArray(data);
//         mId = data[0];
//         mTitle = data[1];
//         mDescription = data[2];
//         mBgImageUrl = data[3];
//         mCardImageUrl = data[4];
//         mVideoUrl = data[5];
//         mStudio = data[6];
//         mCategory = data[7];
//     }
// 
//     public static String getCount() {
//         return Integer.toString(sCount);
//     }
// 
//     public static void incrementCount() {
//         sCount++;
//     }
// 
//     public String getId() {
//         return mId;
//     }
// 
//     public void setId(String id) {
//         mId = id;
//     }
// 
//     public String getTitle() {
//         return mTitle;
//     }
// 
//     public void setTitle(String title) {
//         mTitle = title;
//     }
// 
//     public String getDescription() {
//         return mDescription;
//     }
// 
//     public void setDescription(String description) {
//         mDescription = description;
//     }
// 
//     public String getStudio() {
//         return mStudio;
//     }
// 
//     public void setStudio(String studio) {
//         mStudio = studio;
//     }
// 
//     public String getVideoUrl() {
//         return mVideoUrl;
//     }
// 
//     public void setVideoUrl(String videoUrl) {
//         mVideoUrl = videoUrl;
//     }
// 
//     public String getBackgroundImageUrl() {
//         return mBgImageUrl;
//     }
// 
//     public void setBackgroundImageUrl(String bgImageUrl) {
//         mBgImageUrl = bgImageUrl;
//     }
// 
//     public String getCardImageUrl() {
//         return mCardImageUrl;
//     }
// 
//     public void setCardImageUrl(String cardImageUrl) {
//         mCardImageUrl = cardImageUrl;
//     }
// 
//     public String getCategory() {
//         return mCategory;
//     }
// 
//     public void setCategory(String category) {
//         mCategory = category;
//     }
// 
//     public URI getBackgroundImageURI() {
//         try {
//             return new URI(getBackgroundImageUrl());
//         } catch (URISyntaxException e) {
//             return null;
//         }
//     }
// 
//     public int describeContents() {
//         return 0;
//     }
// 
//     @Override
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeStringArray(new String[] {mId,
//                 mTitle,
//                 mDescription,
//                 mBgImageUrl,
//                 mCardImageUrl,
//                 mVideoUrl,
//                 mStudio,
//                 mCategory});
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder sb = new StringBuilder(200);
//         sb.append("Movie{");
//         sb.append("mId=" + mId);
//         sb.append(", mTitle='" + mTitle + '\'');
//         sb.append(", mVideoUrl='" + mVideoUrl + '\'');
//         sb.append(", backgroundImageUrl='" + mBgImageUrl + '\'');
//         sb.append(", backgroundImageURI='" + getBackgroundImageURI().toString() + '\'');
//         sb.append(", mCardImageUrl='" + mCardImageUrl + '\'');
//         sb.append('}');
//         return sb.toString();
//     }
// 
//     public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
//         public Movie createFromParcel(Parcel in) {
//             return new Movie(in);
//         }
// 
//         public Movie[] newArray(int size) {
//             return new Movie[size];
//         }
//     };
// }


import android.graphics.drawable.Drawable;
import android.support.v17.leanback.widget.ImageCardView;
import android.support.v17.leanback.widget.Presenter;
import android.util.Log;
import android.view.ViewGroup;
import com.bumptech.glide.Glide;
import com.sgottard.tvdemoapp.model.Movie;
import com.sgottard.tvdemoapp.tvleanback.R;
        Log.d(TAG, "onCreateViewHolder");

        sDefaultBackgroundColor = parent.getResources().getColor(R.color.default_background);
        sSelectedBackgroundColor = parent.getResources().getColor(R.color.selected_background);
        mDefaultCardImage = parent.getResources().getDrawable(R.drawable.movie);

        ImageCardView cardView = new ImageCardView(parent.getContext()) {
            @Override
            public void setSelected(boolean selected) {
                updateCardBackgroundColor(this, selected);
                super.setSelected(selected);
            }
        };

        cardView.setFocusable(true);
        cardView.setFocusableInTouchMode(true);
        updateCardBackgroundColor(cardView, false);
        return new ViewHolder(cardView);
    }

    private static void updateCardBackgroundColor(ImageCardView view, boolean selected) {
        int color = selected ? sSelectedBackgroundColor : sDefaultBackgroundColor;
        // Both background colors should be set because the view's background is temporarily visible
        // during animations.
        view.setBackgroundColor(color);
        view.findViewById(R.id.info_field).setBackgroundColor(color);
    }

    @Override
    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
// Path: episode_4/TVDemoApp/app/src/main/java/com/sgottard/tvdemoapp/model/Movie.java
// public class Movie implements Parcelable {
//     private static final String TAG = "Movie";
//     static final long serialVersionUID = 727566175075960653L;
//     private static int sCount = 0;
//     private String mId;
//     private String mTitle;
//     private String mDescription;
//     private String mBgImageUrl;
//     private String mCardImageUrl;
//     private String mVideoUrl;
//     private String mStudio;
//     private String mCategory;
// 
//     public Movie() {
// 
//     }
// 
//     public Movie(Parcel in){
//         String[] data = new String[8];
// 
//         in.readStringArray(data);
//         mId = data[0];
//         mTitle = data[1];
//         mDescription = data[2];
//         mBgImageUrl = data[3];
//         mCardImageUrl = data[4];
//         mVideoUrl = data[5];
//         mStudio = data[6];
//         mCategory = data[7];
//     }
// 
//     public static String getCount() {
//         return Integer.toString(sCount);
//     }
// 
//     public static void incrementCount() {
//         sCount++;
//     }
// 
//     public String getId() {
//         return mId;
//     }
// 
//     public void setId(String id) {
//         mId = id;
//     }
// 
//     public String getTitle() {
//         return mTitle;
//     }
// 
//     public void setTitle(String title) {
//         mTitle = title;
//     }
// 
//     public String getDescription() {
//         return mDescription;
//     }
// 
//     public void setDescription(String description) {
//         mDescription = description;
//     }
// 
//     public String getStudio() {
//         return mStudio;
//     }
// 
//     public void setStudio(String studio) {
//         mStudio = studio;
//     }
// 
//     public String getVideoUrl() {
//         return mVideoUrl;
//     }
// 
//     public void setVideoUrl(String videoUrl) {
//         mVideoUrl = videoUrl;
//     }
// 
//     public String getBackgroundImageUrl() {
//         return mBgImageUrl;
//     }
// 
//     public void setBackgroundImageUrl(String bgImageUrl) {
//         mBgImageUrl = bgImageUrl;
//     }
// 
//     public String getCardImageUrl() {
//         return mCardImageUrl;
//     }
// 
//     public void setCardImageUrl(String cardImageUrl) {
//         mCardImageUrl = cardImageUrl;
//     }
// 
//     public String getCategory() {
//         return mCategory;
//     }
// 
//     public void setCategory(String category) {
//         mCategory = category;
//     }
// 
//     public URI getBackgroundImageURI() {
//         try {
//             return new URI(getBackgroundImageUrl());
//         } catch (URISyntaxException e) {
//             return null;
//         }
//     }
// 
//     public int describeContents() {
//         return 0;
//     }
// 
//     @Override
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeStringArray(new String[] {mId,
//                 mTitle,
//                 mDescription,
//                 mBgImageUrl,
//                 mCardImageUrl,
//                 mVideoUrl,
//                 mStudio,
//                 mCategory});
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder sb = new StringBuilder(200);
//         sb.append("Movie{");
//         sb.append("mId=" + mId);
//         sb.append(", mTitle='" + mTitle + '\'');
//         sb.append(", mVideoUrl='" + mVideoUrl + '\'');
//         sb.append(", backgroundImageUrl='" + mBgImageUrl + '\'');
//         sb.append(", backgroundImageURI='" + getBackgroundImageURI().toString() + '\'');
//         sb.append(", mCardImageUrl='" + mCardImageUrl + '\'');
//         sb.append('}');
//         return sb.toString();
//     }
// 
//     public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
//         public Movie createFromParcel(Parcel in) {
//             return new Movie(in);
//         }
// 
//         public Movie[] newArray(int size) {
//             return new Movie[size];
//         }
//     };
// }


// Path: episode_4/TVDemoApp/app/src/main/java/com/sgottard/tvdemoapp/presenter/CardPresenter.java
import android.graphics.drawable.Drawable;
import android.support.v17.leanback.widget.ImageCardView;
import android.support.v17.leanback.widget.Presenter;
import android.util.Log;
import android.view.ViewGroup;
import com.bumptech.glide.Glide;
import com.sgottard.tvdemoapp.model.Movie;
import com.sgottard.tvdemoapp.tvleanback.R;

        Log.d(TAG, "onCreateViewHolder");

        sDefaultBackgroundColor = parent.getResources().getColor(R.color.default_background);
        sSelectedBackgroundColor = parent.getResources().getColor(R.color.selected_background);
        mDefaultCardImage = parent.getResources().getDrawable(R.drawable.movie);

        ImageCardView cardView = new ImageCardView(parent.getContext()) {
            @Override
            public void setSelected(boolean selected) {
                updateCardBackgroundColor(this, selected);
                super.setSelected(selected);
            }
        };

        cardView.setFocusable(true);
        cardView.setFocusableInTouchMode(true);
        updateCardBackgroundColor(cardView, false);
        return new ViewHolder(cardView);
    }

    private static void updateCardBackgroundColor(ImageCardView view, boolean selected) {
        int color = selected ? sSelectedBackgroundColor : sDefaultBackgroundColor;
        // Both background colors should be set because the view's background is temporarily visible
        // during animations.
        view.setBackgroundColor(color);
        view.findViewById(R.id.info_field).setBackgroundColor(color);
    }

    @Override
    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
        Movie movie = (Movie) item;