VerticalGridFragment.java revision b86a6c2c71514e0cb693597a955e224811b90f96
1// CHECKSTYLE:OFF Generated code 2/* This file is auto-generated from VerticalGridSupportFragment.java. DO NOT MODIFY. */ 3 4/* 5 * Copyright (C) 2014 The Android Open Source Project 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 8 * in compliance with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software distributed under the License 13 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 14 * or implied. See the License for the specific language governing permissions and limitations under 15 * the License. 16 */ 17package android.support.v17.leanback.app; 18 19import android.os.Bundle; 20import android.support.v17.leanback.R; 21import android.support.v17.leanback.transition.TransitionHelper; 22import android.support.v17.leanback.util.StateMachine.State; 23import android.support.v17.leanback.widget.BrowseFrameLayout; 24import android.support.v17.leanback.widget.ObjectAdapter; 25import android.support.v17.leanback.widget.OnChildLaidOutListener; 26import android.support.v17.leanback.widget.OnItemViewClickedListener; 27import android.support.v17.leanback.widget.OnItemViewSelectedListener; 28import android.support.v17.leanback.widget.Presenter; 29import android.support.v17.leanback.widget.Row; 30import android.support.v17.leanback.widget.RowPresenter; 31import android.support.v17.leanback.widget.VerticalGridPresenter; 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 VerticalGridFragment extends BaseFragment { 44 static final String TAG = "VerticalGF"; 45 static boolean DEBUG = false; 46 47 private ObjectAdapter mAdapter; 48 private VerticalGridPresenter mGridPresenter; 49 VerticalGridPresenter.ViewHolder mGridViewHolder; 50 OnItemViewSelectedListener mOnItemViewSelectedListener; 51 private OnItemViewClickedListener mOnItemViewClickedListener; 52 private Object mSceneAfterEntranceTransition; 53 private int mSelectedPosition = -1; 54 55 /** 56 * State to setEntranceTransitionState(false) 57 */ 58 final State STATE_SET_ENTRANCE_START_STATE = new State("SET_ENTRANCE_START_STATE") { 59 @Override 60 public void run() { 61 setEntranceTransitionState(false); 62 } 63 }; 64 65 @Override 66 void createStateMachineStates() { 67 super.createStateMachineStates(); 68 mStateMachine.addState(STATE_SET_ENTRANCE_START_STATE); 69 } 70 71 @Override 72 void createStateMachineTransitions() { 73 super.createStateMachineTransitions(); 74 mStateMachine.addTransition(STATE_ENTRANCE_ON_PREPARED, 75 STATE_SET_ENTRANCE_START_STATE, EVT_ON_CREATEVIEW); 76 } 77 78 /** 79 * Sets the grid presenter. 80 */ 81 public void setGridPresenter(VerticalGridPresenter gridPresenter) { 82 if (gridPresenter == null) { 83 throw new IllegalArgumentException("Grid presenter may not be null"); 84 } 85 mGridPresenter = gridPresenter; 86 mGridPresenter.setOnItemViewSelectedListener(mViewSelectedListener); 87 if (mOnItemViewClickedListener != null) { 88 mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener); 89 } 90 } 91 92 /** 93 * Returns the grid presenter. 94 */ 95 public VerticalGridPresenter getGridPresenter() { 96 return mGridPresenter; 97 } 98 99 /** 100 * Sets the object adapter for the fragment. 101 */ 102 public void setAdapter(ObjectAdapter adapter) { 103 mAdapter = adapter; 104 updateAdapter(); 105 } 106 107 /** 108 * Returns the object adapter. 109 */ 110 public ObjectAdapter getAdapter() { 111 return mAdapter; 112 } 113 114 final private OnItemViewSelectedListener mViewSelectedListener = 115 new OnItemViewSelectedListener() { 116 @Override 117 public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 118 RowPresenter.ViewHolder rowViewHolder, Row row) { 119 int position = mGridViewHolder.getGridView().getSelectedPosition(); 120 if (DEBUG) Log.v(TAG, "grid selected position " + position); 121 gridOnItemSelected(position); 122 if (mOnItemViewSelectedListener != null) { 123 mOnItemViewSelectedListener.onItemSelected(itemViewHolder, item, 124 rowViewHolder, row); 125 } 126 } 127 }; 128 129 final private OnChildLaidOutListener mChildLaidOutListener = 130 new OnChildLaidOutListener() { 131 @Override 132 public void onChildLaidOut(ViewGroup parent, View view, int position, long id) { 133 if (position == 0) { 134 showOrHideTitle(); 135 } 136 } 137 }; 138 139 /** 140 * Sets an item selection listener. 141 */ 142 public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) { 143 mOnItemViewSelectedListener = listener; 144 } 145 146 void gridOnItemSelected(int position) { 147 if (position != mSelectedPosition) { 148 mSelectedPosition = position; 149 showOrHideTitle(); 150 } 151 } 152 153 void showOrHideTitle() { 154 if (mGridViewHolder.getGridView().findViewHolderForAdapterPosition(mSelectedPosition) 155 == null) { 156 return; 157 } 158 if (!mGridViewHolder.getGridView().hasPreviousViewInSameRow(mSelectedPosition)) { 159 showTitle(true); 160 } else { 161 showTitle(false); 162 } 163 } 164 165 /** 166 * Sets an item clicked listener. 167 */ 168 public void setOnItemViewClickedListener(OnItemViewClickedListener listener) { 169 mOnItemViewClickedListener = listener; 170 if (mGridPresenter != null) { 171 mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener); 172 } 173 } 174 175 /** 176 * Returns the item clicked listener. 177 */ 178 public OnItemViewClickedListener getOnItemViewClickedListener() { 179 return mOnItemViewClickedListener; 180 } 181 182 @Override 183 public View onCreateView(LayoutInflater inflater, ViewGroup container, 184 Bundle savedInstanceState) { 185 ViewGroup root = (ViewGroup) inflater.inflate(R.layout.lb_vertical_grid_fragment, 186 container, false); 187 ViewGroup gridFrame = (ViewGroup) root.findViewById(R.id.grid_frame); 188 installTitleView(inflater, gridFrame, savedInstanceState); 189 getProgressBarManager().setRootView(root); 190 191 ViewGroup gridDock = (ViewGroup) root.findViewById(R.id.browse_grid_dock); 192 mGridViewHolder = mGridPresenter.onCreateViewHolder(gridDock); 193 gridDock.addView(mGridViewHolder.view); 194 mGridViewHolder.getGridView().setOnChildLaidOutListener(mChildLaidOutListener); 195 196 mSceneAfterEntranceTransition = TransitionHelper.createScene(gridDock, new Runnable() { 197 @Override 198 public void run() { 199 setEntranceTransitionState(true); 200 } 201 }); 202 203 updateAdapter(); 204 return root; 205 } 206 207 private void setupFocusSearchListener() { 208 BrowseFrameLayout browseFrameLayout = (BrowseFrameLayout) getView().findViewById( 209 R.id.grid_frame); 210 browseFrameLayout.setOnFocusSearchListener(getTitleHelper().getOnFocusSearchListener()); 211 } 212 213 @Override 214 public void onStart() { 215 super.onStart(); 216 setupFocusSearchListener(); 217 } 218 219 @Override 220 public void onDestroyView() { 221 super.onDestroyView(); 222 mGridViewHolder = null; 223 } 224 225 /** 226 * Sets the selected item position. 227 */ 228 public void setSelectedPosition(int position) { 229 mSelectedPosition = position; 230 if(mGridViewHolder != null && mGridViewHolder.getGridView().getAdapter() != null) { 231 mGridViewHolder.getGridView().setSelectedPositionSmooth(position); 232 } 233 } 234 235 private void updateAdapter() { 236 if (mGridViewHolder != null) { 237 mGridPresenter.onBindViewHolder(mGridViewHolder, mAdapter); 238 if (mSelectedPosition != -1) { 239 mGridViewHolder.getGridView().setSelectedPosition(mSelectedPosition); 240 } 241 } 242 } 243 244 @Override 245 protected Object createEntranceTransition() { 246 return TransitionHelper.loadTransition(FragmentUtil.getContext(VerticalGridFragment.this), 247 R.transition.lb_vertical_grid_entrance_transition); 248 } 249 250 @Override 251 protected void runEntranceTransition(Object entranceTransition) { 252 TransitionHelper.runTransition(mSceneAfterEntranceTransition, entranceTransition); 253 } 254 255 void setEntranceTransitionState(boolean afterTransition) { 256 mGridPresenter.setEntranceTransitionState(mGridViewHolder, afterTransition); 257 } 258} 259