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 */ 17 package androidx.leanback.app; 18 19 import android.os.Bundle; 20 import android.util.Log; 21 import android.view.LayoutInflater; 22 import android.view.View; 23 import android.view.ViewGroup; 24 25 import androidx.leanback.R; 26 import androidx.leanback.transition.TransitionHelper; 27 import androidx.leanback.util.StateMachine.State; 28 import androidx.leanback.widget.BrowseFrameLayout; 29 import androidx.leanback.widget.ObjectAdapter; 30 import androidx.leanback.widget.OnChildLaidOutListener; 31 import androidx.leanback.widget.OnItemViewClickedListener; 32 import androidx.leanback.widget.OnItemViewSelectedListener; 33 import androidx.leanback.widget.Presenter; 34 import androidx.leanback.widget.Row; 35 import androidx.leanback.widget.RowPresenter; 36 import androidx.leanback.widget.VerticalGridPresenter; 37 38 /** 39 * A fragment for creating leanback vertical grids. 40 * 41 * <p>Renders a vertical grid of objects given a {@link VerticalGridPresenter} and 42 * an {@link ObjectAdapter}. 43 * @deprecated use {@link VerticalGridSupportFragment} 44 */ 45 @Deprecated 46 public class VerticalGridFragment extends BaseFragment { 47 static final String TAG = "VerticalGF"; 48 static final boolean DEBUG = false; 49 50 private ObjectAdapter mAdapter; 51 private VerticalGridPresenter mGridPresenter; 52 VerticalGridPresenter.ViewHolder mGridViewHolder; 53 OnItemViewSelectedListener mOnItemViewSelectedListener; 54 private OnItemViewClickedListener mOnItemViewClickedListener; 55 private Object mSceneAfterEntranceTransition; 56 private int mSelectedPosition = -1; 57 58 /** 59 * State to setEntranceTransitionState(false) 60 */ 61 final State STATE_SET_ENTRANCE_START_STATE = new State("SET_ENTRANCE_START_STATE") { 62 @Override 63 public void run() { 64 setEntranceTransitionState(false); 65 } 66 }; 67 68 @Override 69 void createStateMachineStates() { 70 super.createStateMachineStates(); 71 mStateMachine.addState(STATE_SET_ENTRANCE_START_STATE); 72 } 73 74 @Override 75 void createStateMachineTransitions() { 76 super.createStateMachineTransitions(); 77 mStateMachine.addTransition(STATE_ENTRANCE_ON_PREPARED, 78 STATE_SET_ENTRANCE_START_STATE, EVT_ON_CREATEVIEW); 79 } 80 81 /** 82 * Sets the grid presenter. 83 */ 84 public void setGridPresenter(VerticalGridPresenter gridPresenter) { 85 if (gridPresenter == null) { 86 throw new IllegalArgumentException("Grid presenter may not be null"); 87 } 88 mGridPresenter = gridPresenter; 89 mGridPresenter.setOnItemViewSelectedListener(mViewSelectedListener); 90 if (mOnItemViewClickedListener != null) { 91 mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener); 92 } 93 } 94 95 /** 96 * Returns the grid presenter. 97 */ 98 public VerticalGridPresenter getGridPresenter() { 99 return mGridPresenter; 100 } 101 102 /** 103 * Sets the object adapter for the fragment. 104 */ 105 public void setAdapter(ObjectAdapter adapter) { 106 mAdapter = adapter; 107 updateAdapter(); 108 } 109 110 /** 111 * Returns the object adapter. 112 */ 113 public ObjectAdapter getAdapter() { 114 return mAdapter; 115 } 116 117 final private OnItemViewSelectedListener mViewSelectedListener = 118 new OnItemViewSelectedListener() { 119 @Override 120 public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 121 RowPresenter.ViewHolder rowViewHolder, Row row) { 122 int position = mGridViewHolder.getGridView().getSelectedPosition(); 123 if (DEBUG) Log.v(TAG, "grid selected position " + position); 124 gridOnItemSelected(position); 125 if (mOnItemViewSelectedListener != null) { 126 mOnItemViewSelectedListener.onItemSelected(itemViewHolder, item, 127 rowViewHolder, row); 128 } 129 } 130 }; 131 132 final private OnChildLaidOutListener mChildLaidOutListener = 133 new OnChildLaidOutListener() { 134 @Override 135 public void onChildLaidOut(ViewGroup parent, View view, int position, long id) { 136 if (position == 0) { 137 showOrHideTitle(); 138 } 139 } 140 }; 141 142 /** 143 * Sets an item selection listener. 144 */ 145 public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) { 146 mOnItemViewSelectedListener = listener; 147 } 148 149 void gridOnItemSelected(int position) { 150 if (position != mSelectedPosition) { 151 mSelectedPosition = position; 152 showOrHideTitle(); 153 } 154 } 155 156 void showOrHideTitle() { 157 if (mGridViewHolder.getGridView().findViewHolderForAdapterPosition(mSelectedPosition) 158 == null) { 159 return; 160 } 161 if (!mGridViewHolder.getGridView().hasPreviousViewInSameRow(mSelectedPosition)) { 162 showTitle(true); 163 } else { 164 showTitle(false); 165 } 166 } 167 168 /** 169 * Sets an item clicked listener. 170 */ 171 public void setOnItemViewClickedListener(OnItemViewClickedListener listener) { 172 mOnItemViewClickedListener = listener; 173 if (mGridPresenter != null) { 174 mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener); 175 } 176 } 177 178 /** 179 * Returns the item clicked listener. 180 */ 181 public OnItemViewClickedListener getOnItemViewClickedListener() { 182 return mOnItemViewClickedListener; 183 } 184 185 @Override 186 public View onCreateView(LayoutInflater inflater, ViewGroup container, 187 Bundle savedInstanceState) { 188 ViewGroup root = (ViewGroup) inflater.inflate(R.layout.lb_vertical_grid_fragment, 189 container, false); 190 ViewGroup gridFrame = (ViewGroup) root.findViewById(R.id.grid_frame); 191 installTitleView(inflater, gridFrame, savedInstanceState); 192 getProgressBarManager().setRootView(root); 193 194 ViewGroup gridDock = (ViewGroup) root.findViewById(R.id.browse_grid_dock); 195 mGridViewHolder = mGridPresenter.onCreateViewHolder(gridDock); 196 gridDock.addView(mGridViewHolder.view); 197 mGridViewHolder.getGridView().setOnChildLaidOutListener(mChildLaidOutListener); 198 199 mSceneAfterEntranceTransition = TransitionHelper.createScene(gridDock, new Runnable() { 200 @Override 201 public void run() { 202 setEntranceTransitionState(true); 203 } 204 }); 205 206 updateAdapter(); 207 return root; 208 } 209 210 private void setupFocusSearchListener() { 211 BrowseFrameLayout browseFrameLayout = (BrowseFrameLayout) getView().findViewById( 212 R.id.grid_frame); 213 browseFrameLayout.setOnFocusSearchListener(getTitleHelper().getOnFocusSearchListener()); 214 } 215 216 @Override 217 public void onStart() { 218 super.onStart(); 219 setupFocusSearchListener(); 220 } 221 222 @Override 223 public void onDestroyView() { 224 super.onDestroyView(); 225 mGridViewHolder = null; 226 } 227 228 /** 229 * Sets the selected item position. 230 */ 231 public void setSelectedPosition(int position) { 232 mSelectedPosition = position; 233 if(mGridViewHolder != null && mGridViewHolder.getGridView().getAdapter() != null) { 234 mGridViewHolder.getGridView().setSelectedPositionSmooth(position); 235 } 236 } 237 238 private void updateAdapter() { 239 if (mGridViewHolder != null) { 240 mGridPresenter.onBindViewHolder(mGridViewHolder, mAdapter); 241 if (mSelectedPosition != -1) { 242 mGridViewHolder.getGridView().setSelectedPosition(mSelectedPosition); 243 } 244 } 245 } 246 247 @Override 248 protected Object createEntranceTransition() { 249 return TransitionHelper.loadTransition(FragmentUtil.getContext(VerticalGridFragment.this), 250 R.transition.lb_vertical_grid_entrance_transition); 251 } 252 253 @Override 254 protected void runEntranceTransition(Object entranceTransition) { 255 TransitionHelper.runTransition(mSceneAfterEntranceTransition, entranceTransition); 256 } 257 258 void setEntranceTransitionState(boolean afterTransition) { 259 mGridPresenter.setEntranceTransitionState(mGridViewHolder, afterTransition); 260 } 261 } 262