1/* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 * in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the License 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 * or implied. See the License for the specific language governing permissions and limitations under 12 * the License. 13 * 14 */ 15 16package android.support.v17.leanback.supportleanbackshowcase.cards.presenters; 17 18import android.content.Context; 19import android.support.v17.leanback.supportleanbackshowcase.R; 20import android.support.v17.leanback.supportleanbackshowcase.models.Card; 21import android.support.v17.leanback.widget.Presenter; 22import android.support.v17.leanback.widget.PresenterSelector; 23 24import java.util.HashMap; 25 26/** 27 * This PresenterSelector will decide what Presenter to use depending on a given card's type. 28 */ 29public class CardPresenterSelector extends PresenterSelector { 30 31 private final Context mContext; 32 private final HashMap<Card.Type, Presenter> presenters = new HashMap<Card.Type, Presenter>(); 33 34 public CardPresenterSelector(Context context) { 35 mContext = context; 36 } 37 38 @Override 39 public Presenter getPresenter(Object item) { 40 if (!(item instanceof Card)) throw new RuntimeException( 41 String.format("The PresenterSelector only supports data items of type '%s'", 42 Card.class.getName())); 43 Card card = (Card) item; 44 Presenter presenter = presenters.get(card.getType()); 45 if (presenter == null) { 46 switch (card.getType()) { 47 case SINGLE_LINE: 48 presenter = new SingleLineCardPresenter(mContext); 49 break; 50 case MOVIE: 51 case MOVIE_BASE: 52 case MOVIE_COMPLETE: 53 case SQUARE_BIG: 54 case GRID_SQUARE: 55 case GAME: { 56 int themeResId = R.style.MovieCardSimpleTheme; 57 if (card.getType() == Card.Type.MOVIE_BASE) { 58 themeResId = R.style.MovieCardBasicTheme; 59 } else if (card.getType() == Card.Type.MOVIE_COMPLETE) { 60 themeResId = R.style.MovieCardCompleteTheme; 61 } else if (card.getType() == Card.Type.SQUARE_BIG) { 62 themeResId = R.style.SquareBigCardTheme; 63 } else if (card.getType() == Card.Type.GRID_SQUARE) { 64 themeResId = R.style.GridCardTheme; 65 } else if (card.getType() == Card.Type.GAME) { 66 themeResId = R.style.GameCardTheme; 67 } 68 presenter = new ImageCardViewPresenter(mContext, themeResId); 69 break; 70 } 71 case SIDE_INFO: 72 presenter = new SideInfoCardPresenter(mContext); 73 break; 74 case TEXT: 75 presenter = new TextCardPresenter(mContext); 76 break; 77 case ICON: 78 presenter = new IconCardPresenter(mContext); 79 break; 80 case CHARACTER: 81 presenter = new CharacterCardPresenter(mContext); 82 break; 83 default: 84 presenter = new ImageCardViewPresenter(mContext); 85 break; 86 } 87 } 88 presenters.put(card.getType(), presenter); 89 return presenter; 90 } 91 92} 93