VerticalGridPresenter.java revision 0d734cb6671b314f84cb4911cd37631177d07fba
1739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout/* 2739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Copyright (C) 2014 The Android Open Source Project 3739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * 4739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * in compliance with the License. You may obtain a copy of the License at 6739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * 7739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * http://www.apache.org/licenses/LICENSE-2.0 8739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * 9739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Unless required by applicable law or agreed to in writing, software distributed under the License 10739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * or implied. See the License for the specific language governing permissions and limitations under 12739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * the License. 13739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 14739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutpackage android.support.v17.leanback.widget; 15739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 16739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.R; 17739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.LayoutInflater; 18739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.View; 19739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.ViewGroup; 200d734cb6671b314f84cb4911cd37631177d07fbaCraig Stoutimport android.view.ViewGroup.LayoutParams; 21739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.util.Log; 22739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 23739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout/** 24739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * A presenter that renders objects in a vertical grid. 25739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * 26739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 27739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutpublic class VerticalGridPresenter extends Presenter { 28739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private static final String TAG = "GridPresenter"; 29739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private static final boolean DEBUG = false; 30739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 31739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public static class ViewHolder extends Presenter.ViewHolder { 32739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout final ItemBridgeAdapter mItemBridgeAdapter = new ItemBridgeAdapter(); 33739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout final VerticalGridView mGridView; 34739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout boolean mInitialized; 35739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 36739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public ViewHolder(VerticalGridView view) { 37739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout super(view); 38739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridView = view; 39739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 40739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 41739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public VerticalGridView getGridView() { 42739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return mGridView; 43739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 44739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 45739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 46739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private int mNumColumns = -1; 47739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private int mZoomFactor; 480d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout private boolean mShadowEnabled = true; 49739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private OnItemSelectedListener mOnItemSelectedListener; 50739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private OnItemClickedListener mOnItemClickedListener; 51739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 52739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public VerticalGridPresenter() { 53739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout this(FocusHighlight.ZOOM_FACTOR_MEDIUM); 54739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 55739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 56739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public VerticalGridPresenter(int zoomFactor) { 57739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mZoomFactor = zoomFactor; 58739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 59739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 60739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 61739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets the number of columns in the vertical grid. 62739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 63739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setNumberOfColumns(int numColumns) { 64739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (numColumns < 0) { 65739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout throw new IllegalArgumentException("Invalid number of columns"); 66739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 67739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (mNumColumns != numColumns) { 68739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mNumColumns = numColumns; 69739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 70739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 71739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 72739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 73739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Returns the number of columns in the vertical grid. 74739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 75739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public int getNumberOfColumns() { 76739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return mNumColumns; 77739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 78739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 790d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout /** 800d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout * Enable or disable child shadow. 810d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout * This is not only for enable/disable default shadow implementation but also subclass must 820d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout * respect this flag. 830d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout */ 840d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout public final void setShadowEnabled(boolean enabled) { 850d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout mShadowEnabled = enabled; 860d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout } 870d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout 880d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout /** 890d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout * Returns true if child shadow is enabled. 900d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout * This is not only for enable/disable default shadow implementation but also subclass must 910d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout * respect this flag. 920d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout */ 930d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout public final boolean getShadowEnabled() { 940d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout return mShadowEnabled; 950d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout } 960d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout 970d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout /** 980d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout * Returns true if opticalBounds is supported (SDK >= 18) so that default shadow 990d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout * is applied to each individual child of {@link VerticalGridView}. 1000d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout * Subclass may return false to disable. 1010d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout */ 1020d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout public boolean isUsingDefaultShadow() { 1030d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout return ShadowOverlayContainer.supportsShadow(); 1040d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout } 1050d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout 1060d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout final boolean needsDefaultShadow() { 1070d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout return isUsingDefaultShadow() && getShadowEnabled(); 1080d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout } 1090d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout 110739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 111739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public final ViewHolder onCreateViewHolder(ViewGroup parent) { 112739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout ViewHolder vh = createGridViewHolder(parent); 113739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout vh.mInitialized = false; 114739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout initializeGridViewHolder(vh); 115739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (!vh.mInitialized) { 116739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout throw new RuntimeException("super.initializeGridViewHolder() must be called"); 117739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 118739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return vh; 119739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 120739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 121739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 122739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Subclass may override this to inflate a different layout. 123739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 124739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout protected ViewHolder createGridViewHolder(ViewGroup parent) { 125739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout View root = LayoutInflater.from(parent.getContext()).inflate( 126739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout R.layout.lb_browse_grid, parent, false); 127739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return new ViewHolder((VerticalGridView) root.findViewById(R.id.browse_grid)); 128739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 129739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 1300d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout private ItemBridgeAdapter.Wrapper mWrapper = new ItemBridgeAdapter.Wrapper() { 1310d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout @Override 1320d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout public View createWrapper(View root) { 1330d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout ShadowOverlayContainer wrapper = new ShadowOverlayContainer(root.getContext()); 1340d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout wrapper.setLayoutParams( 1350d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 1360d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout wrapper.initialize(needsDefaultShadow(), false); 1370d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout return wrapper; 1380d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout } 1390d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout @Override 1400d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout public void wrap(View wrapper, View wrapped) { 1410d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout ((ShadowOverlayContainer) wrapper).wrap(wrapped); 1420d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout } 1430d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout }; 1440d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout 145739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout protected void initializeGridViewHolder(ViewHolder vh) { 146739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (mNumColumns == -1) { 147739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout throw new IllegalStateException("Number of columns must be set"); 148739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 149739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (DEBUG) Log.v(TAG, "mNumColumns " + mNumColumns); 150739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout vh.getGridView().setNumColumns(mNumColumns); 151739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout vh.mInitialized = true; 152739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 1530d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout if (needsDefaultShadow()) { 1540d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout vh.mItemBridgeAdapter.setWrapper(mWrapper); 1550d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout ShadowOverlayContainer.prepareParentForShadow(vh.getGridView()); 1560d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout ((ViewGroup) vh.view).setClipChildren(false); 1570d734cb6671b314f84cb4911cd37631177d07fbaCraig Stout } 158739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout FocusHighlightHelper.setupBrowseItemFocusHighlight(vh.mItemBridgeAdapter, mZoomFactor); 159739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 160739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout final ViewHolder gridViewHolder = vh; 161739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout vh.getGridView().setOnChildSelectedListener(new OnChildSelectedListener() { 162739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 163739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void onChildSelected(ViewGroup parent, View view, int position, long id) { 164739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout selectChildView(gridViewHolder, view); 165739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 166739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout }); 167739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 168739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout vh.mItemBridgeAdapter.setAdapterListener(new ItemBridgeAdapter.AdapterListener() { 169739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 170739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void onCreate(final ItemBridgeAdapter.ViewHolder itemViewHolder) { 171739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout // Only when having an OnItemClickListner, we attach the OnClickListener. 172739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (getOnItemClickedListener() != null) { 173739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout final View itemView = itemViewHolder.getViewHolder().view; 174739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout itemView.setOnClickListener(new View.OnClickListener() { 175739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 176739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void onClick(View view) { 177739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (getOnItemClickedListener() != null) { 178739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout // Row is always null 179739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout getOnItemClickedListener().onItemClicked(itemViewHolder.mItem, null); 180739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 181739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 182739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout }); 183739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 184739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 185739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout }); 186739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 187739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 188739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 189739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { 190739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (DEBUG) Log.v(TAG, "onBindViewHolder " + item); 191739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout ViewHolder vh = (ViewHolder) viewHolder; 192739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout vh.mItemBridgeAdapter.setAdapter((ObjectAdapter) item); 193739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout vh.getGridView().setAdapter(vh.mItemBridgeAdapter); 194739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 195739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 196739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 197739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { 198739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (DEBUG) Log.v(TAG, "onUnbindViewHolder"); 199739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout ViewHolder vh = (ViewHolder) viewHolder; 200739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout vh.mItemBridgeAdapter.setAdapter(null); 201739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout vh.getGridView().setAdapter(null); 202739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 203739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 204739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 205739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets the item selected listener. 206739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Since this is a grid the row parameter is always null. 207739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 208739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public final void setOnItemSelectedListener(OnItemSelectedListener listener) { 209739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mOnItemSelectedListener = listener; 210739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 211739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 212739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 213739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Returns the item selected listener. 214739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 215739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public final OnItemSelectedListener getOnItemSelectedListener() { 216739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return mOnItemSelectedListener; 217739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 218739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 219739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 220739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets the item clicked listener. 221739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * OnItemClickedListener will override {@link View.OnClickListener} that 222739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * item presenter sets during {@link Presenter#onCreateViewHolder(ViewGroup)}. 223739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * So in general, developer should choose one of the listeners but not both. 224739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 225739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public final void setOnItemClickedListener(OnItemClickedListener listener) { 226739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mOnItemClickedListener = listener; 227739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 228739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 229739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 230739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Returns the item clicked listener. 231739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 232739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public final OnItemClickedListener getOnItemClickedListener() { 233739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return mOnItemClickedListener; 234739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 235739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 236739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private void selectChildView(ViewHolder vh, View view) { 237739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (getOnItemSelectedListener() != null) { 238739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout ItemBridgeAdapter.ViewHolder ibh = (view == null) ? null : 239739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout (ItemBridgeAdapter.ViewHolder) vh.getGridView().getChildViewHolder(view); 240739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 241739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout getOnItemSelectedListener().onItemSelected(ibh == null ? null : ibh.mItem, null); 242739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 243739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout }; 244739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout} 245