1cc671dd3caac1d0cbf3f6999ab063c9ff1f297b2Dake Gu// CHECKSTYLE:OFF Generated code
271e7e67f320b23feac784b629db17b3bcce08722Dake Gu/* This file is auto-generated from BrowseFragment.java.  DO NOT MODIFY. */
371e7e67f320b23feac784b629db17b3bcce08722Dake Gu
471e7e67f320b23feac784b629db17b3bcce08722Dake Gu/*
571e7e67f320b23feac784b629db17b3bcce08722Dake Gu * Copyright (C) 2014 The Android Open Source Project
671e7e67f320b23feac784b629db17b3bcce08722Dake Gu *
771e7e67f320b23feac784b629db17b3bcce08722Dake Gu * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
871e7e67f320b23feac784b629db17b3bcce08722Dake Gu * in compliance with the License. You may obtain a copy of the License at
971e7e67f320b23feac784b629db17b3bcce08722Dake Gu *
1071e7e67f320b23feac784b629db17b3bcce08722Dake Gu * http://www.apache.org/licenses/LICENSE-2.0
1171e7e67f320b23feac784b629db17b3bcce08722Dake Gu *
1271e7e67f320b23feac784b629db17b3bcce08722Dake Gu * Unless required by applicable law or agreed to in writing, software distributed under the License
1371e7e67f320b23feac784b629db17b3bcce08722Dake Gu * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
1471e7e67f320b23feac784b629db17b3bcce08722Dake Gu * or implied. See the License for the specific language governing permissions and limitations under
1571e7e67f320b23feac784b629db17b3bcce08722Dake Gu * the License.
1671e7e67f320b23feac784b629db17b3bcce08722Dake Gu */
1771e7e67f320b23feac784b629db17b3bcce08722Dake Gupackage com.example.android.leanback;
1871e7e67f320b23feac784b629db17b3bcce08722Dake Gu
1971e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.content.Intent;
2071e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.os.Bundle;
2171e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.os.Handler;
22def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport android.util.Log;
23def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport android.view.LayoutInflater;
24def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport android.view.View;
25def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport android.view.ViewGroup;
26def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas
27def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.core.app.ActivityOptionsCompat;
28def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.core.content.res.ResourcesCompat;
29def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.fragment.app.Fragment;
30ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.app.GuidedStepSupportFragment;
31ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.app.RowsSupportFragment;
32ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.ArrayObjectAdapter;
33ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.DividerRow;
34ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.HeaderItem;
35ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.ImageCardView;
36ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.ListRow;
37ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.ListRowPresenter;
38ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.OnItemViewClickedListener;
39ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.OnItemViewSelectedListener;
40ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.PageRow;
41ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.Presenter;
42ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.Row;
43ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.RowPresenter;
44ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.SectionRow;
4571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
46ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspublic class BrowseSupportFragment extends androidx.leanback.app.BrowseSupportFragment {
4771e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final String TAG = "leanback.BrowseSupportFragment";
4871e7e67f320b23feac784b629db17b3bcce08722Dake Gu
4971e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final boolean TEST_ENTRANCE_TRANSITION = true;
50380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    private static final int NUM_ROWS = 8;
51380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    private static final long HEADER_ID1 = 1001;
52380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    private static final long HEADER_ID2 = 1002;
538f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata    private static final long HEADER_ID3 = 1003;
5471e7e67f320b23feac784b629db17b3bcce08722Dake Gu
5571e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private ArrayObjectAdapter mRowsAdapter;
56181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu    private BackgroundHelper mBackgroundHelper;
5771e7e67f320b23feac784b629db17b3bcce08722Dake Gu
5871e7e67f320b23feac784b629db17b3bcce08722Dake Gu    // For good performance, it's important to use a single instance of
5971e7e67f320b23feac784b629db17b3bcce08722Dake Gu    // a card presenter for all rows using that presenter.
6087b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu    final CardPresenter mCardPresenter = new CardPresenter();
6187b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu    final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
6271e7e67f320b23feac784b629db17b3bcce08722Dake Gu
63c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    public BrowseSupportFragment() {
64380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        getMainFragmentRegistry().registerFragment(PageRow.class, new PageRowFragmentFactory());
65c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
66c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
6771e7e67f320b23feac784b629db17b3bcce08722Dake Gu    @Override
6871e7e67f320b23feac784b629db17b3bcce08722Dake Gu    public void onCreate(Bundle savedInstanceState) {
6971e7e67f320b23feac784b629db17b3bcce08722Dake Gu        Log.i(TAG, "onCreate");
7071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        super.onCreate(savedInstanceState);
7171e7e67f320b23feac784b629db17b3bcce08722Dake Gu
72181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu        mBackgroundHelper = new BackgroundHelper(getActivity());
73181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu        mBackgroundHelper.attachToWindow();
74181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu
75b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu        setBadgeDrawable(ResourcesCompat.getDrawable(getActivity().getResources(),
76b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu                R.drawable.ic_title, getActivity().getTheme()));
7771e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setTitle("Leanback Sample App");
7871e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setHeadersState(HEADERS_ENABLED);
7971e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnSearchClickedListener(new View.OnClickListener() {
8071e7e67f320b23feac784b629db17b3bcce08722Dake Gu            @Override
8171e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void onClick(View view) {
8271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                Intent intent = new Intent(getActivity(), SearchSupportActivity.class);
8371e7e67f320b23feac784b629db17b3bcce08722Dake Gu                startActivity(intent);
8471e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
8571e7e67f320b23feac784b629db17b3bcce08722Dake Gu        });
8671e7e67f320b23feac784b629db17b3bcce08722Dake Gu
8771e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnItemViewClickedListener(new ItemViewClickedListener());
8871e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
8971e7e67f320b23feac784b629db17b3bcce08722Dake Gu            @Override
9071e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
9171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    RowPresenter.ViewHolder rowViewHolder, Row row) {
9271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                Log.i(TAG, "onItemSelected: " + item + " row " + row);
9371e7e67f320b23feac784b629db17b3bcce08722Dake Gu
94181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu                updateBackgroundToSelection();
95181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu            }
96181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu        });
97181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu        setBrowseTransitionListener(new BrowseTransitionListener() {
98181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu            @Override
99181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu            public void onHeadersTransitionStop(boolean withHeaders) {
100181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu                updateBackgroundToSelection();
10171e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
10271e7e67f320b23feac784b629db17b3bcce08722Dake Gu        });
10371e7e67f320b23feac784b629db17b3bcce08722Dake Gu        if (TEST_ENTRANCE_TRANSITION) {
10471e7e67f320b23feac784b629db17b3bcce08722Dake Gu            // don't run entrance transition if fragment is restored.
10571e7e67f320b23feac784b629db17b3bcce08722Dake Gu            if (savedInstanceState == null) {
10671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                prepareEntranceTransition();
10771e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
10871e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
109380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
11071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        // simulates in a real world use case  data being loaded two seconds later
11171e7e67f320b23feac784b629db17b3bcce08722Dake Gu        new Handler().postDelayed(new Runnable() {
112e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas            @Override
11371e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void run() {
11435d7a6c31606ed4ca38deda3cacae080a95c95c9susnata                setupRows();
11571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                loadData();
11671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                startEntranceTransition();
11771e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
11871e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }, 2000);
11971e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
12071e7e67f320b23feac784b629db17b3bcce08722Dake Gu
121c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    @Override
122181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu    public void onStart() {
123181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu        super.onStart();
124181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu        updateBackgroundToSelection();
125181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu    }
126181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu
127181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu    void updateBackgroundToSelection() {
128181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu        if (!isShowingHeaders()) {
129181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu            RowPresenter.ViewHolder rowViewHolder = getSelectedRowViewHolder();
130181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu            Object item = rowViewHolder == null ? null : rowViewHolder.getSelectedItem();
131181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu            if (item != null) {
132181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu                mBackgroundHelper.setBackground(((PhotoItem) item).getImageResourceId());
133181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu            } else {
134181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu                mBackgroundHelper.clearDrawable();
135181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu            }
136181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu        } else {
137181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu            mBackgroundHelper.clearDrawable();
138181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu        }
139181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu    }
140181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu
141181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu    @Override
142c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    public View onCreateView(
143c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
144c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        return super.onCreateView(inflater, container, savedInstanceState);
145c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
14671e7e67f320b23feac784b629db17b3bcce08722Dake Gu
147c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    private void setupRows() {
1484ff7f6d210b75531b3dce98f8028804f55c72051susnata        ListRowPresenter listRowPresenter = new ListRowPresenter();
14948cbca8d2f412611a09e4f231055f10573a1f45asusnata        listRowPresenter.setNumRows(1);
1504ff7f6d210b75531b3dce98f8028804f55c72051susnata        mRowsAdapter = new ArrayObjectAdapter(listRowPresenter);
15171e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
15271e7e67f320b23feac784b629db17b3bcce08722Dake Gu
15371e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private void loadData() {
154c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        int i = 0;
155380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
1565635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID1, "Page Row 0")));
1575635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new DividerRow());
158380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
1595635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new SectionRow(new HeaderItem("section 0")));
160c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        for (; i < NUM_ROWS; ++i) {
16148cbca8d2f412611a09e4f231055f10573a1f45asusnata            HeaderItem headerItem = new HeaderItem(i, "Row " + i);
16248cbca8d2f412611a09e4f231055f10573a1f45asusnata            headerItem.setDescription("Description for Row "+i);
16348cbca8d2f412611a09e4f231055f10573a1f45asusnata            mRowsAdapter.add(new ListRow(headerItem, createListRowAdapter(i)));
16471e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
16571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
1665635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new DividerRow());
1675635fbd2da9e73c8f68287626728f909565c7a8aDake Gu        mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID2, "Page Row 1")));
1688f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata
1698f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata        mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID3, "Page Row 2")));
17099e222d5b14544bbb89d402eb704829c642f8abfDake Gu        setAdapter(mRowsAdapter);
171c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
172c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
173c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    private ArrayObjectAdapter createListRowAdapter(int i) {
174c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
175c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                mCardPresenter : mCardPresenter2);
176c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
177c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Hello world",
178c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_1));
179c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
180c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "This is a test",
181c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Only a test",
182c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_2));
183c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
184c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Android TV",
185c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "by Google",
186c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_3));
187c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
188c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Leanback",
189c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_4));
190c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
191c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "GuidedStep (Slide left/right)",
192c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_5));
193c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
194c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "GuidedStep (Slide bottom up)",
195c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Open GuidedStepSupportFragment",
196c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_6));
197c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
198c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Android TV",
199c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "open RowsSupportActivity",
200c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_7));
201c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        listRowAdapter.add(new PhotoItem(
202c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "Leanback",
203c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                "open BrowseSupportActivity",
204c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                R.drawable.gallery_photo_8));
2058f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata        listRowAdapter.add(new PhotoItem(
2064ff7f6d210b75531b3dce98f8028804f55c72051susnata                "Hello world",
2074ff7f6d210b75531b3dce98f8028804f55c72051susnata                R.drawable.gallery_photo_1));
2084ff7f6d210b75531b3dce98f8028804f55c72051susnata        listRowAdapter.add(new PhotoItem(
2094ff7f6d210b75531b3dce98f8028804f55c72051susnata                "This is a test",
2104ff7f6d210b75531b3dce98f8028804f55c72051susnata                "Only a test",
2114ff7f6d210b75531b3dce98f8028804f55c72051susnata                R.drawable.gallery_photo_2));
2124ff7f6d210b75531b3dce98f8028804f55c72051susnata        listRowAdapter.add(new PhotoItem(
2134ff7f6d210b75531b3dce98f8028804f55c72051susnata                "Android TV",
2144ff7f6d210b75531b3dce98f8028804f55c72051susnata                "by Google",
2154ff7f6d210b75531b3dce98f8028804f55c72051susnata                R.drawable.gallery_photo_3));
2168f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata        listRowAdapter.add(new PhotoItem(
2178f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                "Leanback",
2184ff7f6d210b75531b3dce98f8028804f55c72051susnata                R.drawable.gallery_photo_4));
219c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        return listRowAdapter;
22071e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
22171e7e67f320b23feac784b629db17b3bcce08722Dake Gu
22271e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private final class ItemViewClickedListener implements OnItemViewClickedListener {
22371e7e67f320b23feac784b629db17b3bcce08722Dake Gu        @Override
22471e7e67f320b23feac784b629db17b3bcce08722Dake Gu        public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
22571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                RowPresenter.ViewHolder rowViewHolder, Row row) {
22671e7e67f320b23feac784b629db17b3bcce08722Dake Gu
22771e7e67f320b23feac784b629db17b3bcce08722Dake Gu            Intent intent;
22871e7e67f320b23feac784b629db17b3bcce08722Dake Gu            Bundle bundle;
22971e7e67f320b23feac784b629db17b3bcce08722Dake Gu            if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
23071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                GuidedStepSupportFragment.add(getFragmentManager(),
23120767a171ab46addb5d50248d4267db14c0c8883susnata                        new GuidedStepSupportHalfScreenActivity.FirstStepFragment(),
232ee3c13ee552002263be40f6a5986f61c605b0bacDake Gu                        R.id.lb_guidedstep_host);
23371e7e67f320b23feac784b629db17b3bcce08722Dake Gu                return;
23420767a171ab46addb5d50248d4267db14c0c8883susnata            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) {
23520767a171ab46addb5d50248d4267db14c0c8883susnata                GuidedStepSupportFragment.add(getFragmentManager(),
236c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                        new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
237c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                return;
238c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
23971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), BrowseSupportActivity.class);
24071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
24171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        .toBundle();
242c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) {
24371e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), RowsSupportActivity.class);
24471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
24571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        .toBundle();
24671e7e67f320b23feac784b629db17b3bcce08722Dake Gu            } else {
24771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), DetailsSupportActivity.class);
24871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item);
24971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
25071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        getActivity(),
251c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                        ((ImageCardView) itemViewHolder.view).getMainImageView(),
25271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle();
25371e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
25471e7e67f320b23feac784b629db17b3bcce08722Dake Gu            getActivity().startActivity(intent, bundle);
25571e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
25671e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
257c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
258380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    public static class PageRowFragmentFactory extends FragmentFactory {
259c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
260c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        @Override
261380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        public Fragment createFragment(Object rowObj) {
262380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            Row row = (Row) rowObj;
263380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            if (row.getHeaderItem().getId() == HEADER_ID1) {
2645f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                return new SampleRowsSupportFragment();
265380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            } else if (row.getHeaderItem().getId() == HEADER_ID2) {
266380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                return new SampleRowsSupportFragment();
2678f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata            } else if (row.getHeaderItem().getId() == HEADER_ID3) {
2688f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                return new SampleFragment();
269c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            }
270380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
271380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            return null;
272c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
273c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
274c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
275380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata    public static class SampleRowsSupportFragment extends RowsSupportFragment {
276c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        final CardPresenter mCardPresenter = new CardPresenter();
277c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
278c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
2795f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        void loadFragmentData() {
28099e222d5b14544bbb89d402eb704829c642f8abfDake Gu            ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
281380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            for (int i = 0; i < 4; i++) {
282380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i));
283380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                adapter.add(row);
284c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            }
2855f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            if (getMainFragmentAdapter() != null) {
2865f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                getMainFragmentAdapter().getFragmentHost()
2875f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                        .notifyDataReady(getMainFragmentAdapter());
2885f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            }
28999e222d5b14544bbb89d402eb704829c642f8abfDake Gu            setAdapter(adapter);
2905f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        }
2915f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu
2925f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        public SampleRowsSupportFragment() {
2935f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            // simulates late data loading:
2945f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            new Handler().postDelayed(new Runnable() {
295e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas                @Override
2965f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                public void run() {
2975f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                    loadFragmentData();
2985f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                }
2995f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            }, 500);
300380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
301380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            setOnItemViewClickedListener(new OnItemViewClickedListener() {
302380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                @Override
3034ff7f6d210b75531b3dce98f8028804f55c72051susnata                public void onItemClicked(
3044ff7f6d210b75531b3dce98f8028804f55c72051susnata                        Presenter.ViewHolder itemViewHolder,
3054ff7f6d210b75531b3dce98f8028804f55c72051susnata                        Object item,
3064ff7f6d210b75531b3dce98f8028804f55c72051susnata                        RowPresenter.ViewHolder rowViewHolder,
3074ff7f6d210b75531b3dce98f8028804f55c72051susnata                        Row row) {
3088f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    Intent intent;
3098f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    Bundle bundle;
3108f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
3115f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                        GuidedStepSupportFragment.add(getActivity().getSupportFragmentManager(),
3128f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                new GuidedStepSupportHalfScreenActivity.FirstStepFragment(),
3138f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                R.id.lb_guidedstep_host);
3148f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        return;
3158f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) {
3165f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu                        GuidedStepSupportFragment.add(getActivity().getSupportFragmentManager(),
3178f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
3188f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        return;
3198f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
3208f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        intent = new Intent(getActivity(), BrowseSupportActivity.class);
3218f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
3228f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                .toBundle();
3238f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) {
3248f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        intent = new Intent(getActivity(), RowsSupportActivity.class);
3258f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
3268f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                .toBundle();
3278f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    } else {
3288f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        intent = new Intent(getActivity(), DetailsSupportActivity.class);
3298f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item);
3308f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                        bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
3318f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                getActivity(),
3328f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                ((ImageCardView) itemViewHolder.view).getMainImageView(),
3338f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                                DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle();
3348f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    }
3358f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata                    getActivity().startActivity(intent, bundle);
336380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                }
337380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            });
338c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
339c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
340c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        private ArrayObjectAdapter createListRowAdapter(int i) {
341c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
342c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    mCardPresenter : mCardPresenter2);
343c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
344c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Hello world",
345c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_1));
346c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
347c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "This is a test",
348c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Only a test",
349c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_2));
350c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
351c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Android TV",
352c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "by Google",
353c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_3));
354c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
355c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Leanback",
356c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_4));
357c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
358c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "GuidedStep (Slide left/right)",
359c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_5));
360c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
361c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "GuidedStep (Slide bottom up)",
362c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Open GuidedStepSupportFragment",
363c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_6));
364c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
365c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Android TV",
366c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "open RowsSupportActivity",
367c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_7));
368c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            listRowAdapter.add(new PhotoItem(
369c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "Leanback",
370c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    "open BrowseSupportActivity",
371c578ad430b51de0151ca9b3299d84f73bb71286bsusnata                    R.drawable.gallery_photo_8));
372c578ad430b51de0151ca9b3299d84f73bb71286bsusnata            return listRowAdapter;
373c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
374c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
375c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
3765f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu    public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
3775f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu
3785f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        public PageFragmentAdapterImpl(SampleFragment fragment) {
3795f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            super(fragment);
3805f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            setScalingEnabled(true);
3815f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        }
3825f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu
3835f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        @Override
3845f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        public void setEntranceTransitionState(boolean state) {
3855f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            getFragment().setEntranceTransitionState(state);
3865f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu        }
3875f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu    }
3885f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu
3898f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata    public static class SampleFragment extends Fragment implements MainFragmentAdapterProvider {
390380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
391380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this);
392c578ad430b51de0151ca9b3299d84f73bb71286bsusnata
393acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        public void setEntranceTransitionState(boolean state) {
394acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            final View view = getView();
395acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            int visibility = state ? View.VISIBLE : View.INVISIBLE;
396acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            view.findViewById(R.id.tv1).setVisibility(visibility);
397acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            view.findViewById(R.id.tv2).setVisibility(visibility);
398acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu            view.findViewById(R.id.tv3).setVisibility(visibility);
399acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        }
400acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu
401c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        @Override
402c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        public View onCreateView(
403380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
404380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            View view = inflater.inflate(R.layout.page_fragment, container, false);
405380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            view.findViewById(R.id.tv1).setOnClickListener(new View.OnClickListener() {
406380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                @Override
407380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                public void onClick(View view) {
408380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                    Intent intent = new Intent(inflater.getContext(), GuidedStepSupportActivity.class);
409380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                    startActivity(intent);
410380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata                }
411380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            });
412380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
413380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata            return view;
414380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        }
415380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata
416380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata        @Override
417aadab57a5c879a377588d7e5d21b7e8b09b94170Dake Gu        public void onViewCreated(View view, Bundle savedInstanceState) {
4185f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            // static layout has view and data ready immediately
4195f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter);
4205f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu            mMainFragmentAdapter.getFragmentHost().notifyDataReady(mMainFragmentAdapter);
421acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        }
422acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu
423acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu        @Override
4248f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata        public MainFragmentAdapter getMainFragmentAdapter() {
4258f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata            return mMainFragmentAdapter;
426c578ad430b51de0151ca9b3299d84f73bb71286bsusnata        }
427c578ad430b51de0151ca9b3299d84f73bb71286bsusnata    }
42871e7e67f320b23feac784b629db17b3bcce08722Dake Gu}
429