SideInfoCardPresenter.java revision 86163d539e1aeb9ae7612def7aaf7dbfc5b88f28
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 Hahnpackage android.support.v17.leanback.supportleanbackshowcase.cards.presenters;
1686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn
1786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.content.Context;
1886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.supportleanbackshowcase.R;
1986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
2086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.supportleanbackshowcase.cards.views.BaseCardViewEx;
2186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.supportleanbackshowcase.cards.views.OnActivateStateChangeHandler;
2286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.BaseCardView;
2386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.view.LayoutInflater;
2486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.view.View;
2586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.widget.ImageView;
2686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.widget.TextView;
2786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn
2886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport com.squareup.picasso.Picasso;
2986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn
3086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn/**
3186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * This Presenter will display a card consisting of an image on the left side of the card followed
3286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * by text on the right side. The image and text have equal width. The text will work like a info
3386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * box, thus it will be hidden if the parent row is inactive. This behavior is unique to this card
3486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * and requires a special focus handler.
3586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn */
3686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnpublic class SideInfoCardPresenter extends AbstractCardPresenter<BaseCardViewEx> implements
3786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        OnActivateStateChangeHandler {
3886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn
3986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn    private static final String TAG = "SideInfoCardPresenter";
4086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn
4186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn    public SideInfoCardPresenter(Context context) {
4286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        super(context);
4386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn    }
4486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn
4586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn    @Override protected BaseCardViewEx onCreateView() {
4686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        BaseCardViewEx cardView = new BaseCardViewEx(getContext());
4786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        cardView.setCardType(BaseCardView.CARD_TYPE_MAIN_ONLY);
4886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        cardView.addView(LayoutInflater.from(getContext()).inflate(R.layout.side_info_card, null));
4986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        cardView.setOnActivateStateChangeHandler(this);
5086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        onActivateStateChanged(cardView, cardView.isActivated());
5186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        return cardView;
5286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn    }
5386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn
5486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn    @Override public void onBindViewHolder(Card card, BaseCardViewEx cardView) {
5586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        ImageView imageView = cardView.getViewById(R.id.main_image);
5686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        if (card.getLocalImageResourceName() != null) {
5786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn            int width = (int) getContext().getResources()
5886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn                                          .getDimension(R.dimen.sidetext_image_card_width);
5986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn            int height = (int) getContext().getResources()
6086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn                                           .getDimension(R.dimen.sidetext_image_card_height);
6186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn            int resourceId = getContext().getResources()
6286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn                                         .getIdentifier(card.getLocalImageResourceName(),
6386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn                                                        "drawable", getContext().getPackageName());
6486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn            Picasso.with(getContext()).load(resourceId).resize(width, height).centerCrop()
6586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn                   .into(imageView);
6686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        }
6786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn
6886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        TextView primaryText = cardView.getViewById(R.id.primary_text);
6986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        primaryText.setText(card.getTitle());
7086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn
7186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        TextView secondaryText = cardView.getViewById(R.id.secondary_text);
7286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        secondaryText.setText(card.getDescription());
7386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn
7486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        TextView extraText = cardView.getViewById(R.id.extra_text);
7586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        extraText.setText(card.getExtraText());
7686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn    }
7786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn
7886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn    @Override public void onActivateStateChanged(final BaseCardViewEx cardView, boolean activated) {
7986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn        cardView.getViewById(R.id.info).setVisibility(activated ? View.VISIBLE : View.GONE);
8086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn    }
8186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn}
82