BrowseSupportFragment.java revision 5635fbd2da9e73c8f68287626728f909565c7a8a
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;
22380a6d5bcb74ec69524f248d0b2edee49805b31bsusnataimport android.support.v17.leanback.app.Adaptable;
2371e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.app.GuidedStepSupportFragment;
24c578ad430b51de0151ca9b3299d84f73bb71286bsusnataimport android.support.v17.leanback.app.RowsSupportFragment;
2571e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ArrayObjectAdapter;
2671e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.HeaderItem;
2771e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ImageCardView;
285635fbd2da9e73c8f68287626728f909565c7a8aDake Guimport android.support.v17.leanback.widget.DividerRow;
295635fbd2da9e73c8f68287626728f909565c7a8aDake Guimport android.support.v17.leanback.widget.SectionRow;
3071e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ListRow;
3171e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ListRowPresenter;
3271e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.OnItemViewClickedListener;
3371e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.OnItemViewSelectedListener;
34c578ad430b51de0151ca9b3299d84f73bb71286bsusnataimport android.support.v17.leanback.widget.PageRow;
3571e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.Presenter;
36c578ad430b51de0151ca9b3299d84f73bb71286bsusnataimport android.support.v17.leanback.widget.PresenterSelector;
3771e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.Row;
3871e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.RowPresenter;
3920767a171ab46addb5d50248d4267db14c0c8883susnataimport android.support.v4.app.ActivityOptionsCompat;
4071e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.util.Log;
41c578ad430b51de0151ca9b3299d84f73bb71286bsusnataimport android.view.LayoutInflater;
4271e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.view.View;
4371e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.view.ViewGroup;
4471e7e67f320b23feac784b629db17b3bcce08722Dake Gu
4571e7e67f320b23feac784b629db17b3bcce08722Dake Gupublic class BrowseSupportFragment extends android.support.v17.leanback.app.BrowseSupportFragment {
4671e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final String TAG = "leanback.BrowseSupportFragment";
4771e7e67f320b23feac784b629db17b3bcce08722Dake Gu
4871e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final boolean TEST_ENTRANCE_TRANSITION = true;
49380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    private static final int NUM_ROWS = 8;
50380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    private static final long HEADER_ID1 = 1001;
51380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    private static final long HEADER_ID2 = 1002;
5271e7e67f320b23feac784b629db17b3bcce08722Dake Gu
5371e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private ArrayObjectAdapter mRowsAdapter;
5471e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private BackgroundHelper mBackgroundHelper = new BackgroundHelper();
5571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
5671e7e67f320b23feac784b629db17b3bcce08722Dake Gu    // For good performance, it's important to use a single instance of
5771e7e67f320b23feac784b629db17b3bcce08722Dake Gu    // a card presenter for all rows using that presenter.
5887b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu    final CardPresenter mCardPresenter = new CardPresenter();
5987b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu    final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
6071e7e67f320b23feac784b629db17b3bcce08722Dake Gu
61c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    public BrowseSupportFragment() {
62380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        getMainFragmentRegistry().registerFragment(PageRow.class, new PageRowFragmentFactory());
63c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
64c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
6571e7e67f320b23feac784b629db17b3bcce08722Dake Gu    @Override
6671e7e67f320b23feac784b629db17b3bcce08722Dake Gu    public void onCreate(Bundle savedInstanceState) {
6771e7e67f320b23feac784b629db17b3bcce08722Dake Gu        Log.i(TAG, "onCreate");
6871e7e67f320b23feac784b629db17b3bcce08722Dake Gu        super.onCreate(savedInstanceState);
6971e7e67f320b23feac784b629db17b3bcce08722Dake Gu
7071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.ic_title));
7171e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setTitle("Leanback Sample App");
7271e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setHeadersState(HEADERS_ENABLED);
73380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        setupRows();
7471e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnSearchClickedListener(new View.OnClickListener() {
7571e7e67f320b23feac784b629db17b3bcce08722Dake Gu            @Override
7671e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void onClick(View view) {
7771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                Intent intent = new Intent(getActivity(), SearchSupportActivity.class);
7871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                startActivity(intent);
7971e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
8071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        });
8171e7e67f320b23feac784b629db17b3bcce08722Dake Gu
8271e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnItemViewClickedListener(new ItemViewClickedListener());
8371e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
8471e7e67f320b23feac784b629db17b3bcce08722Dake Gu            @Override
8571e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
8671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    RowPresenter.ViewHolder rowViewHolder, Row row) {
8771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                Log.i(TAG, "onItemSelected: " + item + " row " + row);
8871e7e67f320b23feac784b629db17b3bcce08722Dake Gu
8971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                if (isShowingHeaders()) {
9071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    mBackgroundHelper.setBackground(getActivity(), null);
91c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                } else if (item instanceof PhotoItem) {
9271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    mBackgroundHelper.setBackground(
9371e7e67f320b23feac784b629db17b3bcce08722Dake Gu                            getActivity(), ((PhotoItem) item).getImageResourceId());
9471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                }
9571e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
9671e7e67f320b23feac784b629db17b3bcce08722Dake Gu        });
9771e7e67f320b23feac784b629db17b3bcce08722Dake Gu        if (TEST_ENTRANCE_TRANSITION) {
9871e7e67f320b23feac784b629db17b3bcce08722Dake Gu            // don't run entrance transition if fragment is restored.
9971e7e67f320b23feac784b629db17b3bcce08722Dake Gu            if (savedInstanceState == null) {
10071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                prepareEntranceTransition();
10171e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
10271e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
103380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
10471e7e67f320b23feac784b629db17b3bcce08722Dake Gu        // simulates in a real world use case  data being loaded two seconds later
10571e7e67f320b23feac784b629db17b3bcce08722Dake Gu        new Handler().postDelayed(new Runnable() {
10671e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void run() {
10771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                loadData();
10871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                startEntranceTransition();
10971e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
11071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }, 2000);
11171e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
11271e7e67f320b23feac784b629db17b3bcce08722Dake Gu
113c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    @Override
114c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    public View onCreateView(
115c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
116c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        return super.onCreateView(inflater, container, savedInstanceState);
117c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
11871e7e67f320b23feac784b629db17b3bcce08722Dake Gu
119c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    private void setupRows() {
1205635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
12171e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setAdapter(mRowsAdapter);
12271e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
12371e7e67f320b23feac784b629db17b3bcce08722Dake Gu
12471e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private void loadData() {
125c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        int i = 0;
126380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
1275635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID1, "Page Row 0")));
1285635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new DividerRow());
129380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
1305635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new SectionRow(new HeaderItem("section 0")));
131c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        for (; i < NUM_ROWS; ++i) {
1325635fbd2da9e73c8f68287626728f909565c7a8aDake Gu            mRowsAdapter.add(new ListRow(new HeaderItem(i, "Row " + i), createListRowAdapter(i)));
13371e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
13471e7e67f320b23feac784b629db17b3bcce08722Dake Gu
1355635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new DividerRow());
1365635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID2, "Page Row 1")));
137c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
138c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
139c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    private ArrayObjectAdapter createListRowAdapter(int i) {
140c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
141c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                mCardPresenter : mCardPresenter2);
142c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
143c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Hello world",
144c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_1));
145c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
146c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "This is a test",
147c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Only a test",
148c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_2));
149c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
150c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Android TV",
151c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "by Google",
152c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_3));
153c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
154c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Leanback",
155c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_4));
156c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
157c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "GuidedStep (Slide left/right)",
158c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_5));
159c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
160c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "GuidedStep (Slide bottom up)",
161c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Open GuidedStepSupportFragment",
162c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_6));
163c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
164c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Android TV",
165c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "open RowsSupportActivity",
166c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_7));
167c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
168c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Leanback",
169c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "open BrowseSupportActivity",
170c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_8));
171c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        return listRowAdapter;
17271e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
17371e7e67f320b23feac784b629db17b3bcce08722Dake Gu
17471e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private final class ItemViewClickedListener implements OnItemViewClickedListener {
17571e7e67f320b23feac784b629db17b3bcce08722Dake Gu        @Override
17671e7e67f320b23feac784b629db17b3bcce08722Dake Gu        public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
17771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                RowPresenter.ViewHolder rowViewHolder, Row row) {
17871e7e67f320b23feac784b629db17b3bcce08722Dake Gu
17971e7e67f320b23feac784b629db17b3bcce08722Dake Gu            Intent intent;
18071e7e67f320b23feac784b629db17b3bcce08722Dake Gu            Bundle bundle;
18171e7e67f320b23feac784b629db17b3bcce08722Dake Gu            if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
18271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                GuidedStepSupportFragment.add(getFragmentManager(),
18320767a171ab46addb5d50248d4267db14c0c8883susnata                        new GuidedStepSupportHalfScreenActivity.FirstStepFragment(),
184ee3c13ee552002263be40f6a5986f61c605b0bacDake Gu                        R.id.lb_guidedstep_host);
18571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                return;
18620767a171ab46addb5d50248d4267db14c0c8883susnata            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) {
18720767a171ab46addb5d50248d4267db14c0c8883susnata                GuidedStepSupportFragment.add(getFragmentManager(),
188c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                        new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
189c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                return;
190c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
19171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), BrowseSupportActivity.class);
19271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
19371e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        .toBundle();
194c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) {
19571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), RowsSupportActivity.class);
19671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
19771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        .toBundle();
19871e7e67f320b23feac784b629db17b3bcce08722Dake Gu            } else {
19971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), DetailsSupportActivity.class);
20071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item);
20171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
20271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        getActivity(),
203c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                        ((ImageCardView) itemViewHolder.view).getMainImageView(),
20471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle();
20571e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
20671e7e67f320b23feac784b629db17b3bcce08722Dake Gu            getActivity().startActivity(intent, bundle);
20771e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
20871e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
209c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
210380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    public static class PageRowFragmentFactory extends FragmentFactory {
211c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
212c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        @Override
213380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        public Fragment createFragment(Object rowObj) {
214380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            Row row = (Row) rowObj;
215380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            if (row.getHeaderItem().getId() == HEADER_ID1) {
216380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                return new SampleFragment();
217380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            } else if (row.getHeaderItem().getId() == HEADER_ID2) {
218380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                return new SampleRowsSupportFragment();
219c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            }
220380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
221380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            return null;
222c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
223c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
224c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
225380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
226c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
227380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        public PageFragmentAdapterImpl(SampleFragment fragment) {
228380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            super(fragment);
229c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            setScalingEnabled(true);
230c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
231acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu
232acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        @Override
233acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        public void setEntranceTransitionState(boolean state) {
234acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            getFragment().setEntranceTransitionState(state);
235acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        }
236c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
237c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
238380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    public static class SampleRowsSupportFragment extends RowsSupportFragment {
239c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        final CardPresenter mCardPresenter = new CardPresenter();
240c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
241c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
242380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        public SampleRowsSupportFragment() {
243380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
244380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            for (int i = 0; i < 4; i++) {
245380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i));
246380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                adapter.add(row);
247c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            }
248380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            setAdapter(adapter);
249380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
250380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            setOnItemViewClickedListener(new OnItemViewClickedListener() {
251380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                @Override
252380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                public void onItemClicked(
253380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                        Presenter.ViewHolder itemViewHolder,
254380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                        Object item,
255380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                        RowPresenter.ViewHolder rowViewHolder, Row row) {
256380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                    Intent intent = new Intent(
257380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                            itemViewHolder.view.getContext(), GuidedStepSupportActivity.class);
258380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                    startActivity(intent);
259380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                }
260380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            });
261c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
262c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
263c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        private ArrayObjectAdapter createListRowAdapter(int i) {
264c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
265c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    mCardPresenter : mCardPresenter2);
266c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
267c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Hello world",
268c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_1));
269c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
270c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "This is a test",
271c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Only a test",
272c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_2));
273c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
274c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Android TV",
275c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "by Google",
276c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_3));
277c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
278c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Leanback",
279c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_4));
280c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
281c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "GuidedStep (Slide left/right)",
282c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_5));
283c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
284c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "GuidedStep (Slide bottom up)",
285c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Open GuidedStepSupportFragment",
286c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_6));
287c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
288c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Android TV",
289c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "open RowsSupportActivity",
290c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_7));
291c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
292c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Leanback",
293c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "open BrowseSupportActivity",
294c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_8));
295c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            return listRowAdapter;
296c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
297c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
298c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
299380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    public static class SampleFragment extends Fragment implements Adaptable {
300380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
301380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this);
302c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
303acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        boolean mEntranceTransitionState = true;
304acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu
305acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        public void setEntranceTransitionState(boolean state) {
306acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            mEntranceTransitionState = state;
307acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            final View view = getView();
308acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            if (view == null) {
309acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu                return;
310acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            }
311acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            int visibility = state ? View.VISIBLE : View.INVISIBLE;
312acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            view.findViewById(R.id.tv1).setVisibility(visibility);
313acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            view.findViewById(R.id.tv2).setVisibility(visibility);
314acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            view.findViewById(R.id.tv3).setVisibility(visibility);
315acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        }
316acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu
317c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        @Override
318c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        public View onCreateView(
319380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
320380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            View view = inflater.inflate(R.layout.page_fragment, container, false);
321380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            view.findViewById(R.id.tv1).setOnClickListener(new View.OnClickListener() {
322380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                @Override
323380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                public void onClick(View view) {
324380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                    Intent intent = new Intent(inflater.getContext(), GuidedStepSupportActivity.class);
325380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                    startActivity(intent);
326380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                }
327380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            });
328380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
329380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            return view;
330380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        }
331380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
332380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        @Override
3335635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        public void onStart() {
3345635fbd2da9e73c8f68287626728f909565c7a8aDake Gu            super.onStart();
3355635fbd2da9e73c8f68287626728f909565c7a8aDake Gu            mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter);
3365635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        }
3375635fbd2da9e73c8f68287626728f909565c7a8aDake Gu
3385635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        @Override
339acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        public void onViewCreated(View view, Bundle savedInstanceState) {
340acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            setEntranceTransitionState(mEntranceTransitionState);
341acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        }
342acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu
343acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        @Override
344380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        public PageFragmentAdapterImpl getAdapter(Class clazz) {
345380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            if (clazz == MainFragmentAdapter.class) {
346380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                return mMainFragmentAdapter;
347380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            }
348380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            return null;
349c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
350c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
351c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
35271e7e67f320b23feac784b629db17b3bcce08722Dake Gu}
353380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
354