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