VerticalGridFragment.java revision 739e3805bf2785e6773aede5e2e1643f537305f9
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;
17739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.VerticalGridPresenter;
18739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.ObjectAdapter;
19739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.OnItemClickedListener;
20739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.OnItemSelectedListener;
21739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.Presenter;
22739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.PresenterSelector;
23739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.RowPresenter;
24739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.SearchOrbView;
25739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.VerticalGridView;
26739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.util.Log;
27739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.app.Fragment;
28739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.graphics.drawable.Drawable;
29739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.os.Bundle;
30739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.LayoutInflater;
31739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.View;
32739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.ViewGroup;
33739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.widget.ImageView;
34739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.widget.TextView;
35739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
36739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout/**
37739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Leanback fragment for a vertical grid.
38739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout *
39739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Renders a vertical grid of objects given a {@link VerticalGridPresenter} and
40739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * an {@link ObjectAdapter}.
41739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */
42739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutpublic class VerticalGridFragment extends Fragment {
43739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private static final String TAG = "VerticalGridFragment";
44739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private static boolean DEBUG = false;
45739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
46739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private Params mParams;
47739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private ObjectAdapter mAdapter;
48739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private VerticalGridPresenter mGridPresenter;
49739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private VerticalGridPresenter.ViewHolder mGridViewHolder;
50739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private OnItemSelectedListener mOnItemSelectedListener;
51739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private OnItemClickedListener mOnItemClickedListener;
52739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private int mSelectedPosition = -1;
53739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
54739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private ImageView mBadgeView;
55739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private TextView mTitleView;
56739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private ViewGroup mBrowseTitle;
57739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private SearchOrbView mSearchOrbView;
58739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
59739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public static class Params {
60739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        private String mTitle;
61739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        private Drawable mBadgeDrawable;
62739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
63739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        /**
64739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout         * Sets the badge image.
65739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout         */
66739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        public void setBadgeImage(Drawable drawable) {
67739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            mBadgeDrawable = drawable;
68739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
69739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
70739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        /**
71739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout         * Returns the badge image.
72739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout         */
73739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        public Drawable getBadgeImage() {
74739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            return mBadgeDrawable;
75739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
76739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
77739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        /**
78739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout         * Sets a title for the browse fragment.
79739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout         */
80739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        public void setTitle(String title) {
81739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            mTitle = title;
82739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
83739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
84739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        /**
85739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout         * Returns the title for the browse fragment.
86739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout         */
87739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        public String getTitle() {
88739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            return mTitle;
89739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
90739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
91739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
92739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
93739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Set fragment parameters.
94739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
95739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void setParams(Params params) {
96739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mParams = params;
97739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        setBadgeDrawable(mParams.mBadgeDrawable);
98739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        setTitle(mParams.mTitle);
99739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
100739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
101739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
102739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Returns fragment parameters.
103739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
104739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public Params getParams() {
105739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        return mParams;
106739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
107739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
108739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
109739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Set the grid presenter.
110739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
111739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void setGridPresenter(VerticalGridPresenter gridPresenter) {
112739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        if (gridPresenter == null) {
113739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            throw new IllegalArgumentException("Grid presenter may not be null");
114739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
115739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mGridPresenter = gridPresenter;
116739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        if (mOnItemSelectedListener != null) {
117739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            mGridPresenter.setOnItemSelectedListener(mOnItemSelectedListener);
118739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
119739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        if (mOnItemClickedListener != null) {
120739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            mGridPresenter.setOnItemClickedListener(mOnItemClickedListener);
121739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
122739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
123739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
124739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
125739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Returns the grid presenter.
126739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
127739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public VerticalGridPresenter getGridPresenter() {
128739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        return mGridPresenter;
129739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
130739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
131739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
132739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Sets the object adapter for the fragment.
133739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
134739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void setAdapter(ObjectAdapter adapter) {
135739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mAdapter = adapter;
136739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        updateAdapter();
137739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
138739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
139739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
140739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Returns the object adapter.
141739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
142739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public ObjectAdapter getAdapter() {
143739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        return mAdapter;
144739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
145739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
146739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
147739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Sets an item selection listener.
148739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
149739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void setOnItemSelectedListener(OnItemSelectedListener listener) {
150739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mOnItemSelectedListener = listener;
151739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        if (mGridPresenter != null) {
152739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            mGridPresenter.setOnItemSelectedListener(mOnItemSelectedListener);
153739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
154739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
155739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
156739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    // TODO: getitemselectedlistener?
157739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
158739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
159739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Sets an item clicked listener.
160739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
161739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void setOnItemClickedListener(OnItemClickedListener listener) {
162739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mOnItemClickedListener = listener;
163739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        if (mGridPresenter != null) {
164739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            mGridPresenter.setOnItemClickedListener(mOnItemClickedListener);
165739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
166739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
167739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
168739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
169739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Returns the item clicked listener.
170739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
171739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public OnItemClickedListener getOnItemClickedListener() {
172739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        return mOnItemClickedListener;
173739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
174739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
175739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private void setBadgeDrawable(Drawable drawable) {
176739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        if (mBadgeView == null) {
177739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            return;
178739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
179739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mBadgeView.setImageDrawable(drawable);
180739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        if (drawable != null) {
181739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            mBadgeView.setVisibility(View.VISIBLE);
182739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        } else {
183739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            mBadgeView.setVisibility(View.GONE);
184739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
185739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
186739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
187739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private void setTitle(String title) {
188739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        if (mTitleView != null) {
189739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            mTitleView.setText(title);
190739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
191739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
192739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
193739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    @Override
194739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public View onCreateView(LayoutInflater inflater, ViewGroup container,
195739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            Bundle savedInstanceState) {
196739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        View root = inflater.inflate(R.layout.lb_vertical_grid_fragment, container, false);
197739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
198739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mBrowseTitle = (ViewGroup) root.findViewById(R.id.browse_title_group);
199739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mBadgeView = (ImageView) mBrowseTitle.findViewById(R.id.browse_badge);
200739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mTitleView = (TextView) mBrowseTitle.findViewById(R.id.browse_title);
201739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mSearchOrbView = (SearchOrbView) mBrowseTitle.findViewById(R.id.browse_orb);
202739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
203739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        if (mParams != null) {
204739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            setBadgeDrawable(mParams.mBadgeDrawable);
205739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            setTitle(mParams.mTitle);
206739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
207739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
208739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        return root;
209739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
210739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
211739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    @Override
212739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void onViewCreated(View view, Bundle savedInstanceState) {
213739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        ViewGroup gridDock = (ViewGroup) view.findViewById(R.id.browse_grid_dock);
214739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mGridViewHolder = mGridPresenter.onCreateViewHolder(gridDock);
215739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        gridDock.addView(mGridViewHolder.view);
216739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
217739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        updateAdapter();
218739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
219739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
220739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    @Override
221739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void onStart() {
222739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        super.onStart();
223739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mGridViewHolder.getGridView().requestFocus();
224739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
225739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
226739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    @Override
227739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void onDestroyView() {
228739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        super.onDestroyView();
229739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mGridViewHolder = null;
230739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
231739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
232739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    /**
233739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     * Sets the selected item position.
234739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout     */
235739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    public void setSelectedPosition(int position) {
236739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        mSelectedPosition = position;
237739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        if(mGridViewHolder != null && mGridViewHolder.getGridView().getAdapter() != null) {
238739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            mGridViewHolder.getGridView().setSelectedPositionSmooth(position);
239739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
240739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
241739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout
242739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    private void updateAdapter() {
243739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        if (mGridViewHolder != null) {
244739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            mGridPresenter.onBindViewHolder(mGridViewHolder, mAdapter);
245739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            if (mSelectedPosition != -1) {
246739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout                mGridViewHolder.getGridView().setSelectedPosition(mSelectedPosition);
247739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout            }
248739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout        }
249739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout    }
250739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout}
251