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