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.app; 15739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 16739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.R; 178403619efebe94666c0615c3fc85080a303acf80Dake Guimport android.support.v17.leanback.transition.TransitionHelper; 185d00775a5d3ce3c1fc06c4de0945d1b8f03aadc4Dake Guimport android.support.v17.leanback.widget.BrowseFrameLayout; 19d586ba8825b418d9589436725bfdead30f0dc075Dake Guimport android.support.v17.leanback.widget.OnChildLaidOutListener; 20947dbf076cd019e3c26217fbc7aa21e860d68044Dake Guimport android.support.v17.leanback.widget.OnItemViewClickedListener; 21947dbf076cd019e3c26217fbc7aa21e860d68044Dake Guimport android.support.v17.leanback.widget.OnItemViewSelectedListener; 22947dbf076cd019e3c26217fbc7aa21e860d68044Dake Guimport android.support.v17.leanback.widget.Presenter; 23e34cae48707e70442aca13e1b4ab55757292828dDake Guimport android.support.v17.leanback.widget.Row; 24947dbf076cd019e3c26217fbc7aa21e860d68044Dake Guimport android.support.v17.leanback.widget.RowPresenter; 25739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.VerticalGridPresenter; 26739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.ObjectAdapter; 27739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.os.Bundle; 2825aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichetimport android.util.Log; 29739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.LayoutInflater; 30739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.View; 31739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.ViewGroup; 32739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 33739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout/** 344c0f3062b5edd9750351068f46e5270bb220091dTim Kilbourn * A fragment for creating leanback vertical grids. 35739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * 364c0f3062b5edd9750351068f46e5270bb220091dTim Kilbourn * <p>Renders a vertical grid of objects given a {@link VerticalGridPresenter} and 37739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * an {@link ObjectAdapter}. 38739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 39786ba352397f44022617411936515fc9eb28d23fDake Gupublic class VerticalGridFragment extends BaseFragment { 4099ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas static final String TAG = "VerticalGridFragment"; 4199ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas static boolean DEBUG = false; 42739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 43739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private ObjectAdapter mAdapter; 44739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private VerticalGridPresenter mGridPresenter; 4599ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas VerticalGridPresenter.ViewHolder mGridViewHolder; 4699ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas OnItemViewSelectedListener mOnItemViewSelectedListener; 47947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu private OnItemViewClickedListener mOnItemViewClickedListener; 48786ba352397f44022617411936515fc9eb28d23fDake Gu private Object mSceneAfterEntranceTransition; 49739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private int mSelectedPosition = -1; 50739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 51dfb60d0af5d49da05c584d74245c616263f26b65Craig Stout /** 52dfb60d0af5d49da05c584d74245c616263f26b65Craig Stout * Sets the grid presenter. 53739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 54739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setGridPresenter(VerticalGridPresenter gridPresenter) { 55739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (gridPresenter == null) { 56739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout throw new IllegalArgumentException("Grid presenter may not be null"); 57739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 58739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridPresenter = gridPresenter; 59d586ba8825b418d9589436725bfdead30f0dc075Dake Gu mGridPresenter.setOnItemViewSelectedListener(mViewSelectedListener); 60947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu if (mOnItemViewClickedListener != null) { 61947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener); 62947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu } 63739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 64739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 65739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 66739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Returns the grid presenter. 67739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 68739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public VerticalGridPresenter getGridPresenter() { 69739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return mGridPresenter; 70739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 71739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 72739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 73739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets the object adapter for the fragment. 74739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 75739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setAdapter(ObjectAdapter adapter) { 76739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mAdapter = adapter; 77739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout updateAdapter(); 78739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 79739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 80739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 81739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Returns the object adapter. 82739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 83739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public ObjectAdapter getAdapter() { 84739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return mAdapter; 85739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 86739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 87d586ba8825b418d9589436725bfdead30f0dc075Dake Gu final private OnItemViewSelectedListener mViewSelectedListener = 88947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu new OnItemViewSelectedListener() { 89e34cae48707e70442aca13e1b4ab55757292828dDake Gu @Override 90947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 91947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu RowPresenter.ViewHolder rowViewHolder, Row row) { 92e34cae48707e70442aca13e1b4ab55757292828dDake Gu int position = mGridViewHolder.getGridView().getSelectedPosition(); 93d586ba8825b418d9589436725bfdead30f0dc075Dake Gu if (DEBUG) Log.v(TAG, "grid selected position " + position); 94d586ba8825b418d9589436725bfdead30f0dc075Dake Gu gridOnItemSelected(position); 95947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu if (mOnItemViewSelectedListener != null) { 96947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu mOnItemViewSelectedListener.onItemSelected(itemViewHolder, item, 97947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu rowViewHolder, row); 98947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu } 99e34cae48707e70442aca13e1b4ab55757292828dDake Gu } 100e34cae48707e70442aca13e1b4ab55757292828dDake Gu }; 101e34cae48707e70442aca13e1b4ab55757292828dDake Gu 102d586ba8825b418d9589436725bfdead30f0dc075Dake Gu final private OnChildLaidOutListener mChildLaidOutListener = 103d586ba8825b418d9589436725bfdead30f0dc075Dake Gu new OnChildLaidOutListener() { 104d586ba8825b418d9589436725bfdead30f0dc075Dake Gu @Override 105d586ba8825b418d9589436725bfdead30f0dc075Dake Gu public void onChildLaidOut(ViewGroup parent, View view, int position, long id) { 106d586ba8825b418d9589436725bfdead30f0dc075Dake Gu if (position == 0) { 107d586ba8825b418d9589436725bfdead30f0dc075Dake Gu showOrHideTitle(); 108d586ba8825b418d9589436725bfdead30f0dc075Dake Gu } 109d586ba8825b418d9589436725bfdead30f0dc075Dake Gu } 110d586ba8825b418d9589436725bfdead30f0dc075Dake Gu }; 111d586ba8825b418d9589436725bfdead30f0dc075Dake Gu 112739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 113739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets an item selection listener. 114947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu */ 115947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) { 116947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu mOnItemViewSelectedListener = listener; 117947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu } 118947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu 11999ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas void gridOnItemSelected(int position) { 120e34cae48707e70442aca13e1b4ab55757292828dDake Gu if (position != mSelectedPosition) { 121e34cae48707e70442aca13e1b4ab55757292828dDake Gu mSelectedPosition = position; 122d586ba8825b418d9589436725bfdead30f0dc075Dake Gu showOrHideTitle(); 123d586ba8825b418d9589436725bfdead30f0dc075Dake Gu } 124d586ba8825b418d9589436725bfdead30f0dc075Dake Gu } 125d586ba8825b418d9589436725bfdead30f0dc075Dake Gu 12699ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas void showOrHideTitle() { 127d586ba8825b418d9589436725bfdead30f0dc075Dake Gu if (mGridViewHolder.getGridView().findViewHolderForAdapterPosition(mSelectedPosition) 128d586ba8825b418d9589436725bfdead30f0dc075Dake Gu == null) { 129d586ba8825b418d9589436725bfdead30f0dc075Dake Gu return; 130d586ba8825b418d9589436725bfdead30f0dc075Dake Gu } 131d586ba8825b418d9589436725bfdead30f0dc075Dake Gu if (!mGridViewHolder.getGridView().hasPreviousViewInSameRow(mSelectedPosition)) { 132e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout showTitle(true); 133e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout } else { 134e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout showTitle(false); 135e34cae48707e70442aca13e1b4ab55757292828dDake Gu } 136e34cae48707e70442aca13e1b4ab55757292828dDake Gu } 137739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 138739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 139739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets an item clicked listener. 140947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu */ 141947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu public void setOnItemViewClickedListener(OnItemViewClickedListener listener) { 142947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu mOnItemViewClickedListener = listener; 143947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu if (mGridPresenter != null) { 144947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener); 145947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu } 146947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu } 147947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu 148947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu /** 149947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu * Returns the item clicked listener. 150947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu */ 151947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu public OnItemViewClickedListener getOnItemViewClickedListener() { 152947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu return mOnItemViewClickedListener; 153947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu } 154947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu 155739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 156739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public View onCreateView(LayoutInflater inflater, ViewGroup container, 157739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout Bundle savedInstanceState) { 158e34cae48707e70442aca13e1b4ab55757292828dDake Gu ViewGroup root = (ViewGroup) inflater.inflate(R.layout.lb_vertical_grid_fragment, 159e34cae48707e70442aca13e1b4ab55757292828dDake Gu container, false); 160a373804d10f93a9488adc35cf6ce44dce09b3778Dake Gu ViewGroup gridFrame = (ViewGroup) root.findViewById(R.id.grid_frame); 161a373804d10f93a9488adc35cf6ce44dce09b3778Dake Gu installTitleView(inflater, gridFrame, savedInstanceState); 162684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata getProgressBarManager().setRootView(root); 163731066a59e10ddc7bb6c95d0b91b3e0e11e10396Craig Stout return root; 1649020c0aec57b4e8994d66b7cd1a89c225e9bfa11Craig Stout } 1659020c0aec57b4e8994d66b7cd1a89c225e9bfa11Craig Stout 166739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 167739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void onViewCreated(View view, Bundle savedInstanceState) { 168e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout super.onViewCreated(view, savedInstanceState); 169739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout ViewGroup gridDock = (ViewGroup) view.findViewById(R.id.browse_grid_dock); 170739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridViewHolder = mGridPresenter.onCreateViewHolder(gridDock); 171739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout gridDock.addView(mGridViewHolder.view); 172d586ba8825b418d9589436725bfdead30f0dc075Dake Gu mGridViewHolder.getGridView().setOnChildLaidOutListener(mChildLaidOutListener); 173739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 1748403619efebe94666c0615c3fc85080a303acf80Dake Gu mSceneAfterEntranceTransition = TransitionHelper.createScene(gridDock, new Runnable() { 175786ba352397f44022617411936515fc9eb28d23fDake Gu @Override 176786ba352397f44022617411936515fc9eb28d23fDake Gu public void run() { 177786ba352397f44022617411936515fc9eb28d23fDake Gu setEntranceTransitionState(true); 178786ba352397f44022617411936515fc9eb28d23fDake Gu } 179786ba352397f44022617411936515fc9eb28d23fDake Gu }); 180786ba352397f44022617411936515fc9eb28d23fDake Gu 181739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout updateAdapter(); 182739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 183739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 184e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout private void setupFocusSearchListener() { 185e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout BrowseFrameLayout browseFrameLayout = (BrowseFrameLayout) getView().findViewById( 186e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout R.id.grid_frame); 187e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout browseFrameLayout.setOnFocusSearchListener(getTitleHelper().getOnFocusSearchListener()); 188e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout } 189e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout 190739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 191739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void onStart() { 192739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout super.onStart(); 193e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout setupFocusSearchListener(); 194786ba352397f44022617411936515fc9eb28d23fDake Gu if (isEntranceTransitionEnabled()) { 195786ba352397f44022617411936515fc9eb28d23fDake Gu setEntranceTransitionState(false); 196786ba352397f44022617411936515fc9eb28d23fDake Gu } 197739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 198739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 199739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 200739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void onDestroyView() { 201739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout super.onDestroyView(); 202739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridViewHolder = null; 203739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 204739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 205739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 206739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets the selected item position. 207739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 208739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setSelectedPosition(int position) { 209739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mSelectedPosition = position; 210739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if(mGridViewHolder != null && mGridViewHolder.getGridView().getAdapter() != null) { 211739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridViewHolder.getGridView().setSelectedPositionSmooth(position); 212739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 213739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 214739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 215739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private void updateAdapter() { 216739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (mGridViewHolder != null) { 217739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridPresenter.onBindViewHolder(mGridViewHolder, mAdapter); 218739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (mSelectedPosition != -1) { 219739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridViewHolder.getGridView().setSelectedPosition(mSelectedPosition); 220739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 221739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 222739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 223786ba352397f44022617411936515fc9eb28d23fDake Gu 224786ba352397f44022617411936515fc9eb28d23fDake Gu @Override 225786ba352397f44022617411936515fc9eb28d23fDake Gu protected Object createEntranceTransition() { 2268403619efebe94666c0615c3fc85080a303acf80Dake Gu return TransitionHelper.loadTransition(getActivity(), 227786ba352397f44022617411936515fc9eb28d23fDake Gu R.transition.lb_vertical_grid_entrance_transition); 228786ba352397f44022617411936515fc9eb28d23fDake Gu } 229786ba352397f44022617411936515fc9eb28d23fDake Gu 230786ba352397f44022617411936515fc9eb28d23fDake Gu @Override 231786ba352397f44022617411936515fc9eb28d23fDake Gu protected void runEntranceTransition(Object entranceTransition) { 2328403619efebe94666c0615c3fc85080a303acf80Dake Gu TransitionHelper.runTransition(mSceneAfterEntranceTransition, entranceTransition); 233786ba352397f44022617411936515fc9eb28d23fDake Gu } 234786ba352397f44022617411936515fc9eb28d23fDake Gu 235786ba352397f44022617411936515fc9eb28d23fDake Gu void setEntranceTransitionState(boolean afterTransition) { 236786ba352397f44022617411936515fc9eb28d23fDake Gu mGridPresenter.setEntranceTransitionState(mGridViewHolder, afterTransition); 237786ba352397f44022617411936515fc9eb28d23fDake Gu } 238739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout} 239