VerticalGridSupportFragment.java revision a373804d10f93a9488adc35cf6ce44dce09b3778
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.transition.TransitionHelper; 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.VerticalGridPresenter; 28import android.support.v17.leanback.widget.ObjectAdapter; 29import android.os.Bundle; 30import android.util.Log; 31import android.view.LayoutInflater; 32import android.view.View; 33import android.view.ViewGroup; 34 35/** 36 * A fragment for creating leanback vertical grids. 37 * 38 * <p>Renders a vertical grid of objects given a {@link VerticalGridPresenter} and 39 * an {@link ObjectAdapter}. 40 */ 41public class VerticalGridSupportFragment extends BaseSupportFragment { 42 private static final String TAG = "VerticalGridSupportFragment"; 43 private static boolean DEBUG = false; 44 45 private ObjectAdapter mAdapter; 46 private VerticalGridPresenter mGridPresenter; 47 private VerticalGridPresenter.ViewHolder mGridViewHolder; 48 private OnItemViewSelectedListener mOnItemViewSelectedListener; 49 private OnItemViewClickedListener mOnItemViewClickedListener; 50 private Object mSceneAfterEntranceTransition; 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 ViewGroup gridFrame = (ViewGroup) root.findViewById(R.id.grid_frame); 163 installTitleView(inflater, gridFrame, savedInstanceState); 164 getProgressBarManager().setRootView(root); 165 return root; 166 } 167 168 @Override 169 public void onViewCreated(View view, Bundle savedInstanceState) { 170 super.onViewCreated(view, savedInstanceState); 171 ViewGroup gridDock = (ViewGroup) view.findViewById(R.id.browse_grid_dock); 172 mGridViewHolder = mGridPresenter.onCreateViewHolder(gridDock); 173 gridDock.addView(mGridViewHolder.view); 174 mGridViewHolder.getGridView().setOnChildLaidOutListener(mChildLaidOutListener); 175 176 mSceneAfterEntranceTransition = TransitionHelper.createScene(gridDock, new Runnable() { 177 @Override 178 public void run() { 179 setEntranceTransitionState(true); 180 } 181 }); 182 183 updateAdapter(); 184 } 185 186 private void setupFocusSearchListener() { 187 BrowseFrameLayout browseFrameLayout = (BrowseFrameLayout) getView().findViewById( 188 R.id.grid_frame); 189 browseFrameLayout.setOnFocusSearchListener(getTitleHelper().getOnFocusSearchListener()); 190 } 191 192 @Override 193 public void onStart() { 194 super.onStart(); 195 setupFocusSearchListener(); 196 if (isEntranceTransitionEnabled()) { 197 setEntranceTransitionState(false); 198 } 199 } 200 201 @Override 202 public void onDestroyView() { 203 super.onDestroyView(); 204 mGridViewHolder = null; 205 } 206 207 /** 208 * Sets the selected item position. 209 */ 210 public void setSelectedPosition(int position) { 211 mSelectedPosition = position; 212 if(mGridViewHolder != null && mGridViewHolder.getGridView().getAdapter() != null) { 213 mGridViewHolder.getGridView().setSelectedPositionSmooth(position); 214 } 215 } 216 217 private void updateAdapter() { 218 if (mGridViewHolder != null) { 219 mGridPresenter.onBindViewHolder(mGridViewHolder, mAdapter); 220 if (mSelectedPosition != -1) { 221 mGridViewHolder.getGridView().setSelectedPosition(mSelectedPosition); 222 } 223 } 224 } 225 226 @Override 227 protected Object createEntranceTransition() { 228 return TransitionHelper.loadTransition(getActivity(), 229 R.transition.lb_vertical_grid_entrance_transition); 230 } 231 232 @Override 233 protected void runEntranceTransition(Object entranceTransition) { 234 TransitionHelper.runTransition(mSceneAfterEntranceTransition, entranceTransition); 235 } 236 237 void setEntranceTransitionState(boolean afterTransition) { 238 mGridPresenter.setEntranceTransitionState(mGridViewHolder, afterTransition); 239 } 240} 241