DetailsOverviewRowPresenter.java revision cb13a318e577e14461eb008071dddf762847de42
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 ActionPresenterSelector 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    /**
71     * Set the listener for action click events.
72     */
73    public void setOnActionClickedListener(OnActionClickedListener listener) {
74        mActionPresenterSelector.setOnActionClickedListener(listener);
75    }
76
77    /**
78     * Get the listener for action click events.
79     */
80    public OnActionClickedListener getOnActionClickedListener() {
81        return mActionPresenterSelector.getOnActionClickedListener();
82    }
83
84    @Override
85    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {
86        View v = LayoutInflater.from(parent.getContext())
87            .inflate(R.layout.lb_details_overview, parent, false);
88        ViewHolder vh = new ViewHolder(v);
89        vh.mDetailsDescriptionViewHolder =
90            mDetailsPresenter.onCreateViewHolder(vh.mDetailsDescriptionFrame);
91        vh.mDetailsDescriptionFrame.addView(vh.mDetailsDescriptionViewHolder.view);
92
93        return vh;
94    }
95
96    @Override
97    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {
98        super.onBindRowViewHolder(holder, item);
99
100        DetailsOverviewRow row = (DetailsOverviewRow) item;
101        ViewHolder vh = (ViewHolder) holder;
102        if (row.getImageDrawable() != null) {
103            vh.mImageView.setImageDrawable(row.getImageDrawable());
104        }
105        if (vh.mDetailsDescriptionViewHolder == null) {
106        }
107        mDetailsPresenter.onBindViewHolder(vh.mDetailsDescriptionViewHolder, row);
108
109        mActionBridgeAdapter.clear();
110        ArrayObjectAdapter aoa = new ArrayObjectAdapter(mActionPresenterSelector);
111        aoa.addAll(0, (Collection)row.getActions());
112        mActionBridgeAdapter.setAdapter(aoa);
113        vh.mActionsRow.setAdapter(mActionBridgeAdapter);
114    }
115
116    @Override
117    protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {
118        super.onUnbindRowViewHolder(holder);
119
120        ViewHolder vh = (ViewHolder) holder;
121        if (vh.mDetailsDescriptionViewHolder != null) {
122            mDetailsPresenter.onUnbindViewHolder(vh.mDetailsDescriptionViewHolder);
123        }
124
125        vh.mActionsRow.setAdapter(null);
126    }
127}
128