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