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