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.annotation.ColorInt; 19import android.support.v17.leanback.R; 20import android.support.v17.leanback.widget.BrowseFrameLayout; 21import android.support.v17.leanback.widget.OnChildLaidOutListener; 22import android.support.v17.leanback.widget.OnItemViewClickedListener; 23import android.support.v17.leanback.widget.OnItemViewSelectedListener; 24import android.support.v17.leanback.widget.Presenter; 25import android.support.v17.leanback.widget.Row; 26import android.support.v17.leanback.widget.RowPresenter; 27import android.support.v17.leanback.widget.TitleHelper; 28import android.support.v17.leanback.widget.TitleView; 29import android.support.v17.leanback.widget.VerticalGridPresenter; 30import android.support.v17.leanback.widget.ObjectAdapter; 31import android.os.Bundle; 32import android.util.Log; 33import android.view.LayoutInflater; 34import android.view.View; 35import android.view.ViewGroup; 36 37/** 38 * A fragment for creating leanback vertical grids. 39 * 40 * <p>Renders a vertical grid of objects given a {@link VerticalGridPresenter} and 41 * an {@link ObjectAdapter}. 42 */ 43public class VerticalGridSupportFragment extends BrandedSupportFragment { 44 private static final String TAG = "VerticalGridSupportFragment"; 45 private static boolean DEBUG = false; 46 47 private ObjectAdapter mAdapter; 48 private VerticalGridPresenter mGridPresenter; 49 private VerticalGridPresenter.ViewHolder mGridViewHolder; 50 private OnItemViewSelectedListener mOnItemViewSelectedListener; 51 private OnItemViewClickedListener mOnItemViewClickedListener; 52 private int mSelectedPosition = -1; 53 54 /** 55 * Sets the grid presenter. 56 */ 57 public void setGridPresenter(VerticalGridPresenter gridPresenter) { 58 if (gridPresenter == null) { 59 throw new IllegalArgumentException("Grid presenter may not be null"); 60 } 61 mGridPresenter = gridPresenter; 62 mGridPresenter.setOnItemViewSelectedListener(mViewSelectedListener); 63 if (mOnItemViewClickedListener != null) { 64 mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener); 65 } 66 } 67 68 /** 69 * Returns the grid presenter. 70 */ 71 public VerticalGridPresenter getGridPresenter() { 72 return mGridPresenter; 73 } 74 75 /** 76 * Sets the object adapter for the fragment. 77 */ 78 public void setAdapter(ObjectAdapter adapter) { 79 mAdapter = adapter; 80 updateAdapter(); 81 } 82 83 /** 84 * Returns the object adapter. 85 */ 86 public ObjectAdapter getAdapter() { 87 return mAdapter; 88 } 89 90 final private OnItemViewSelectedListener mViewSelectedListener = 91 new OnItemViewSelectedListener() { 92 @Override 93 public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 94 RowPresenter.ViewHolder rowViewHolder, Row row) { 95 int position = mGridViewHolder.getGridView().getSelectedPosition(); 96 if (DEBUG) Log.v(TAG, "grid selected position " + position); 97 gridOnItemSelected(position); 98 if (mOnItemViewSelectedListener != null) { 99 mOnItemViewSelectedListener.onItemSelected(itemViewHolder, item, 100 rowViewHolder, row); 101 } 102 } 103 }; 104 105 final private OnChildLaidOutListener mChildLaidOutListener = 106 new OnChildLaidOutListener() { 107 @Override 108 public void onChildLaidOut(ViewGroup parent, View view, int position, long id) { 109 if (position == 0) { 110 showOrHideTitle(); 111 } 112 } 113 }; 114 115 /** 116 * Sets an item selection listener. 117 */ 118 public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) { 119 mOnItemViewSelectedListener = listener; 120 } 121 122 private void gridOnItemSelected(int position) { 123 if (position != mSelectedPosition) { 124 mSelectedPosition = position; 125 showOrHideTitle(); 126 } 127 } 128 129 private void showOrHideTitle() { 130 if (mGridViewHolder.getGridView().findViewHolderForAdapterPosition(mSelectedPosition) 131 == null) { 132 return; 133 } 134 if (!mGridViewHolder.getGridView().hasPreviousViewInSameRow(mSelectedPosition)) { 135 showTitle(true); 136 } else { 137 showTitle(false); 138 } 139 } 140 141 /** 142 * Sets an item clicked listener. 143 */ 144 public void setOnItemViewClickedListener(OnItemViewClickedListener listener) { 145 mOnItemViewClickedListener = listener; 146 if (mGridPresenter != null) { 147 mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener); 148 } 149 } 150 151 /** 152 * Returns the item clicked listener. 153 */ 154 public OnItemViewClickedListener getOnItemViewClickedListener() { 155 return mOnItemViewClickedListener; 156 } 157 158 @Override 159 public View onCreateView(LayoutInflater inflater, ViewGroup container, 160 Bundle savedInstanceState) { 161 ViewGroup root = (ViewGroup) inflater.inflate(R.layout.lb_vertical_grid_fragment, 162 container, false); 163 setTitleView((TitleView) root.findViewById(R.id.browse_title_group)); 164 return root; 165 } 166 167 @Override 168 public void onViewCreated(View view, Bundle savedInstanceState) { 169 super.onViewCreated(view, savedInstanceState); 170 ViewGroup gridDock = (ViewGroup) view.findViewById(R.id.browse_grid_dock); 171 mGridViewHolder = mGridPresenter.onCreateViewHolder(gridDock); 172 gridDock.addView(mGridViewHolder.view); 173 mGridViewHolder.getGridView().setOnChildLaidOutListener(mChildLaidOutListener); 174 175 updateAdapter(); 176 } 177 178 private void setupFocusSearchListener() { 179 BrowseFrameLayout browseFrameLayout = (BrowseFrameLayout) getView().findViewById( 180 R.id.grid_frame); 181 browseFrameLayout.setOnFocusSearchListener(getTitleHelper().getOnFocusSearchListener()); 182 } 183 184 @Override 185 public void onStart() { 186 super.onStart(); 187 setupFocusSearchListener(); 188 mGridViewHolder.getGridView().requestFocus(); 189 } 190 191 @Override 192 public void onDestroyView() { 193 super.onDestroyView(); 194 mGridViewHolder = null; 195 } 196 197 /** 198 * Sets the selected item position. 199 */ 200 public void setSelectedPosition(int position) { 201 mSelectedPosition = position; 202 if(mGridViewHolder != null && mGridViewHolder.getGridView().getAdapter() != null) { 203 mGridViewHolder.getGridView().setSelectedPositionSmooth(position); 204 } 205 } 206 207 private void updateAdapter() { 208 if (mGridViewHolder != null) { 209 mGridPresenter.onBindViewHolder(mGridViewHolder, mAdapter); 210 if (mSelectedPosition != -1) { 211 mGridViewHolder.getGridView().setSelectedPosition(mSelectedPosition); 212 } 213 } 214 } 215} 216