DetailsFragment.java revision 76b3441abcfcf1291d865fd4a204c103b637027c
1c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn/* 2c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * Copyright (C) 2014 The Android Open Source Project 3c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * 4c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * in compliance with the License. You may obtain a copy of the License at 6c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * 7c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * http://www.apache.org/licenses/LICENSE-2.0 8c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * 9c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * Unless required by applicable law or agreed to in writing, software distributed under the License 10c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * or implied. See the License for the specific language governing permissions and limitations under 12c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * the License. 13c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn */ 14c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbournpackage android.support.v17.leanback.app; 15c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 16c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbournimport android.support.v17.leanback.R; 17c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbournimport android.support.v17.leanback.widget.ObjectAdapter; 18c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbournimport android.support.v17.leanback.widget.OnItemClickedListener; 19c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbournimport android.support.v17.leanback.widget.OnItemSelectedListener; 20dc9b5676ab337317154fa7702033ae174617525bDake Guimport android.support.v17.leanback.widget.OnItemViewClickedListener; 21dc9b5676ab337317154fa7702033ae174617525bDake Guimport android.support.v17.leanback.widget.OnItemViewSelectedListener; 22dc9b5676ab337317154fa7702033ae174617525bDake Guimport android.support.v17.leanback.widget.Presenter; 23c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbournimport android.support.v17.leanback.widget.Row; 24dc9b5676ab337317154fa7702033ae174617525bDake Guimport android.support.v17.leanback.widget.RowPresenter; 25c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbournimport android.support.v17.leanback.widget.VerticalGridView; 26c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbournimport android.app.Fragment; 27c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbournimport android.os.Bundle; 28c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbournimport android.view.LayoutInflater; 29c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbournimport android.view.View; 30c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbournimport android.view.ViewGroup; 31c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 32c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn/** 33c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * Wrapper fragment for leanback details screens. 34c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn */ 353f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gupublic class DetailsFragment extends BaseFragment { 36c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn private static final String TAG = "DetailsFragment"; 37c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn private static boolean DEBUG = false; 38c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 393f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu private class SetSelectionRunnable implements Runnable { 403f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu int mPosition; 413f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu boolean mSmooth = true; 423f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu @Override 433f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu public void run() { 443f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu mRowsFragment.setSelectedPosition(mPosition, mSmooth); 453f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 463f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 473f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 48b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu private RowsFragment mRowsFragment; 49c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 50b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu private ObjectAdapter mAdapter; 51c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn private int mContainerListAlignTop; 5276b3441abcfcf1291d865fd4a204c103b637027cDake Gu private OnItemSelectedListener mOnItemSelectedListener; 53b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu private OnItemClickedListener mOnItemClickedListener; 5476b3441abcfcf1291d865fd4a204c103b637027cDake Gu private OnItemViewSelectedListener mOnItemViewSelectedListener; 55dc9b5676ab337317154fa7702033ae174617525bDake Gu private OnItemViewClickedListener mOnItemViewClickedListener; 56c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn private int mSelectedPosition = -1; 57c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 583f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu private Object mSceneAfterEntranceTransition; 593f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 603f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu private final SetSelectionRunnable mSetSelectionRunnable = new SetSelectionRunnable(); 613f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 62c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn /** 63c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * Sets the list of rows for the fragment. 64c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn */ 65c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn public void setAdapter(ObjectAdapter adapter) { 66b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu mAdapter = adapter; 67b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu if (mRowsFragment != null) { 68b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu mRowsFragment.setAdapter(adapter); 69b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu } 70c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn } 71c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 72c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn /** 73c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * Returns the list of rows. 74c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn */ 75c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn public ObjectAdapter getAdapter() { 76b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu return mAdapter; 77c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn } 78c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 79c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn /** 80c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * Sets an item selection listener. 81dc9b5676ab337317154fa7702033ae174617525bDake Gu * @deprecated Use {@link #setOnItemViewSelectedListener(OnItemViewSelectedListener)} 82c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn */ 83c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn public void setOnItemSelectedListener(OnItemSelectedListener listener) { 8476b3441abcfcf1291d865fd4a204c103b637027cDake Gu if (mOnItemSelectedListener != null) { 8576b3441abcfcf1291d865fd4a204c103b637027cDake Gu mOnItemSelectedListener = listener; 8676b3441abcfcf1291d865fd4a204c103b637027cDake Gu if (mRowsFragment != null) { 8776b3441abcfcf1291d865fd4a204c103b637027cDake Gu mRowsFragment.setOnItemSelectedListener(mOnItemSelectedListener); 8876b3441abcfcf1291d865fd4a204c103b637027cDake Gu } 8976b3441abcfcf1291d865fd4a204c103b637027cDake Gu } 90c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn } 91c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 92c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn /** 93c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * Sets an item Clicked listener. 94dc9b5676ab337317154fa7702033ae174617525bDake Gu * @deprecated Use {@link #setOnItemViewClickedListener(OnItemViewClickedListener)} 95c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn */ 96c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn public void setOnItemClickedListener(OnItemClickedListener listener) { 9776b3441abcfcf1291d865fd4a204c103b637027cDake Gu if (mOnItemClickedListener != listener) { 9876b3441abcfcf1291d865fd4a204c103b637027cDake Gu mOnItemClickedListener = listener; 9976b3441abcfcf1291d865fd4a204c103b637027cDake Gu if (mRowsFragment != null) { 10076b3441abcfcf1291d865fd4a204c103b637027cDake Gu mRowsFragment.setOnItemClickedListener(listener); 10176b3441abcfcf1291d865fd4a204c103b637027cDake Gu } 102b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu } 103c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn } 104c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 105c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn /** 106dc9b5676ab337317154fa7702033ae174617525bDake Gu * Sets an item selection listener. 107dc9b5676ab337317154fa7702033ae174617525bDake Gu */ 108dc9b5676ab337317154fa7702033ae174617525bDake Gu public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) { 10976b3441abcfcf1291d865fd4a204c103b637027cDake Gu if (mOnItemViewSelectedListener != listener) { 11076b3441abcfcf1291d865fd4a204c103b637027cDake Gu mOnItemViewSelectedListener = listener; 11176b3441abcfcf1291d865fd4a204c103b637027cDake Gu if (mRowsFragment != null) { 11276b3441abcfcf1291d865fd4a204c103b637027cDake Gu mRowsFragment.setOnItemViewSelectedListener(mOnItemViewSelectedListener); 11376b3441abcfcf1291d865fd4a204c103b637027cDake Gu } 11476b3441abcfcf1291d865fd4a204c103b637027cDake Gu } 115dc9b5676ab337317154fa7702033ae174617525bDake Gu } 116dc9b5676ab337317154fa7702033ae174617525bDake Gu 117dc9b5676ab337317154fa7702033ae174617525bDake Gu /** 118dc9b5676ab337317154fa7702033ae174617525bDake Gu * Sets an item Clicked listener. 119dc9b5676ab337317154fa7702033ae174617525bDake Gu */ 120dc9b5676ab337317154fa7702033ae174617525bDake Gu public void setOnItemViewClickedListener(OnItemViewClickedListener listener) { 12176b3441abcfcf1291d865fd4a204c103b637027cDake Gu if (mOnItemViewClickedListener != listener) { 12276b3441abcfcf1291d865fd4a204c103b637027cDake Gu mOnItemViewClickedListener = listener; 12376b3441abcfcf1291d865fd4a204c103b637027cDake Gu if (mRowsFragment != null) { 12476b3441abcfcf1291d865fd4a204c103b637027cDake Gu mRowsFragment.setOnItemViewClickedListener(listener); 12576b3441abcfcf1291d865fd4a204c103b637027cDake Gu } 126dc9b5676ab337317154fa7702033ae174617525bDake Gu } 127dc9b5676ab337317154fa7702033ae174617525bDake Gu } 128dc9b5676ab337317154fa7702033ae174617525bDake Gu 129dc9b5676ab337317154fa7702033ae174617525bDake Gu /** 130c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * Returns the item Clicked listener. 131dc9b5676ab337317154fa7702033ae174617525bDake Gu * @deprecated Use {@link #getOnItemViewClickedListener()} 132c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn */ 133c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn public OnItemClickedListener getOnItemClickedListener() { 134b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu return mOnItemClickedListener; 135c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn } 136c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 137dc9b5676ab337317154fa7702033ae174617525bDake Gu /** 138dc9b5676ab337317154fa7702033ae174617525bDake Gu * Returns the item Clicked listener. 139dc9b5676ab337317154fa7702033ae174617525bDake Gu */ 140dc9b5676ab337317154fa7702033ae174617525bDake Gu public OnItemViewClickedListener getOnItemViewClickedListener() { 141dc9b5676ab337317154fa7702033ae174617525bDake Gu return mOnItemViewClickedListener; 142dc9b5676ab337317154fa7702033ae174617525bDake Gu } 143dc9b5676ab337317154fa7702033ae174617525bDake Gu 144c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn @Override 145c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn public void onCreate(Bundle savedInstanceState) { 146c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn super.onCreate(savedInstanceState); 147c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 148c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn mContainerListAlignTop = 149c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn getResources().getDimensionPixelSize(R.dimen.lb_details_rows_align_top); 150c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn } 151c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 152c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn @Override 153c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn public View onCreateView(LayoutInflater inflater, ViewGroup container, 154c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn Bundle savedInstanceState) { 155b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu View view = inflater.inflate(R.layout.lb_details_fragment, container, false); 1561caf420879768ae8aebe8c27546707a28f3bb659Craig Stout mRowsFragment = (RowsFragment) getChildFragmentManager().findFragmentById( 1571caf420879768ae8aebe8c27546707a28f3bb659Craig Stout R.id.fragment_dock); 1581caf420879768ae8aebe8c27546707a28f3bb659Craig Stout if (mRowsFragment == null) { 159b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu mRowsFragment = new RowsFragment(); 160b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu getChildFragmentManager().beginTransaction() 1611caf420879768ae8aebe8c27546707a28f3bb659Craig Stout .replace(R.id.fragment_dock, mRowsFragment).commit(); 162b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu } 1636c3b0b3d19683ea8c4069ec761f14dc2c7b8c5dcCraig Stout mRowsFragment.setAdapter(mAdapter); 16476b3441abcfcf1291d865fd4a204c103b637027cDake Gu mRowsFragment.setOnItemSelectedListener(mOnItemSelectedListener); 16576b3441abcfcf1291d865fd4a204c103b637027cDake Gu mRowsFragment.setOnItemViewSelectedListener(mOnItemViewSelectedListener); 166b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu mRowsFragment.setOnItemClickedListener(mOnItemClickedListener); 167dc9b5676ab337317154fa7702033ae174617525bDake Gu mRowsFragment.setOnItemViewClickedListener(mOnItemViewClickedListener); 1683f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu mSceneAfterEntranceTransition = sTransitionHelper.createScene((ViewGroup) view, 1693f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu new Runnable() { 1703f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu @Override 1713f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu public void run() { 1723f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu mRowsFragment.setEntranceTransitionState(true); 1733f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 1743f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu }); 175b70539172cdeb5672ed7128f69383d1fc1458ccbDake Gu return view; 176c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn } 177c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 1787ab1edf2b49f3cdcb9db7a1c60d0dc1e17a9aef7Craig Stout void setVerticalGridViewLayout(VerticalGridView listview) { 179c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn // align the top edge of item to a fixed position 180c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn listview.setItemAlignmentOffset(0); 181c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn listview.setItemAlignmentOffsetPercent(VerticalGridView.ITEM_ALIGN_OFFSET_PERCENT_DISABLED); 182c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn listview.setWindowAlignmentOffset(mContainerListAlignTop); 183c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn listview.setWindowAlignmentOffsetPercent(VerticalGridView.WINDOW_ALIGN_OFFSET_PERCENT_DISABLED); 184c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn listview.setWindowAlignment(VerticalGridView.WINDOW_ALIGN_NO_EDGE); 185c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn } 186c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 1877ab1edf2b49f3cdcb9db7a1c60d0dc1e17a9aef7Craig Stout VerticalGridView getVerticalGridView() { 1887ab1edf2b49f3cdcb9db7a1c60d0dc1e17a9aef7Craig Stout return mRowsFragment == null ? null : mRowsFragment.getVerticalGridView(); 1897ab1edf2b49f3cdcb9db7a1c60d0dc1e17a9aef7Craig Stout } 1907ab1edf2b49f3cdcb9db7a1c60d0dc1e17a9aef7Craig Stout 191d1adbdcb44a48e142d28a93189c57edfe62d93ceCraig Stout RowsFragment getRowsFragment() { 192d1adbdcb44a48e142d28a93189c57edfe62d93ceCraig Stout return mRowsFragment; 193d1adbdcb44a48e142d28a93189c57edfe62d93ceCraig Stout } 194d1adbdcb44a48e142d28a93189c57edfe62d93ceCraig Stout 195c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn /** 196c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * Setup dimensions that are only meaningful when the child Fragments are inside 197c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn * DetailsFragment. 198c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn */ 199c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn private void setupChildFragmentLayout() { 2007ab1edf2b49f3cdcb9db7a1c60d0dc1e17a9aef7Craig Stout setVerticalGridViewLayout(mRowsFragment.getVerticalGridView()); 201c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn } 202c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn 2033f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu /** 2043f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * Sets the selected row position with smooth animation. 2053f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu */ 2063f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu public void setSelectedPosition(int position) { 2073f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu setSelectedPosition(position, true); 2083f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 2093f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 2103f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu /** 2113f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu * Sets the selected row position. 2123f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu */ 2133f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu public void setSelectedPosition(int position, boolean smooth) { 2143f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu mSetSelectionRunnable.mPosition = position; 2153f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu mSetSelectionRunnable.mSmooth = smooth; 2163f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu if (getView() != null && getView().getHandler() != null) { 2173f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu getView().getHandler().post(mSetSelectionRunnable); 2183f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 2193f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 2203f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 221c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn @Override 222c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn public void onStart() { 223c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn super.onStart(); 224c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn setupChildFragmentLayout(); 225c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn mRowsFragment.getView().requestFocus(); 2263f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu if (isEntranceTransitionEnabled()) { 2273f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu // make sure recycler view animation is disabled 2283f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu mRowsFragment.onTransitionStart(); 2293f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu mRowsFragment.setEntranceTransitionState(false); 2303f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 2313f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 2323f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 2333f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu @Override 2343f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu protected Object createEntranceTransition() { 2353f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu return sTransitionHelper.loadTransition(getActivity(), 2363f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu R.transition.lb_details_enter_transition); 2373f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 2383f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 2393f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu @Override 2403f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu protected void runEntranceTransition(Object entranceTransition) { 2413f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu sTransitionHelper.runTransition(mSceneAfterEntranceTransition, 2423f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu entranceTransition); 2433f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu } 2443f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 2453f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu @Override 2463f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu protected void onEntranceTransitionEnd() { 2473f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu mRowsFragment.onTransitionEnd(); 248c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn } 2493f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu 250c3047aae5913bf0f79ed65e2d4b6b74ca38d53deTim Kilbourn} 251