BrowseSupportFragment.java revision acccd0ab69d4c55e763b452c007aed7d14cf6654
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;
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;
33c578ad430b51de0151ca9b3299d84f73bb71286bsusnataimport android.support.v17.leanback.widget.PageRowPresenter;
3471e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.Presenter;
35c578ad430b51de0151ca9b3299d84f73bb71286bsusnataimport android.support.v17.leanback.widget.PresenterSelector;
3671e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.Row;
3771e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.RowPresenter;
3820767a171ab46addb5d50248d4267db14c0c8883susnataimport android.support.v4.app.ActivityOptionsCompat;
3971e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.util.Log;
40c578ad430b51de0151ca9b3299d84f73bb71286bsusnataimport android.view.LayoutInflater;
4171e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.view.View;
4271e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.view.ViewGroup;
4371e7e67f320b23feac784b629db17b3bcce08722Dake Gu
4471e7e67f320b23feac784b629db17b3bcce08722Dake Gupublic class BrowseSupportFragment extends android.support.v17.leanback.app.BrowseSupportFragment {
4571e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final String TAG = "leanback.BrowseSupportFragment";
4671e7e67f320b23feac784b629db17b3bcce08722Dake Gu
4771e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final boolean TEST_ENTRANCE_TRANSITION = true;
48380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    private static final int NUM_ROWS = 8;
49380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    private static final long HEADER_ID1 = 1001;
50380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    private static final long HEADER_ID2 = 1002;
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);
72380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        setupRows();
7371e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnSearchClickedListener(new View.OnClickListener() {
7471e7e67f320b23feac784b629db17b3bcce08722Dake Gu            @Override
7571e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void onClick(View view) {
7671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                Intent intent = new Intent(getActivity(), SearchSupportActivity.class);
7771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                startActivity(intent);
7871e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
7971e7e67f320b23feac784b629db17b3bcce08722Dake Gu        });
8071e7e67f320b23feac784b629db17b3bcce08722Dake Gu
8171e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnItemViewClickedListener(new ItemViewClickedListener());
8271e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
8371e7e67f320b23feac784b629db17b3bcce08722Dake Gu            @Override
8471e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
8571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    RowPresenter.ViewHolder rowViewHolder, Row row) {
8671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                Log.i(TAG, "onItemSelected: " + item + " row " + row);
8771e7e67f320b23feac784b629db17b3bcce08722Dake Gu
8871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                if (isShowingHeaders()) {
8971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    mBackgroundHelper.setBackground(getActivity(), null);
90c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                } else if (item instanceof PhotoItem) {
9171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    mBackgroundHelper.setBackground(
9271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                            getActivity(), ((PhotoItem) item).getImageResourceId());
9371e7e67f320b23feac784b629db17b3bcce08722Dake Gu                }
9471e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
9571e7e67f320b23feac784b629db17b3bcce08722Dake Gu        });
9671e7e67f320b23feac784b629db17b3bcce08722Dake Gu        if (TEST_ENTRANCE_TRANSITION) {
9771e7e67f320b23feac784b629db17b3bcce08722Dake Gu            // don't run entrance transition if fragment is restored.
9871e7e67f320b23feac784b629db17b3bcce08722Dake Gu            if (savedInstanceState == null) {
9971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                prepareEntranceTransition();
10071e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
10171e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
102380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
10371e7e67f320b23feac784b629db17b3bcce08722Dake Gu        // simulates in a real world use case  data being loaded two seconds later
10471e7e67f320b23feac784b629db17b3bcce08722Dake Gu        new Handler().postDelayed(new Runnable() {
10571e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void run() {
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() {
119c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        mRowsAdapter = new ArrayObjectAdapter(new MyPresenterSelector());
12071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setAdapter(mRowsAdapter);
12171e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
12271e7e67f320b23feac784b629db17b3bcce08722Dake Gu
12371e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private void loadData() {
124c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        int i = 0;
125380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
126380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        HeaderItem header = new HeaderItem(HEADER_ID1, "Page Row " + 0);
127380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        mRowsAdapter.add(new PageRow(header));
128380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
129c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        for (; i < NUM_ROWS; ++i) {
130380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            header = new HeaderItem(i, "Row " + i);
131c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            mRowsAdapter.add(new ListRow(header, createListRowAdapter(i)));
13271e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
13371e7e67f320b23feac784b629db17b3bcce08722Dake Gu
134380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        header = new HeaderItem(HEADER_ID2, "Page Row " + 1);
135c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        mRowsAdapter.add(new PageRow(header));
136c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
137c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
138c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    private ArrayObjectAdapter createListRowAdapter(int i) {
139c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
140c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                mCardPresenter : mCardPresenter2);
141c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
142c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Hello world",
143c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_1));
144c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
145c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "This is a test",
146c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Only a test",
147c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_2));
148c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
149c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Android TV",
150c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "by Google",
151c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_3));
152c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
153c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Leanback",
154c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_4));
155c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
156c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "GuidedStep (Slide left/right)",
157c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_5));
158c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
159c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "GuidedStep (Slide bottom up)",
160c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Open GuidedStepSupportFragment",
161c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_6));
162c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
163c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Android TV",
164c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "open RowsSupportActivity",
165c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_7));
166c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
167c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Leanback",
168c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "open BrowseSupportActivity",
169c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_8));
170c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        return listRowAdapter;
17171e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
17271e7e67f320b23feac784b629db17b3bcce08722Dake Gu
17371e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private final class ItemViewClickedListener implements OnItemViewClickedListener {
17471e7e67f320b23feac784b629db17b3bcce08722Dake Gu        @Override
17571e7e67f320b23feac784b629db17b3bcce08722Dake Gu        public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
17671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                RowPresenter.ViewHolder rowViewHolder, Row row) {
17771e7e67f320b23feac784b629db17b3bcce08722Dake Gu
17871e7e67f320b23feac784b629db17b3bcce08722Dake Gu            Intent intent;
17971e7e67f320b23feac784b629db17b3bcce08722Dake Gu            Bundle bundle;
18071e7e67f320b23feac784b629db17b3bcce08722Dake Gu            if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
18171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                GuidedStepSupportFragment.add(getFragmentManager(),
18220767a171ab46addb5d50248d4267db14c0c8883susnata                        new GuidedStepSupportHalfScreenActivity.FirstStepFragment(),
183ee3c13ee552002263be40f6a5986f61c605b0bacDake Gu                        R.id.lb_guidedstep_host);
18471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                return;
18520767a171ab46addb5d50248d4267db14c0c8883susnata            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) {
18620767a171ab46addb5d50248d4267db14c0c8883susnata                GuidedStepSupportFragment.add(getFragmentManager(),
187c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                        new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
188c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                return;
189c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
19071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), BrowseSupportActivity.class);
19171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
19271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        .toBundle();
193c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) {
19471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), RowsSupportActivity.class);
19571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
19671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        .toBundle();
19771e7e67f320b23feac784b629db17b3bcce08722Dake Gu            } else {
19871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), DetailsSupportActivity.class);
19971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item);
20071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
20171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        getActivity(),
202c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                        ((ImageCardView) itemViewHolder.view).getMainImageView(),
20371e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle();
20471e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
20571e7e67f320b23feac784b629db17b3bcce08722Dake Gu            getActivity().startActivity(intent, bundle);
20671e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
20771e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
208c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
209380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    public static class PageRowFragmentFactory extends FragmentFactory {
210c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
211c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        @Override
212380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        public Fragment createFragment(Object rowObj) {
213380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            Row row = (Row) rowObj;
214380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            if (row.getHeaderItem().getId() == HEADER_ID1) {
215380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                return new SampleFragment();
216380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            } else if (row.getHeaderItem().getId() == HEADER_ID2) {
217380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                return new SampleRowsSupportFragment();
218c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            }
219380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
220380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            return null;
221c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
222c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
223c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
224380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
225c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
226380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        public PageFragmentAdapterImpl(SampleFragment fragment) {
227380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            super(fragment);
228c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            setScalingEnabled(true);
229c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
230acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu
231acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        @Override
232acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        public void setEntranceTransitionState(boolean state) {
233acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            getFragment().setEntranceTransitionState(state);
234acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        }
235c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
236c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
237380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    public static class SampleRowsSupportFragment extends RowsSupportFragment {
238c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        final CardPresenter mCardPresenter = new CardPresenter();
239c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
240c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
241380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        public SampleRowsSupportFragment() {
242380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
243380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            for (int i = 0; i < 4; i++) {
244380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i));
245380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                adapter.add(row);
246c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            }
247380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            setAdapter(adapter);
248380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
249380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            setOnItemViewClickedListener(new OnItemViewClickedListener() {
250380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                @Override
251380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                public void onItemClicked(
252380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                        Presenter.ViewHolder itemViewHolder,
253380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                        Object item,
254380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                        RowPresenter.ViewHolder rowViewHolder, Row row) {
255380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                    Intent intent = new Intent(
256380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                            itemViewHolder.view.getContext(), GuidedStepSupportActivity.class);
257380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                    startActivity(intent);
258380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                }
259380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            });
260c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
261c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
262c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        private ArrayObjectAdapter createListRowAdapter(int i) {
263c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
264c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    mCardPresenter : mCardPresenter2);
265c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
266c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Hello world",
267c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_1));
268c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
269c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "This is a test",
270c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Only a test",
271c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_2));
272c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
273c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Android TV",
274c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "by Google",
275c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_3));
276c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
277c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Leanback",
278c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_4));
279c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
280c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "GuidedStep (Slide left/right)",
281c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_5));
282c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
283c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "GuidedStep (Slide bottom up)",
284c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Open GuidedStepSupportFragment",
285c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_6));
286c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
287c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Android TV",
288c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "open RowsSupportActivity",
289c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_7));
290c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
291c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Leanback",
292c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "open BrowseSupportActivity",
293c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_8));
294c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            return listRowAdapter;
295c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
296c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
297c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
298380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    public static class SampleFragment extends Fragment implements Adaptable {
299380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
300380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this);
301c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
302acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        boolean mEntranceTransitionState = true;
303acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu
304acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        public void setEntranceTransitionState(boolean state) {
305acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            mEntranceTransitionState = state;
306acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            final View view = getView();
307acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            if (view == null) {
308acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu                return;
309acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            }
310acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            int visibility = state ? View.VISIBLE : View.INVISIBLE;
311acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            view.findViewById(R.id.tv1).setVisibility(visibility);
312acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            view.findViewById(R.id.tv2).setVisibility(visibility);
313acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            view.findViewById(R.id.tv3).setVisibility(visibility);
314acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        }
315acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu
316c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        @Override
317c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        public View onCreateView(
318380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
319380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            View view = inflater.inflate(R.layout.page_fragment, container, false);
320380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            view.findViewById(R.id.tv1).setOnClickListener(new View.OnClickListener() {
321380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                @Override
322380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                public void onClick(View view) {
323380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                    Intent intent = new Intent(inflater.getContext(), GuidedStepSupportActivity.class);
324380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                    startActivity(intent);
325380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                }
326380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            });
327380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
328380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            return view;
329380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        }
330380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
331380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        @Override
332acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        public void onViewCreated(View view, Bundle savedInstanceState) {
333acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            setEntranceTransitionState(mEntranceTransitionState);
334acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        }
335acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu
336acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        @Override
337380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        public PageFragmentAdapterImpl getAdapter(Class clazz) {
338380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            if (clazz == MainFragmentAdapter.class) {
339380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                return mMainFragmentAdapter;
340380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            }
341380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            return null;
342c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
343c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
344c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
345c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    private static class MyPresenterSelector extends PresenterSelector {
346c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        private Presenter[] presenters = {
347c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                new ListRowPresenter(),
348c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                new PageRowPresenter()
349c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        };
350c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
351c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        @Override
352c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        public Presenter getPresenter(Object item) {
353c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            if (item instanceof PageRow) {
354c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                return presenters[1];
355c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            }
356c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            return presenters[0];
357c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
358c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
359c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        @Override
360c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        public Presenter[] getPresenters() {
361c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            return presenters;
362c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
363c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
36471e7e67f320b23feac784b629db17b3bcce08722Dake Gu}
365380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
366