BrowseSupportFragment.java revision 35d7a6c31606ed4ca38deda3cacae080a95c95c9
171e7e67f320b23feac784b629db17b3bcce08722Dake Gu/* This file is auto-generated from BrowseFragment.java.  DO NOT MODIFY. */
271e7e67f320b23feac784b629db17b3bcce08722Dake Gu
371e7e67f320b23feac784b629db17b3bcce08722Dake Gu/*
471e7e67f320b23feac784b629db17b3bcce08722Dake Gu * Copyright (C) 2014 The Android Open Source Project
571e7e67f320b23feac784b629db17b3bcce08722Dake Gu *
671e7e67f320b23feac784b629db17b3bcce08722Dake Gu * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
771e7e67f320b23feac784b629db17b3bcce08722Dake Gu * in compliance with the License. You may obtain a copy of the License at
871e7e67f320b23feac784b629db17b3bcce08722Dake Gu *
971e7e67f320b23feac784b629db17b3bcce08722Dake Gu * http://www.apache.org/licenses/LICENSE-2.0
1071e7e67f320b23feac784b629db17b3bcce08722Dake Gu *
1171e7e67f320b23feac784b629db17b3bcce08722Dake Gu * Unless required by applicable law or agreed to in writing, software distributed under the License
1271e7e67f320b23feac784b629db17b3bcce08722Dake Gu * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
1371e7e67f320b23feac784b629db17b3bcce08722Dake Gu * or implied. See the License for the specific language governing permissions and limitations under
1471e7e67f320b23feac784b629db17b3bcce08722Dake Gu * the License.
1571e7e67f320b23feac784b629db17b3bcce08722Dake Gu */
1671e7e67f320b23feac784b629db17b3bcce08722Dake Gupackage com.example.android.leanback;
1771e7e67f320b23feac784b629db17b3bcce08722Dake Gu
18c578ad430b51de0151ca9b3299d84f73bb71286bsusnataimport android.support.v4.app.Fragment;
1971e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.content.Intent;
2071e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.os.Bundle;
2171e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.os.Handler;
2271e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.app.GuidedStepSupportFragment;
23c578ad430b51de0151ca9b3299d84f73bb71286bsusnataimport android.support.v17.leanback.app.RowsSupportFragment;
2471e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ArrayObjectAdapter;
258f94d180902da7469b67f7c47c93a3a0b9acdb3asusnataimport android.support.v17.leanback.widget.DividerRow;
2671e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.HeaderItem;
2771e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ImageCardView;
2871e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ListRow;
2971e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ListRowPresenter;
3071e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.OnItemViewClickedListener;
3171e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.OnItemViewSelectedListener;
32c578ad430b51de0151ca9b3299d84f73bb71286bsusnataimport android.support.v17.leanback.widget.PageRow;
3371e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.Presenter;
3471e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.Row;
3571e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.RowPresenter;
368f94d180902da7469b67f7c47c93a3a0b9acdb3asusnataimport android.support.v17.leanback.widget.SectionRow;
3720767a171ab46addb5d50248d4267db14c0c8883susnataimport android.support.v4.app.ActivityOptionsCompat;
3871e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.util.Log;
39c578ad430b51de0151ca9b3299d84f73bb71286bsusnataimport android.view.LayoutInflater;
4071e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.view.View;
4171e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.view.ViewGroup;
4271e7e67f320b23feac784b629db17b3bcce08722Dake Gu
4371e7e67f320b23feac784b629db17b3bcce08722Dake Gupublic class BrowseSupportFragment extends android.support.v17.leanback.app.BrowseSupportFragment {
4471e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final String TAG = "leanback.BrowseSupportFragment";
4571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
4671e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final boolean TEST_ENTRANCE_TRANSITION = true;
47380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    private static final int NUM_ROWS = 8;
48380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    private static final long HEADER_ID1 = 1001;
49380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    private static final long HEADER_ID2 = 1002;
508f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata    private static final long HEADER_ID3 = 1003;
5171e7e67f320b23feac784b629db17b3bcce08722Dake Gu
5271e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private ArrayObjectAdapter mRowsAdapter;
5371e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private BackgroundHelper mBackgroundHelper = new BackgroundHelper();
5471e7e67f320b23feac784b629db17b3bcce08722Dake Gu
5571e7e67f320b23feac784b629db17b3bcce08722Dake Gu    // For good performance, it's important to use a single instance of
5671e7e67f320b23feac784b629db17b3bcce08722Dake Gu    // a card presenter for all rows using that presenter.
5787b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu    final CardPresenter mCardPresenter = new CardPresenter();
5887b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu    final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
5971e7e67f320b23feac784b629db17b3bcce08722Dake Gu
60c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    public BrowseSupportFragment() {
61380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        getMainFragmentRegistry().registerFragment(PageRow.class, new PageRowFragmentFactory());
62c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
63c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
6471e7e67f320b23feac784b629db17b3bcce08722Dake Gu    @Override
6571e7e67f320b23feac784b629db17b3bcce08722Dake Gu    public void onCreate(Bundle savedInstanceState) {
6671e7e67f320b23feac784b629db17b3bcce08722Dake Gu        Log.i(TAG, "onCreate");
6771e7e67f320b23feac784b629db17b3bcce08722Dake Gu        super.onCreate(savedInstanceState);
6871e7e67f320b23feac784b629db17b3bcce08722Dake Gu
6971e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.ic_title));
7071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setTitle("Leanback Sample App");
7171e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setHeadersState(HEADERS_ENABLED);
7271e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnSearchClickedListener(new View.OnClickListener() {
7371e7e67f320b23feac784b629db17b3bcce08722Dake Gu            @Override
7471e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void onClick(View view) {
7571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                Intent intent = new Intent(getActivity(), SearchSupportActivity.class);
7671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                startActivity(intent);
7771e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
7871e7e67f320b23feac784b629db17b3bcce08722Dake Gu        });
7971e7e67f320b23feac784b629db17b3bcce08722Dake Gu
8071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnItemViewClickedListener(new ItemViewClickedListener());
8171e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
8271e7e67f320b23feac784b629db17b3bcce08722Dake Gu            @Override
8371e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
8471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    RowPresenter.ViewHolder rowViewHolder, Row row) {
8571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                Log.i(TAG, "onItemSelected: " + item + " row " + row);
8671e7e67f320b23feac784b629db17b3bcce08722Dake Gu
8771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                if (isShowingHeaders()) {
8871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    mBackgroundHelper.setBackground(getActivity(), null);
89c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                } else if (item instanceof PhotoItem) {
9071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    mBackgroundHelper.setBackground(
9171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                            getActivity(), ((PhotoItem) item).getImageResourceId());
9271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                }
9371e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
9471e7e67f320b23feac784b629db17b3bcce08722Dake Gu        });
9571e7e67f320b23feac784b629db17b3bcce08722Dake Gu        if (TEST_ENTRANCE_TRANSITION) {
9671e7e67f320b23feac784b629db17b3bcce08722Dake Gu            // don't run entrance transition if fragment is restored.
9771e7e67f320b23feac784b629db17b3bcce08722Dake Gu            if (savedInstanceState == null) {
9871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                prepareEntranceTransition();
9971e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
10071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
101380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
10271e7e67f320b23feac784b629db17b3bcce08722Dake Gu        // simulates in a real world use case  data being loaded two seconds later
10371e7e67f320b23feac784b629db17b3bcce08722Dake Gu        new Handler().postDelayed(new Runnable() {
10471e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void run() {
10535d7a6c31606ed4ca38deda3cacae080a95c95c9susnata                setupRows();
10671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                loadData();
10771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                startEntranceTransition();
10871e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
10971e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }, 2000);
11071e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
11171e7e67f320b23feac784b629db17b3bcce08722Dake Gu
112c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    @Override
113c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    public View onCreateView(
114c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
115c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        return super.onCreateView(inflater, container, savedInstanceState);
116c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
11771e7e67f320b23feac784b629db17b3bcce08722Dake Gu
118c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    private void setupRows() {
1194ff7f6d210b75531b3dce98f8028804f55c72051susnata        ListRowPresenter listRowPresenter = new ListRowPresenter();
1204ff7f6d210b75531b3dce98f8028804f55c72051susnata        listRowPresenter.setNumRows(2);
1214ff7f6d210b75531b3dce98f8028804f55c72051susnata        mRowsAdapter = new ArrayObjectAdapter(listRowPresenter);
12271e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setAdapter(mRowsAdapter);
12371e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
12471e7e67f320b23feac784b629db17b3bcce08722Dake Gu
12571e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private void loadData() {
126c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        int i = 0;
127380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
1285635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID1, "Page Row 0")));
1295635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new DividerRow());
130380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
1315635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new SectionRow(new HeaderItem("section 0")));
132c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        for (; i < NUM_ROWS; ++i) {
1335635fbd2da9e73c8f68287626728f909565c7a8aDake Gu            mRowsAdapter.add(new ListRow(new HeaderItem(i, "Row " + i), createListRowAdapter(i)));
13471e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
13571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
1365635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new DividerRow());
1375635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID2, "Page Row 1")));
1388f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata
1398f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata        mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID3, "Page Row 2")));
140c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
141c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
142c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    private ArrayObjectAdapter createListRowAdapter(int i) {
143c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
144c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                mCardPresenter : mCardPresenter2);
145c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
146c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Hello world",
147c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_1));
148c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
149c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "This is a test",
150c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Only a test",
151c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_2));
152c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
153c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Android TV",
154c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "by Google",
155c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_3));
156c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
157c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Leanback",
158c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_4));
159c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
160c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "GuidedStep (Slide left/right)",
161c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_5));
162c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
163c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "GuidedStep (Slide bottom up)",
164c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Open GuidedStepSupportFragment",
165c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_6));
166c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
167c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Android TV",
168c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "open RowsSupportActivity",
169c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_7));
170c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
171c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Leanback",
172c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "open BrowseSupportActivity",
173c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_8));
1748f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata        listRowAdapter.add(new PhotoItem(
1754ff7f6d210b75531b3dce98f8028804f55c72051susnata                "Hello world",
1764ff7f6d210b75531b3dce98f8028804f55c72051susnata                R.drawable.gallery_photo_1));
1774ff7f6d210b75531b3dce98f8028804f55c72051susnata        listRowAdapter.add(new PhotoItem(
1784ff7f6d210b75531b3dce98f8028804f55c72051susnata                "This is a test",
1794ff7f6d210b75531b3dce98f8028804f55c72051susnata                "Only a test",
1804ff7f6d210b75531b3dce98f8028804f55c72051susnata                R.drawable.gallery_photo_2));
1814ff7f6d210b75531b3dce98f8028804f55c72051susnata        listRowAdapter.add(new PhotoItem(
1824ff7f6d210b75531b3dce98f8028804f55c72051susnata                "Android TV",
1834ff7f6d210b75531b3dce98f8028804f55c72051susnata                "by Google",
1844ff7f6d210b75531b3dce98f8028804f55c72051susnata                R.drawable.gallery_photo_3));
1858f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata        listRowAdapter.add(new PhotoItem(
1868f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                "Leanback",
1874ff7f6d210b75531b3dce98f8028804f55c72051susnata                R.drawable.gallery_photo_4));
188c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        return listRowAdapter;
18971e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
19071e7e67f320b23feac784b629db17b3bcce08722Dake Gu
19171e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private final class ItemViewClickedListener implements OnItemViewClickedListener {
19271e7e67f320b23feac784b629db17b3bcce08722Dake Gu        @Override
19371e7e67f320b23feac784b629db17b3bcce08722Dake Gu        public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
19471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                RowPresenter.ViewHolder rowViewHolder, Row row) {
19571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
19671e7e67f320b23feac784b629db17b3bcce08722Dake Gu            Intent intent;
19771e7e67f320b23feac784b629db17b3bcce08722Dake Gu            Bundle bundle;
19871e7e67f320b23feac784b629db17b3bcce08722Dake Gu            if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
19971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                GuidedStepSupportFragment.add(getFragmentManager(),
20020767a171ab46addb5d50248d4267db14c0c8883susnata                        new GuidedStepSupportHalfScreenActivity.FirstStepFragment(),
201ee3c13ee552002263be40f6a5986f61c605b0bacDake Gu                        R.id.lb_guidedstep_host);
20271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                return;
20320767a171ab46addb5d50248d4267db14c0c8883susnata            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) {
20420767a171ab46addb5d50248d4267db14c0c8883susnata                GuidedStepSupportFragment.add(getFragmentManager(),
205c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                        new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
206c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                return;
207c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
20871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), BrowseSupportActivity.class);
20971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
21071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        .toBundle();
211c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) {
21271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), RowsSupportActivity.class);
21371e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
21471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        .toBundle();
21571e7e67f320b23feac784b629db17b3bcce08722Dake Gu            } else {
21671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), DetailsSupportActivity.class);
21771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item);
21871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
21971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        getActivity(),
220c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                        ((ImageCardView) itemViewHolder.view).getMainImageView(),
22171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle();
22271e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
22371e7e67f320b23feac784b629db17b3bcce08722Dake Gu            getActivity().startActivity(intent, bundle);
22471e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
22571e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
226c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
227380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    public static class PageRowFragmentFactory extends FragmentFactory {
228c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
229c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        @Override
230380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        public Fragment createFragment(Object rowObj) {
231380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            Row row = (Row) rowObj;
232380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            if (row.getHeaderItem().getId() == HEADER_ID1) {
2335f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                return new SampleRowsSupportFragment();
234380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            } else if (row.getHeaderItem().getId() == HEADER_ID2) {
235380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                return new SampleRowsSupportFragment();
2368f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata            } else if (row.getHeaderItem().getId() == HEADER_ID3) {
2378f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                return new SampleFragment();
238c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            }
239380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
240380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            return null;
241c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
242c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
243c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
244380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    public static class SampleRowsSupportFragment extends RowsSupportFragment {
245c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        final CardPresenter mCardPresenter = new CardPresenter();
246c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
247c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
2485f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        void loadFragmentData() {
2495f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            ArrayObjectAdapter adapter = (ArrayObjectAdapter) getAdapter();
250380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            for (int i = 0; i < 4; i++) {
251380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i));
252380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                adapter.add(row);
253c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            }
2545f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            if (getMainFragmentAdapter() != null) {
2555f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                getMainFragmentAdapter().getFragmentHost()
2565f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                        .notifyDataReady(getMainFragmentAdapter());
2575f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            }
2585f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        }
2595f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu
2605f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        public SampleRowsSupportFragment() {
2615f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
262380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            setAdapter(adapter);
2635f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            // simulates late data loading:
2645f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            new Handler().postDelayed(new Runnable() {
2655f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                public void run() {
2665f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                    loadFragmentData();
2675f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                }
2685f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            }, 500);
269380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
270380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            setOnItemViewClickedListener(new OnItemViewClickedListener() {
271380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                @Override
2724ff7f6d210b75531b3dce98f8028804f55c72051susnata                public void onItemClicked(
2734ff7f6d210b75531b3dce98f8028804f55c72051susnata                        Presenter.ViewHolder itemViewHolder,
2744ff7f6d210b75531b3dce98f8028804f55c72051susnata                        Object item,
2754ff7f6d210b75531b3dce98f8028804f55c72051susnata                        RowPresenter.ViewHolder rowViewHolder,
2764ff7f6d210b75531b3dce98f8028804f55c72051susnata                        Row row) {
2778f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    Intent intent;
2788f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    Bundle bundle;
2798f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
2805f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                        GuidedStepSupportFragment.add(getActivity().getSupportFragmentManager(),
2818f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                new GuidedStepSupportHalfScreenActivity.FirstStepFragment(),
2828f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                R.id.lb_guidedstep_host);
2838f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        return;
2848f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) {
2855f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                        GuidedStepSupportFragment.add(getActivity().getSupportFragmentManager(),
2868f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
2878f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        return;
2888f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
2898f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        intent = new Intent(getActivity(), BrowseSupportActivity.class);
2908f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
2918f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                .toBundle();
2928f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) {
2938f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        intent = new Intent(getActivity(), RowsSupportActivity.class);
2948f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
2958f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                .toBundle();
2968f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    } else {
2978f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        intent = new Intent(getActivity(), DetailsSupportActivity.class);
2988f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item);
2998f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
3008f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                getActivity(),
3018f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                ((ImageCardView) itemViewHolder.view).getMainImageView(),
3028f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle();
3038f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    }
3048f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    getActivity().startActivity(intent, bundle);
305380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                }
306380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            });
307c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
308c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
309c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        private ArrayObjectAdapter createListRowAdapter(int i) {
310c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
311c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    mCardPresenter : mCardPresenter2);
312c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
313c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Hello world",
314c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_1));
315c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
316c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "This is a test",
317c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Only a test",
318c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_2));
319c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
320c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Android TV",
321c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "by Google",
322c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_3));
323c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
324c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Leanback",
325c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_4));
326c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
327c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "GuidedStep (Slide left/right)",
328c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_5));
329c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
330c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "GuidedStep (Slide bottom up)",
331c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Open GuidedStepSupportFragment",
332c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_6));
333c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
334c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Android TV",
335c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "open RowsSupportActivity",
336c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_7));
337c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
338c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Leanback",
339c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "open BrowseSupportActivity",
340c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_8));
341c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            return listRowAdapter;
342c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
343c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
344c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
3455f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu    public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
3465f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu
3475f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        public PageFragmentAdapterImpl(SampleFragment fragment) {
3485f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            super(fragment);
3495f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            setScalingEnabled(true);
3505f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        }
3515f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu
3525f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        @Override
3535f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        public void setEntranceTransitionState(boolean state) {
3545f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            getFragment().setEntranceTransitionState(state);
3555f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        }
3565f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu    }
3575f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu
3588f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata    public static class SampleFragment extends Fragment implements MainFragmentAdapterProvider {
359380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
360380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this);
361c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
362acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        public void setEntranceTransitionState(boolean state) {
363acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            final View view = getView();
364acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            int visibility = state ? View.VISIBLE : View.INVISIBLE;
365acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            view.findViewById(R.id.tv1).setVisibility(visibility);
366acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            view.findViewById(R.id.tv2).setVisibility(visibility);
367acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            view.findViewById(R.id.tv3).setVisibility(visibility);
368acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        }
369acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu
370c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        @Override
371c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        public View onCreateView(
372380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
373380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            View view = inflater.inflate(R.layout.page_fragment, container, false);
374380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            view.findViewById(R.id.tv1).setOnClickListener(new View.OnClickListener() {
375380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                @Override
376380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                public void onClick(View view) {
377380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                    Intent intent = new Intent(inflater.getContext(), GuidedStepSupportActivity.class);
378380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                    startActivity(intent);
379380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                }
380380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            });
381380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
382380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            return view;
383380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        }
384380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
385380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        @Override
386aadab57a5c879a377588d7e5d21b7e8b09b94170Dake Gu        public void onViewCreated(View view, Bundle savedInstanceState) {
3875f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            // static layout has view and data ready immediately
3885f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter);
3895f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            mMainFragmentAdapter.getFragmentHost().notifyDataReady(mMainFragmentAdapter);
390acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        }
391acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu
392acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        @Override
3938f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata        public MainFragmentAdapter getMainFragmentAdapter() {
3948f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata            return mMainFragmentAdapter;
395c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
396c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
39771e7e67f320b23feac784b629db17b3bcce08722Dake Gu}
398