DetailsOverviewRowPresenter.java revision e652714f2fcc876de6f168b28dd03bfc22e1cb96
1/*
2 * Copyright (C) 2014 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 */
14package android.support.v17.leanback.widget;
15
16import android.support.v17.leanback.R;
17import android.view.LayoutInflater;
18import android.view.View;
19import android.view.ViewGroup;
20import android.widget.FrameLayout;
21import android.widget.ImageView;
22
23import java.util.Collection;
24
25/**
26 * DetailsOverviewRowPresenter renders {@link DetailsOverviewRow} to display an
27 * overview of an item. Typically this row will be the first row in a fragment
28 * such as {@link android.support.v17.leanback.app.DetailsFragment
29 * DetailsFragment}.
30 *
31 * <p>The detailed description is rendered using a {@link Presenter}.
32 */
33public class DetailsOverviewRowPresenter extends RowPresenter {
34
35    private static final String TAG = "DetailsOverviewRowPresenter";
36    private static final boolean DEBUG = false;
37
38    public static class ViewHolder extends RowPresenter.ViewHolder {
39        final ImageView mImageView;
40        final FrameLayout mDetailsDescriptionFrame;
41        final HorizontalGridView mActionsRow;
42        Presenter.ViewHolder mDetailsDescriptionViewHolder;
43
44        public ViewHolder(View rootView) {
45            super(rootView);
46            mImageView = (ImageView) rootView.findViewById(R.id.details_overview_image);
47            mDetailsDescriptionFrame =
48                    (FrameLayout) rootView.findViewById(R.id.details_overview_description);
49            mActionsRow =
50                    (HorizontalGridView) rootView.findViewById(R.id.details_overview_actions);
51        }
52    }
53
54    private final Presenter mDetailsPresenter;
55    private final PresenterSelector mActionPresenterSelector;
56    private final ItemBridgeAdapter mActionBridgeAdapter;
57
58    /**
59     * Constructor that uses the given {@link Presenter} to render the detailed
60     * description for the row.
61     */
62    public DetailsOverviewRowPresenter(Presenter detailsPresenter) {
63        setSelectEffectEnabled(false);
64        mDetailsPresenter = detailsPresenter;
65        mActionPresenterSelector = new ActionPresenterSelector();
66        mActionBridgeAdapter = new ItemBridgeAdapter();
67        FocusHighlightHelper.setupActionItemFocusHighlight(mActionBridgeAdapter);
68    }
69
70    @Override
71    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {
72        View v = LayoutInflater.from(parent.getContext())
73            .inflate(R.layout.lb_details_overview, parent, false);
74        ViewHolder vh = new ViewHolder(v);
75        vh.mDetailsDescriptionViewHolder =
76            mDetailsPresenter.onCreateViewHolder(vh.mDetailsDescriptionFrame);
77        vh.mDetailsDescriptionFrame.addView(vh.mDetailsDescriptionViewHolder.view);
78
79        return vh;
80    }
81
82    @Override
83    public void onBindViewHolder(Presenter.ViewHolder holder, Object item) {
84        super.onBindViewHolder(holder, item);
85
86        DetailsOverviewRow row = (DetailsOverviewRow) item;
87        ViewHolder vh = (ViewHolder) holder;
88        if (row.getImageDrawable() != null) {
89            vh.mImageView.setImageDrawable(row.getImageDrawable());
90        }
91        if (vh.mDetailsDescriptionViewHolder == null) {
92        }
93        mDetailsPresenter.onBindViewHolder(vh.mDetailsDescriptionViewHolder, row);
94
95        mActionBridgeAdapter.clear();
96        ArrayObjectAdapter aoa = new ArrayObjectAdapter(mActionPresenterSelector);
97        aoa.addAll(0, (Collection)row.getActions());
98        mActionBridgeAdapter.setAdapter(aoa);
99        vh.mActionsRow.setAdapter(mActionBridgeAdapter);
100    }
101
102    @Override
103    public void onUnbindViewHolder(Presenter.ViewHolder holder) {
104        super.onUnbindViewHolder(holder);
105
106        ViewHolder vh = (ViewHolder) holder;
107        if (vh.mDetailsDescriptionViewHolder != null) {
108            mDetailsPresenter.onUnbindViewHolder(vh.mDetailsDescriptionViewHolder);
109        }
110
111        vh.mActionsRow.setAdapter(null);
112    }
113}
114