VerticalGridFragment.java revision e34cae48707e70442aca13e1b4ab55757292828d
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; 17e34cae48707e70442aca13e1b4ab55757292828dDake Guimport android.support.v17.leanback.widget.Row; 18739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.VerticalGridPresenter; 19739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.ObjectAdapter; 20739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.OnItemClickedListener; 21739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.OnItemSelectedListener; 22739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.Presenter; 23739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.PresenterSelector; 24739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.RowPresenter; 25739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.SearchOrbView; 26739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.VerticalGridView; 27739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.util.Log; 28739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.app.Fragment; 29739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.graphics.drawable.Drawable; 30739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.os.Bundle; 31739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.LayoutInflater; 32739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.View; 33739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.ViewGroup; 34739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.widget.ImageView; 35739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.widget.TextView; 36739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 37739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout/** 38739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Leanback fragment for a vertical grid. 39739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * 40739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Renders a vertical grid of objects given a {@link VerticalGridPresenter} and 41739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * an {@link ObjectAdapter}. 42739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 43739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutpublic class VerticalGridFragment extends Fragment { 44739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private static final String TAG = "VerticalGridFragment"; 45739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private static boolean DEBUG = false; 46739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 47739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private Params mParams; 48739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private ObjectAdapter mAdapter; 49739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private VerticalGridPresenter mGridPresenter; 50739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private VerticalGridPresenter.ViewHolder mGridViewHolder; 51739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private OnItemSelectedListener mOnItemSelectedListener; 52739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private OnItemClickedListener mOnItemClickedListener; 53a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn private View.OnClickListener mExternalOnSearchClickedListener; 54739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private int mSelectedPosition = -1; 55739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 56739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private ImageView mBadgeView; 57739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private TextView mTitleView; 58739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private ViewGroup mBrowseTitle; 59739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private SearchOrbView mSearchOrbView; 60e34cae48707e70442aca13e1b4ab55757292828dDake Gu private boolean mShowingTitle = true; 61e34cae48707e70442aca13e1b4ab55757292828dDake Gu 62e34cae48707e70442aca13e1b4ab55757292828dDake Gu // transition related 63e34cae48707e70442aca13e1b4ab55757292828dDake Gu private static TransitionHelper sTransitionHelper = TransitionHelper.getInstance(); 64e34cae48707e70442aca13e1b4ab55757292828dDake Gu private Object mTitleTransition; 65e34cae48707e70442aca13e1b4ab55757292828dDake Gu private Object mSceneWithTitle; 66e34cae48707e70442aca13e1b4ab55757292828dDake Gu private Object mSceneWithoutTitle; 67739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 68739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public static class Params { 69739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private String mTitle; 70739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private Drawable mBadgeDrawable; 71739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 72739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 73739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets the badge image. 74739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 75739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setBadgeImage(Drawable drawable) { 76739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mBadgeDrawable = drawable; 77739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 78739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 79739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 80739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Returns the badge image. 81739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 82739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public Drawable getBadgeImage() { 83739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return mBadgeDrawable; 84739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 85739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 86739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 87739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets a title for the browse fragment. 88739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 89739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setTitle(String title) { 90739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mTitle = title; 91739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 92739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 93739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 94739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Returns the title for the browse fragment. 95739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 96739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public String getTitle() { 97739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return mTitle; 98739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 99739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 100739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 101739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 102739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Set fragment parameters. 103739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 104739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setParams(Params params) { 105739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mParams = params; 106739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout setBadgeDrawable(mParams.mBadgeDrawable); 107739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout setTitle(mParams.mTitle); 108739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 109739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 110739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 111739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Returns fragment parameters. 112739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 113739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public Params getParams() { 114739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return mParams; 115739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 116739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 117739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 118739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Set the grid presenter. 119739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 120739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setGridPresenter(VerticalGridPresenter gridPresenter) { 121739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (gridPresenter == null) { 122739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout throw new IllegalArgumentException("Grid presenter may not be null"); 123739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 124739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridPresenter = gridPresenter; 125e34cae48707e70442aca13e1b4ab55757292828dDake Gu mGridPresenter.setOnItemSelectedListener(mRowSelectedListener); 126739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (mOnItemClickedListener != null) { 127739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridPresenter.setOnItemClickedListener(mOnItemClickedListener); 128739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 129739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 130739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 131739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 132739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Returns the grid presenter. 133739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 134739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public VerticalGridPresenter getGridPresenter() { 135739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return mGridPresenter; 136739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 137739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 138739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 139739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets the object adapter for the fragment. 140739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 141739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setAdapter(ObjectAdapter adapter) { 142739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mAdapter = adapter; 143739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout updateAdapter(); 144739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 145739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 146739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 147739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Returns the object adapter. 148739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 149739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public ObjectAdapter getAdapter() { 150739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return mAdapter; 151739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 152739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 153e34cae48707e70442aca13e1b4ab55757292828dDake Gu final private OnItemSelectedListener mRowSelectedListener = new OnItemSelectedListener() { 154e34cae48707e70442aca13e1b4ab55757292828dDake Gu @Override 155e34cae48707e70442aca13e1b4ab55757292828dDake Gu public void onItemSelected(Object item, Row row) { 156e34cae48707e70442aca13e1b4ab55757292828dDake Gu int position = mGridViewHolder.getGridView().getSelectedPosition(); 157e34cae48707e70442aca13e1b4ab55757292828dDake Gu if (DEBUG) Log.v(TAG, "row selected position " + position); 158e34cae48707e70442aca13e1b4ab55757292828dDake Gu onRowSelected(position); 159e34cae48707e70442aca13e1b4ab55757292828dDake Gu if (mOnItemSelectedListener != null) { 160e34cae48707e70442aca13e1b4ab55757292828dDake Gu mOnItemSelectedListener.onItemSelected(item, row); 161e34cae48707e70442aca13e1b4ab55757292828dDake Gu } 162e34cae48707e70442aca13e1b4ab55757292828dDake Gu } 163e34cae48707e70442aca13e1b4ab55757292828dDake Gu }; 164e34cae48707e70442aca13e1b4ab55757292828dDake Gu 165739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 166739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets an item selection listener. 167739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 168739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setOnItemSelectedListener(OnItemSelectedListener listener) { 169739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mOnItemSelectedListener = listener; 170739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 171739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 172e34cae48707e70442aca13e1b4ab55757292828dDake Gu private void onRowSelected(int position) { 173e34cae48707e70442aca13e1b4ab55757292828dDake Gu if (position != mSelectedPosition) { 174e34cae48707e70442aca13e1b4ab55757292828dDake Gu if (!mGridViewHolder.getGridView().hasPreviousViewInSameRow(position)) { 175e34cae48707e70442aca13e1b4ab55757292828dDake Gu // if has no sibling in front of it, show title 176e34cae48707e70442aca13e1b4ab55757292828dDake Gu if (!mShowingTitle) { 177e34cae48707e70442aca13e1b4ab55757292828dDake Gu sTransitionHelper.runTransition(mSceneWithTitle, mTitleTransition); 178e34cae48707e70442aca13e1b4ab55757292828dDake Gu mShowingTitle = true; 179e34cae48707e70442aca13e1b4ab55757292828dDake Gu } 180e34cae48707e70442aca13e1b4ab55757292828dDake Gu } else if (mShowingTitle) { 181e34cae48707e70442aca13e1b4ab55757292828dDake Gu sTransitionHelper.runTransition(mSceneWithoutTitle, mTitleTransition); 182e34cae48707e70442aca13e1b4ab55757292828dDake Gu mShowingTitle = false; 183e34cae48707e70442aca13e1b4ab55757292828dDake Gu } 184e34cae48707e70442aca13e1b4ab55757292828dDake Gu mSelectedPosition = position; 185e34cae48707e70442aca13e1b4ab55757292828dDake Gu } 186e34cae48707e70442aca13e1b4ab55757292828dDake Gu } 187739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 188739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 189739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets an item clicked listener. 190739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 191739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setOnItemClickedListener(OnItemClickedListener listener) { 192739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mOnItemClickedListener = listener; 193739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (mGridPresenter != null) { 194739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridPresenter.setOnItemClickedListener(mOnItemClickedListener); 195739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 196739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 197739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 198739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 199739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Returns the item clicked listener. 200739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 201739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public OnItemClickedListener getOnItemClickedListener() { 202739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return mOnItemClickedListener; 203739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 204739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 205a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn /** 206a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn * Sets a click listener for the search affordance. 207a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn * 208a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn * The presence of a listener will change the visibility of the search affordance in the 209a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn * title area. When set to non-null the title area will contain a call to search action. 210a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn * 211a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn * The listener onClick method will be invoked when the user click on the search action. 212a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn * 213a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn * @param listener The listener. 214a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn */ 215a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn public void setOnSearchClickedListener(View.OnClickListener listener) { 216a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn mExternalOnSearchClickedListener = listener; 217a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn if (mSearchOrbView != null) { 218a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn mSearchOrbView.setOnOrbClickedListener(listener); 219a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn } 220a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn } 221a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn 222739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private void setBadgeDrawable(Drawable drawable) { 223739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (mBadgeView == null) { 224739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return; 225739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 226739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mBadgeView.setImageDrawable(drawable); 227739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (drawable != null) { 228739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mBadgeView.setVisibility(View.VISIBLE); 229739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } else { 230739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mBadgeView.setVisibility(View.GONE); 231739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 232739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 233739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 234739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private void setTitle(String title) { 235739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (mTitleView != null) { 236739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mTitleView.setText(title); 237739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 238739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 239739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 240739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 241739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public View onCreateView(LayoutInflater inflater, ViewGroup container, 242739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout Bundle savedInstanceState) { 243e34cae48707e70442aca13e1b4ab55757292828dDake Gu ViewGroup root = (ViewGroup) inflater.inflate(R.layout.lb_vertical_grid_fragment, 244e34cae48707e70442aca13e1b4ab55757292828dDake Gu container, false); 245739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 246739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mBrowseTitle = (ViewGroup) root.findViewById(R.id.browse_title_group); 247739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mBadgeView = (ImageView) mBrowseTitle.findViewById(R.id.browse_badge); 248739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mTitleView = (TextView) mBrowseTitle.findViewById(R.id.browse_title); 249739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mSearchOrbView = (SearchOrbView) mBrowseTitle.findViewById(R.id.browse_orb); 250a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn if (mExternalOnSearchClickedListener != null) { 251a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn mSearchOrbView.setOnOrbClickedListener(mExternalOnSearchClickedListener); 252a8d3588c80a232042474aca55a69df78c8ac8cb3Tim Kilbourn } 253739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 254739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (mParams != null) { 255739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout setBadgeDrawable(mParams.mBadgeDrawable); 256739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout setTitle(mParams.mTitle); 257739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 258739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 259e34cae48707e70442aca13e1b4ab55757292828dDake Gu mSceneWithTitle = sTransitionHelper.createScene(root, new Runnable() { 260e34cae48707e70442aca13e1b4ab55757292828dDake Gu @Override 261e34cae48707e70442aca13e1b4ab55757292828dDake Gu public void run() { 262e34cae48707e70442aca13e1b4ab55757292828dDake Gu mBrowseTitle.setVisibility(View.VISIBLE); 263e34cae48707e70442aca13e1b4ab55757292828dDake Gu } 264e34cae48707e70442aca13e1b4ab55757292828dDake Gu }); 265e34cae48707e70442aca13e1b4ab55757292828dDake Gu mSceneWithoutTitle = sTransitionHelper.createScene(root, new Runnable() { 266e34cae48707e70442aca13e1b4ab55757292828dDake Gu @Override 267e34cae48707e70442aca13e1b4ab55757292828dDake Gu public void run() { 268e34cae48707e70442aca13e1b4ab55757292828dDake Gu mBrowseTitle.setVisibility(View.GONE); 269e34cae48707e70442aca13e1b4ab55757292828dDake Gu } 270e34cae48707e70442aca13e1b4ab55757292828dDake Gu }); 271e34cae48707e70442aca13e1b4ab55757292828dDake Gu mTitleTransition = sTransitionHelper.createTransitionSet(false); 272e34cae48707e70442aca13e1b4ab55757292828dDake Gu Object fade = sTransitionHelper.createFadeTransition( 273e34cae48707e70442aca13e1b4ab55757292828dDake Gu TransitionHelper.FADE_IN | TransitionHelper.FADE_OUT); 274e34cae48707e70442aca13e1b4ab55757292828dDake Gu Object changeBounds = sTransitionHelper.createChangeBounds(false); 275e34cae48707e70442aca13e1b4ab55757292828dDake Gu sTransitionHelper.addTransition(mTitleTransition, fade); 276e34cae48707e70442aca13e1b4ab55757292828dDake Gu sTransitionHelper.addTransition(mTitleTransition, changeBounds); 277e34cae48707e70442aca13e1b4ab55757292828dDake Gu sTransitionHelper.excludeChildren(mTitleTransition, R.id.browse_grid_dock, true); 278739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return root; 279739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 280739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 281739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 282739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void onViewCreated(View view, Bundle savedInstanceState) { 283739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout ViewGroup gridDock = (ViewGroup) view.findViewById(R.id.browse_grid_dock); 284739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridViewHolder = mGridPresenter.onCreateViewHolder(gridDock); 285739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout gridDock.addView(mGridViewHolder.view); 286739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 287739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout updateAdapter(); 288739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 289739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 290739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 291739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void onStart() { 292739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout super.onStart(); 293739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridViewHolder.getGridView().requestFocus(); 294739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 295739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 296739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 297739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void onDestroyView() { 298739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout super.onDestroyView(); 299739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridViewHolder = null; 300739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 301739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 302739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 303739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets the selected item position. 304739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 305739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setSelectedPosition(int position) { 306739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mSelectedPosition = position; 307739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if(mGridViewHolder != null && mGridViewHolder.getGridView().getAdapter() != null) { 308739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridViewHolder.getGridView().setSelectedPositionSmooth(position); 309739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 310739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 311739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 312739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private void updateAdapter() { 313739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (mGridViewHolder != null) { 314739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridPresenter.onBindViewHolder(mGridViewHolder, mAdapter); 315739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (mSelectedPosition != -1) { 316739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridViewHolder.getGridView().setSelectedPosition(mSelectedPosition); 317739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 318739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 319739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 320739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout} 321