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