VerticalGridFragment.java revision 8403619efebe94666c0615c3fc85080a303acf80
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
1670acb0c19be3831a2080e4f902324de16bfbf62eTor Norbyeimport android.support.annotation.ColorInt;
17739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.R;
188403619efebe94666c0615c3fc85080a303acf80Dake Guimport android.support.v17.leanback.transition.TransitionHelper;
195d00775a5d3ce3c1fc06c4de0945d1b8f03aadc4Dake Guimport android.support.v17.leanback.widget.BrowseFrameLayout;
20d586ba8825b418d9589436725bfdead30f0dc075Dake Guimport android.support.v17.leanback.widget.OnChildLaidOutListener;
21947dbf076cd019e3c26217fbc7aa21e860d68044Dake Guimport android.support.v17.leanback.widget.OnItemViewClickedListener;
22947dbf076cd019e3c26217fbc7aa21e860d68044Dake Guimport android.support.v17.leanback.widget.OnItemViewSelectedListener;
23947dbf076cd019e3c26217fbc7aa21e860d68044Dake Guimport android.support.v17.leanback.widget.Presenter;
24e34cae48707e70442aca13e1b4ab55757292828dDake Guimport android.support.v17.leanback.widget.Row;
25947dbf076cd019e3c26217fbc7aa21e860d68044Dake Guimport android.support.v17.leanback.widget.RowPresenter;
26e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stoutimport android.support.v17.leanback.widget.TitleHelper;
27731066a59e10ddc7bb6c95d0b91b3e0e11e10396Craig Stoutimport android.support.v17.leanback.widget.TitleView;
28739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.VerticalGridPresenter;
29739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.ObjectAdapter;
30739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.os.Bundle;
3125aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichetimport android.util.Log;
32739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.LayoutInflater;
33739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.View;
34739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.ViewGroup;
35739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
36739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout/**
374c0f3062b5edd9750351068f46e5270bb220091dTim Kilbourn * A fragment for creating leanback vertical grids.
38739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout *
394c0f3062b5edd9750351068f46e5270bb220091dTim Kilbourn * <p>Renders a vertical grid of objects given a {@link VerticalGridPresenter} and
40739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * an {@link ObjectAdapter}.
41739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */
42786ba352397f44022617411936515fc9eb28d23fDake Gupublic class VerticalGridFragment extends BaseFragment {
43739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private static final String TAG = "VerticalGridFragment";
44739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private static boolean DEBUG = false;
45739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
46739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private ObjectAdapter mAdapter;
47739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private VerticalGridPresenter mGridPresenter;
48739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private VerticalGridPresenter.ViewHolder mGridViewHolder;
49947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu    private OnItemViewSelectedListener mOnItemViewSelectedListener;
50947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu    private OnItemViewClickedListener mOnItemViewClickedListener;
51786ba352397f44022617411936515fc9eb28d23fDake Gu    private Object mSceneAfterEntranceTransition;
52739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private int mSelectedPosition = -1;
53739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
54dfb60d0af5d49da05c584d74245c616263f26b65Craig Stout    /**
55dfb60d0af5d49da05c584d74245c616263f26b65Craig Stout     * Sets the grid presenter.
56739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
57739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void setGridPresenter(VerticalGridPresenter gridPresenter) {
58739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        if (gridPresenter == null) {
59739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            throw new IllegalArgumentException("Grid presenter may not be null");
60739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
61739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mGridPresenter = gridPresenter;
62d586ba8825b418d9589436725bfdead30f0dc075Dake Gu        mGridPresenter.setOnItemViewSelectedListener(mViewSelectedListener);
63947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu        if (mOnItemViewClickedListener != null) {
64947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu            mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener);
65947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu        }
66739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
67739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
68739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
69739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Returns the grid presenter.
70739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
71739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public VerticalGridPresenter getGridPresenter() {
72739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        return mGridPresenter;
73739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
74739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
75739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
76739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Sets the object adapter for the fragment.
77739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
78739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void setAdapter(ObjectAdapter adapter) {
79739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mAdapter = adapter;
80739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        updateAdapter();
81739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
82739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
83739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
84739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Returns the object adapter.
85739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
86739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public ObjectAdapter getAdapter() {
87739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        return mAdapter;
88739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
89739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
90d586ba8825b418d9589436725bfdead30f0dc075Dake Gu    final private OnItemViewSelectedListener mViewSelectedListener =
91947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu            new OnItemViewSelectedListener() {
92e34cae48707e70442aca13e1b4ab55757292828dDake Gu        @Override
93947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu        public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
94947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu                RowPresenter.ViewHolder rowViewHolder, Row row) {
95e34cae48707e70442aca13e1b4ab55757292828dDake Gu            int position = mGridViewHolder.getGridView().getSelectedPosition();
96d586ba8825b418d9589436725bfdead30f0dc075Dake Gu            if (DEBUG) Log.v(TAG, "grid selected position " + position);
97d586ba8825b418d9589436725bfdead30f0dc075Dake Gu            gridOnItemSelected(position);
98947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu            if (mOnItemViewSelectedListener != null) {
99947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu                mOnItemViewSelectedListener.onItemSelected(itemViewHolder, item,
100947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu                        rowViewHolder, row);
101947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu            }
102e34cae48707e70442aca13e1b4ab55757292828dDake Gu        }
103e34cae48707e70442aca13e1b4ab55757292828dDake Gu    };
104e34cae48707e70442aca13e1b4ab55757292828dDake Gu
105d586ba8825b418d9589436725bfdead30f0dc075Dake Gu    final private OnChildLaidOutListener mChildLaidOutListener =
106d586ba8825b418d9589436725bfdead30f0dc075Dake Gu            new OnChildLaidOutListener() {
107d586ba8825b418d9589436725bfdead30f0dc075Dake Gu        @Override
108d586ba8825b418d9589436725bfdead30f0dc075Dake Gu        public void onChildLaidOut(ViewGroup parent, View view, int position, long id) {
109d586ba8825b418d9589436725bfdead30f0dc075Dake Gu            if (position == 0) {
110d586ba8825b418d9589436725bfdead30f0dc075Dake Gu                showOrHideTitle();
111d586ba8825b418d9589436725bfdead30f0dc075Dake Gu            }
112d586ba8825b418d9589436725bfdead30f0dc075Dake Gu        }
113d586ba8825b418d9589436725bfdead30f0dc075Dake Gu    };
114d586ba8825b418d9589436725bfdead30f0dc075Dake Gu
115739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
116739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Sets an item selection listener.
117947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu     */
118947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu    public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {
119947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu        mOnItemViewSelectedListener = listener;
120947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu    }
121947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu
122d586ba8825b418d9589436725bfdead30f0dc075Dake Gu    private void gridOnItemSelected(int position) {
123e34cae48707e70442aca13e1b4ab55757292828dDake Gu        if (position != mSelectedPosition) {
124e34cae48707e70442aca13e1b4ab55757292828dDake Gu            mSelectedPosition = position;
125d586ba8825b418d9589436725bfdead30f0dc075Dake Gu            showOrHideTitle();
126d586ba8825b418d9589436725bfdead30f0dc075Dake Gu        }
127d586ba8825b418d9589436725bfdead30f0dc075Dake Gu    }
128d586ba8825b418d9589436725bfdead30f0dc075Dake Gu
129d586ba8825b418d9589436725bfdead30f0dc075Dake Gu    private void showOrHideTitle() {
130d586ba8825b418d9589436725bfdead30f0dc075Dake Gu        if (mGridViewHolder.getGridView().findViewHolderForAdapterPosition(mSelectedPosition)
131d586ba8825b418d9589436725bfdead30f0dc075Dake Gu                == null) {
132d586ba8825b418d9589436725bfdead30f0dc075Dake Gu            return;
133d586ba8825b418d9589436725bfdead30f0dc075Dake Gu        }
134d586ba8825b418d9589436725bfdead30f0dc075Dake Gu        if (!mGridViewHolder.getGridView().hasPreviousViewInSameRow(mSelectedPosition)) {
135e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout            showTitle(true);
136e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout        } else {
137e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout            showTitle(false);
138e34cae48707e70442aca13e1b4ab55757292828dDake Gu        }
139e34cae48707e70442aca13e1b4ab55757292828dDake Gu    }
140739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
141739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
142739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Sets an item clicked listener.
143947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu     */
144947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu    public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {
145947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu        mOnItemViewClickedListener = listener;
146947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu        if (mGridPresenter != null) {
147947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu            mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener);
148947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu        }
149947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu    }
150947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu
151947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu    /**
152947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu     * Returns the item clicked listener.
153947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu     */
154947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu    public OnItemViewClickedListener getOnItemViewClickedListener() {
155947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu        return mOnItemViewClickedListener;
156947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu    }
157947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu
158739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    @Override
159739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public View onCreateView(LayoutInflater inflater, ViewGroup container,
160739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            Bundle savedInstanceState) {
161e34cae48707e70442aca13e1b4ab55757292828dDake Gu        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.lb_vertical_grid_fragment,
162e34cae48707e70442aca13e1b4ab55757292828dDake Gu                container, false);
163e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout        setTitleView((TitleView) root.findViewById(R.id.browse_title_group));
164731066a59e10ddc7bb6c95d0b91b3e0e11e10396Craig Stout        return root;
1659020c0aec57b4e8994d66b7cd1a89c225e9bfa11Craig Stout    }
1669020c0aec57b4e8994d66b7cd1a89c225e9bfa11Craig Stout
167739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    @Override
168739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void onViewCreated(View view, Bundle savedInstanceState) {
169e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout        super.onViewCreated(view, savedInstanceState);
170739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        ViewGroup gridDock = (ViewGroup) view.findViewById(R.id.browse_grid_dock);
171739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mGridViewHolder = mGridPresenter.onCreateViewHolder(gridDock);
172739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        gridDock.addView(mGridViewHolder.view);
173d586ba8825b418d9589436725bfdead30f0dc075Dake Gu        mGridViewHolder.getGridView().setOnChildLaidOutListener(mChildLaidOutListener);
174739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
1758403619efebe94666c0615c3fc85080a303acf80Dake Gu        mSceneAfterEntranceTransition = TransitionHelper.createScene(gridDock, new Runnable() {
176786ba352397f44022617411936515fc9eb28d23fDake Gu            @Override
177786ba352397f44022617411936515fc9eb28d23fDake Gu            public void run() {
178786ba352397f44022617411936515fc9eb28d23fDake Gu                setEntranceTransitionState(true);
179786ba352397f44022617411936515fc9eb28d23fDake Gu            }
180786ba352397f44022617411936515fc9eb28d23fDake Gu        });
181786ba352397f44022617411936515fc9eb28d23fDake Gu
182739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        updateAdapter();
183739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
184739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
185e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout    private void setupFocusSearchListener() {
186e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout        BrowseFrameLayout browseFrameLayout = (BrowseFrameLayout) getView().findViewById(
187e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout                R.id.grid_frame);
188e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout        browseFrameLayout.setOnFocusSearchListener(getTitleHelper().getOnFocusSearchListener());
189e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout    }
190e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout
191739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    @Override
192739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void onStart() {
193739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        super.onStart();
194e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout        setupFocusSearchListener();
195786ba352397f44022617411936515fc9eb28d23fDake Gu        if (isEntranceTransitionEnabled()) {
196786ba352397f44022617411936515fc9eb28d23fDake Gu            setEntranceTransitionState(false);
197786ba352397f44022617411936515fc9eb28d23fDake Gu        }
198739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
199739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
200739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    @Override
201739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void onDestroyView() {
202739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        super.onDestroyView();
203739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mGridViewHolder = null;
204739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
205739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
206739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
207739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Sets the selected item position.
208739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
209739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void setSelectedPosition(int position) {
210739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mSelectedPosition = position;
211739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        if(mGridViewHolder != null && mGridViewHolder.getGridView().getAdapter() != null) {
212739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            mGridViewHolder.getGridView().setSelectedPositionSmooth(position);
213739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
214739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
215739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
216739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private void updateAdapter() {
217739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        if (mGridViewHolder != null) {
218739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            mGridPresenter.onBindViewHolder(mGridViewHolder, mAdapter);
219739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            if (mSelectedPosition != -1) {
220739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout                mGridViewHolder.getGridView().setSelectedPosition(mSelectedPosition);
221739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            }
222739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
223739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
224786ba352397f44022617411936515fc9eb28d23fDake Gu
225786ba352397f44022617411936515fc9eb28d23fDake Gu    @Override
226786ba352397f44022617411936515fc9eb28d23fDake Gu    protected Object createEntranceTransition() {
2278403619efebe94666c0615c3fc85080a303acf80Dake Gu        return TransitionHelper.loadTransition(getActivity(),
228786ba352397f44022617411936515fc9eb28d23fDake Gu                R.transition.lb_vertical_grid_entrance_transition);
229786ba352397f44022617411936515fc9eb28d23fDake Gu    }
230786ba352397f44022617411936515fc9eb28d23fDake Gu
231786ba352397f44022617411936515fc9eb28d23fDake Gu    @Override
232786ba352397f44022617411936515fc9eb28d23fDake Gu    protected void runEntranceTransition(Object entranceTransition) {
2338403619efebe94666c0615c3fc85080a303acf80Dake Gu        TransitionHelper.runTransition(mSceneAfterEntranceTransition, entranceTransition);
234786ba352397f44022617411936515fc9eb28d23fDake Gu    }
235786ba352397f44022617411936515fc9eb28d23fDake Gu
236786ba352397f44022617411936515fc9eb28d23fDake Gu    void setEntranceTransitionState(boolean afterTransition) {
237786ba352397f44022617411936515fc9eb28d23fDake Gu        mGridPresenter.setEntranceTransitionState(mGridViewHolder, afterTransition);
238786ba352397f44022617411936515fc9eb28d23fDake Gu    }
239739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout}
240