VerticalGridSupportFragment.java revision e7246ef136ed686d8caf339d4d1fd8e37b499c6a
1/* This file is auto-generated from VerticalGridFragment.java. DO NOT MODIFY. */ 2 3/* 4 * Copyright (C) 2014 The Android Open Source Project 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 7 * in compliance with the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software distributed under the License 12 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 13 * or implied. See the License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16package android.support.v17.leanback.app; 17 18import android.support.v17.leanback.R; 19import android.support.v17.leanback.widget.BrowseFrameLayout; 20import android.support.v17.leanback.widget.OnChildLaidOutListener; 21import android.support.v17.leanback.widget.OnItemViewClickedListener; 22import android.support.v17.leanback.widget.OnItemViewSelectedListener; 23import android.support.v17.leanback.widget.Presenter; 24import android.support.v17.leanback.widget.Row; 25import android.support.v17.leanback.widget.RowPresenter; 26import android.support.v17.leanback.widget.TitleHelper; 27import android.support.v17.leanback.widget.TitleView; 28import android.support.v17.leanback.widget.VerticalGridPresenter; 29import android.support.v17.leanback.widget.ObjectAdapter; 30import android.os.Bundle; 31import android.util.Log; 32import android.view.LayoutInflater; 33import android.view.View; 34import android.view.ViewGroup; 35 36/** 37 * A fragment for creating leanback vertical grids. 38 * 39 * <p>Renders a vertical grid of objects given a {@link VerticalGridPresenter} and 40 * an {@link ObjectAdapter}. 41 */ 42public class VerticalGridSupportFragment extends BrandedSupportFragment { 43 private static final String TAG = "VerticalGridSupportFragment"; 44 private static boolean DEBUG = false; 45 46 private ObjectAdapter mAdapter; 47 private VerticalGridPresenter mGridPresenter; 48 private VerticalGridPresenter.ViewHolder mGridViewHolder; 49 private OnItemViewSelectedListener mOnItemViewSelectedListener; 50 private OnItemViewClickedListener mOnItemViewClickedListener; 51 private int mSelectedPosition = -1; 52 53 /** 54 * Sets the grid presenter. 55 */ 56 public void setGridPresenter(VerticalGridPresenter gridPresenter) { 57 if (gridPresenter == null) { 58 throw new IllegalArgumentException("Grid presenter may not be null"); 59 } 60 mGridPresenter = gridPresenter; 61 mGridPresenter.setOnItemViewSelectedListener(mViewSelectedListener); 62 if (mOnItemViewClickedListener != null) { 63 mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener); 64 } 65 } 66 67 /** 68 * Returns the grid presenter. 69 */ 70 public VerticalGridPresenter getGridPresenter() { 71 return mGridPresenter; 72 } 73 74 /** 75 * Sets the object adapter for the fragment. 76 */ 77 public void setAdapter(ObjectAdapter adapter) { 78 mAdapter = adapter; 79 updateAdapter(); 80 } 81 82 /** 83 * Returns the object adapter. 84 */ 85 public ObjectAdapter getAdapter() { 86 return mAdapter; 87 } 88 89 final private OnItemViewSelectedListener mViewSelectedListener = 90 new OnItemViewSelectedListener() { 91 @Override 92 public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 93 RowPresenter.ViewHolder rowViewHolder, Row row) { 94 int position = mGridViewHolder.getGridView().getSelectedPosition(); 95 if (DEBUG) Log.v(TAG, "grid selected position " + position); 96 gridOnItemSelected(position); 97 if (mOnItemViewSelectedListener != null) { 98 mOnItemViewSelectedListener.onItemSelected(itemViewHolder, item, 99 rowViewHolder, row); 100 } 101 } 102 }; 103 104 final private OnChildLaidOutListener mChildLaidOutListener = 105 new OnChildLaidOutListener() { 106 @Override 107 public void onChildLaidOut(ViewGroup parent, View view, int position, long id) { 108 if (position == 0) { 109 showOrHideTitle(); 110 } 111 } 112 }; 113 114 /** 115 * Sets an item selection listener. 116 */ 117 public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) { 118 mOnItemViewSelectedListener = listener; 119 } 120 121 private void gridOnItemSelected(int position) { 122 if (position != mSelectedPosition) { 123 mSelectedPosition = position; 124 showOrHideTitle(); 125 } 126 } 127 128 private void showOrHideTitle() { 129 if (mGridViewHolder.getGridView().findViewHolderForAdapterPosition(mSelectedPosition) 130 == null) { 131 return; 132 } 133 if (!mGridViewHolder.getGridView().hasPreviousViewInSameRow(mSelectedPosition)) { 134 showTitle(true); 135 } else { 136 showTitle(false); 137 } 138 } 139 140 /** 141 * Sets an item clicked listener. 142 */ 143 public void setOnItemViewClickedListener(OnItemViewClickedListener listener) { 144 mOnItemViewClickedListener = listener; 145 if (mGridPresenter != null) { 146 mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener); 147 } 148 } 149 150 /** 151 * Returns the item clicked listener. 152 */ 153 public OnItemViewClickedListener getOnItemViewClickedListener() { 154 return mOnItemViewClickedListener; 155 } 156 157 @Override 158 public View onCreateView(LayoutInflater inflater, ViewGroup container, 159 Bundle savedInstanceState) { 160 ViewGroup root = (ViewGroup) inflater.inflate(R.layout.lb_vertical_grid_fragment, 161 container, false); 162 setTitleView((TitleView) root.findViewById(R.id.browse_title_group)); 163 return root; 164 } 165 166 @Override 167 public void onViewCreated(View view, Bundle savedInstanceState) { 168 super.onViewCreated(view, savedInstanceState); 169 ViewGroup gridDock = (ViewGroup) view.findViewById(R.id.browse_grid_dock); 170 mGridViewHolder = mGridPresenter.onCreateViewHolder(gridDock); 171 gridDock.addView(mGridViewHolder.view); 172 mGridViewHolder.getGridView().setOnChildLaidOutListener(mChildLaidOutListener); 173 174 updateAdapter(); 175 } 176 177 private void setupFocusSearchListener() { 178 BrowseFrameLayout browseFrameLayout = (BrowseFrameLayout) getView().findViewById( 179 R.id.grid_frame); 180 browseFrameLayout.setOnFocusSearchListener(getTitleHelper().getOnFocusSearchListener()); 181 } 182 183 @Override 184 public void onStart() { 185 super.onStart(); 186 setupFocusSearchListener(); 187 mGridViewHolder.getGridView().requestFocus(); 188 } 189 190 @Override 191 public void onDestroyView() { 192 super.onDestroyView(); 193 mGridViewHolder = null; 194 } 195 196 /** 197 * Sets the selected item position. 198 */ 199 public void setSelectedPosition(int position) { 200 mSelectedPosition = position; 201 if(mGridViewHolder != null && mGridViewHolder.getGridView().getAdapter() != null) { 202 mGridViewHolder.getGridView().setSelectedPositionSmooth(position); 203 } 204 } 205 206 private void updateAdapter() { 207 if (mGridViewHolder != null) { 208 mGridPresenter.onBindViewHolder(mGridViewHolder, mAdapter); 209 if (mSelectedPosition != -1) { 210 mGridViewHolder.getGridView().setSelectedPosition(mSelectedPosition); 211 } 212 } 213 } 214} 215