186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn/* 286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * Copyright (C) 2015 The Android Open Source Project 386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * 486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * in compliance with the License. You may obtain a copy of the License at 686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * 786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * http://www.apache.org/licenses/LICENSE-2.0 886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * 986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * Unless required by applicable law or agreed to in writing, software distributed under the License 1086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 1186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * or implied. See the License for the specific language governing permissions and limitations under 1286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * the License. 1386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * 1486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn */ 1586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 1686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnpackage android.support.v17.leanback.supportleanbackshowcase.cards.presenters; 1786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 1886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.content.Context; 1986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.supportleanbackshowcase.R; 20ad31f63f5843898de645f6ee1ac244c872ded8ccRobert Hahnimport android.support.v17.leanback.supportleanbackshowcase.models.Card; 2186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.Presenter; 2286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.PresenterSelector; 2386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 2486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport java.util.HashMap; 2586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 2686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn/** 2786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * This PresenterSelector will decide what Presenter to use depending on a given card's type. 2886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn */ 2986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnpublic class CardPresenterSelector extends PresenterSelector { 3086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 3186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn private final Context mContext; 3286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn private final HashMap<Card.Type, Presenter> presenters = new HashMap<Card.Type, Presenter>(); 3386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 3486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn public CardPresenterSelector(Context context) { 3586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mContext = context; 3686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 3786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 3831475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn @Override 3931475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn public Presenter getPresenter(Object item) { 4086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn if (!(item instanceof Card)) throw new RuntimeException( 4186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn String.format("The PresenterSelector only supports data items of type '%s'", 4231475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn Card.class.getName())); 4386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn Card card = (Card) item; 4486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn Presenter presenter = presenters.get(card.getType()); 4531475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn if (presenter == null) { 4631475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn switch (card.getType()) { 4731475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn case SINGLE_LINE: 4831475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn presenter = new SingleLineCardPresenter(mContext); 4931475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn break; 5031475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn case MOVIE: 5131475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn case MOVIE_BASE: 5231475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn case MOVIE_COMPLETE: 5331475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn case SQUARE_BIG: 5431475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn case GRID_SQUARE: 5531475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn case GAME: { 568355a74004844c0b6c0ad5c6e70d3efe93f18595Keyvan Amiri int themeResId = R.style.MovieCardSimpleTheme; 5731475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn if (card.getType() == Card.Type.MOVIE_BASE) { 588355a74004844c0b6c0ad5c6e70d3efe93f18595Keyvan Amiri themeResId = R.style.MovieCardBasicTheme; 5931475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn } else if (card.getType() == Card.Type.MOVIE_COMPLETE) { 608355a74004844c0b6c0ad5c6e70d3efe93f18595Keyvan Amiri themeResId = R.style.MovieCardCompleteTheme; 6131475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn } else if (card.getType() == Card.Type.SQUARE_BIG) { 628355a74004844c0b6c0ad5c6e70d3efe93f18595Keyvan Amiri themeResId = R.style.SquareBigCardTheme; 6331475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn } else if (card.getType() == Card.Type.GRID_SQUARE) { 648355a74004844c0b6c0ad5c6e70d3efe93f18595Keyvan Amiri themeResId = R.style.GridCardTheme; 6531475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn } else if (card.getType() == Card.Type.GAME) { 668355a74004844c0b6c0ad5c6e70d3efe93f18595Keyvan Amiri themeResId = R.style.GameCardTheme; 6731475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn } 688355a74004844c0b6c0ad5c6e70d3efe93f18595Keyvan Amiri presenter = new ImageCardViewPresenter(mContext, themeResId); 6931475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn break; 7031475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn } 7131475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn case SIDE_INFO: 7231475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn presenter = new SideInfoCardPresenter(mContext); 7331475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn break; 7431475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn case TEXT: 7531475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn presenter = new TextCardPresenter(mContext); 7631475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn break; 7731475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn case ICON: 7831475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn presenter = new IconCardPresenter(mContext); 7931475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn break; 8031475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn case CHARACTER: 8131475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn presenter = new CharacterCardPresenter(mContext); 8231475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn break; 8331475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn default: 8431475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn presenter = new ImageCardViewPresenter(mContext); 8531475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn break; 8686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 8786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 8886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn presenters.put(card.getType(), presenter); 8986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn return presenter; 9086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 9186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 9286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn} 93