DetailsOverviewRowPresenter.java revision a83005b70853ea52c5d98910762344de16b850a8
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 DetailsFragment}.
29 *
30 * <p>The detailed description is rendered using a {@link Presenter}.
31 */
32public class DetailsOverviewRowPresenter extends RowPresenter {
33
34    private static final String TAG = "DetailsOverviewRowPresenter";
35    private static final boolean DEBUG = false;
36
37    public static class ViewHolder extends RowPresenter.ViewHolder {
38        final ImageView mImageView;
39        final FrameLayout mDetailsDescriptionFrame;
40        final HorizontalGridView mActionsRow;
41        Presenter.ViewHolder mDetailsDescriptionViewHolder;
42
43        public ViewHolder(View rootView) {
44            super(rootView);
45            mImageView = (ImageView) rootView.findViewById(R.id.details_overview_image);
46            mDetailsDescriptionFrame =
47                    (FrameLayout) rootView.findViewById(R.id.details_overview_description);
48            mActionsRow =
49                    (HorizontalGridView) rootView.findViewById(R.id.details_overview_actions);
50        }
51    }
52
53    private final Presenter mDetailsPresenter;
54    private final Presenter mActionPresenter;
55    private final ItemBridgeAdapter mActionBridgeAdapter;
56
57    /**
58     * Constructor that uses the given {@link Presenter} to render the detailed
59     * description for the row.
60     */
61    public DetailsOverviewRowPresenter(Presenter detailsPresenter) {
62        setSelectEffectEnabled(false);
63        mDetailsPresenter = detailsPresenter;
64        mActionPresenter = new ActionPresenter();
65        mActionBridgeAdapter = new ItemBridgeAdapter();
66        FocusHighlightHelper.setupActionItemFocusHighlight(mActionBridgeAdapter);
67    }
68
69    @Override
70    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {
71        View v = LayoutInflater.from(parent.getContext())
72            .inflate(R.layout.lb_details_overview, parent, false);
73        ViewHolder vh = new ViewHolder(v);
74        vh.mDetailsDescriptionViewHolder =
75            mDetailsPresenter.onCreateViewHolder(vh.mDetailsDescriptionFrame);
76        vh.mDetailsDescriptionFrame.addView(vh.mDetailsDescriptionViewHolder.view);
77
78        return vh;
79    }
80
81    @Override
82    public void onBindViewHolder(Presenter.ViewHolder holder, Object item) {
83        super.onBindViewHolder(holder, item);
84
85        DetailsOverviewRow row = (DetailsOverviewRow) item;
86        ViewHolder vh = (ViewHolder) holder;
87        if (row.getImageDrawable() != null) {
88            vh.mImageView.setImageDrawable(row.getImageDrawable());
89        }
90        if (vh.mDetailsDescriptionViewHolder == null) {
91        }
92        mDetailsPresenter.onBindViewHolder(vh.mDetailsDescriptionViewHolder, row);
93
94        mActionBridgeAdapter.clear();
95        ArrayObjectAdapter aoa = new ArrayObjectAdapter(mActionPresenter);
96        aoa.addAll(0, (Collection)row.getActions());
97        mActionBridgeAdapter.setAdapter(aoa);
98        vh.mActionsRow.setAdapter(mActionBridgeAdapter);
99    }
100
101    @Override
102    public void onUnbindViewHolder(Presenter.ViewHolder holder) {
103        super.onUnbindViewHolder(holder);
104
105        ViewHolder vh = (ViewHolder) holder;
106        if (vh.mDetailsDescriptionViewHolder != null) {
107            mDetailsPresenter.onUnbindViewHolder(vh.mDetailsDescriptionViewHolder);
108        }
109
110        vh.mActionsRow.setAdapter(null);
111    }
112}
113