BrowseSupportFragment.java revision ac5fe7c617c66850fff75a9fce9979c6e5674b0f
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 19ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.fragment.app.Fragment; 2071e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.content.Intent; 2171e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.os.Bundle; 2271e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.os.Handler; 23ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.app.GuidedStepSupportFragment; 24ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.app.RowsSupportFragment; 25ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.ArrayObjectAdapter; 26ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.DividerRow; 27ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.HeaderItem; 28ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.ImageCardView; 29ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.ListRow; 30ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.ListRowPresenter; 31ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.OnItemViewClickedListener; 32ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.OnItemViewSelectedListener; 33ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.PageRow; 34ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.Presenter; 35ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.Row; 36ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.RowPresenter; 37ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.SectionRow; 38ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.core.app.ActivityOptionsCompat; 39ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.core.content.res.ResourcesCompat; 4071e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.util.Log; 41c578ad430b51de0151ca9b3299d84f73bb71286bsusnataimport android.view.LayoutInflater; 4271e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.view.View; 4371e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.view.ViewGroup; 4471e7e67f320b23feac784b629db17b3bcce08722Dake Gu 45ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspublic class BrowseSupportFragment extends androidx.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; 528f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata private static final long HEADER_ID3 = 1003; 5371e7e67f320b23feac784b629db17b3bcce08722Dake Gu 5471e7e67f320b23feac784b629db17b3bcce08722Dake Gu private ArrayObjectAdapter mRowsAdapter; 55181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu private BackgroundHelper mBackgroundHelper; 5671e7e67f320b23feac784b629db17b3bcce08722Dake Gu 5771e7e67f320b23feac784b629db17b3bcce08722Dake Gu // For good performance, it's important to use a single instance of 5871e7e67f320b23feac784b629db17b3bcce08722Dake Gu // a card presenter for all rows using that presenter. 5987b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu final CardPresenter mCardPresenter = new CardPresenter(); 6087b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme); 6171e7e67f320b23feac784b629db17b3bcce08722Dake Gu 62c578ad430b51de0151ca9b3299d84f73bb71286bsusnata public BrowseSupportFragment() { 63380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata getMainFragmentRegistry().registerFragment(PageRow.class, new PageRowFragmentFactory()); 64c578ad430b51de0151ca9b3299d84f73bb71286bsusnata } 65c578ad430b51de0151ca9b3299d84f73bb71286bsusnata 6671e7e67f320b23feac784b629db17b3bcce08722Dake Gu @Override 6771e7e67f320b23feac784b629db17b3bcce08722Dake Gu public void onCreate(Bundle savedInstanceState) { 6871e7e67f320b23feac784b629db17b3bcce08722Dake Gu Log.i(TAG, "onCreate"); 6971e7e67f320b23feac784b629db17b3bcce08722Dake Gu super.onCreate(savedInstanceState); 7071e7e67f320b23feac784b629db17b3bcce08722Dake Gu 71181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu mBackgroundHelper = new BackgroundHelper(getActivity()); 72181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu mBackgroundHelper.attachToWindow(); 73181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu 74b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu setBadgeDrawable(ResourcesCompat.getDrawable(getActivity().getResources(), 75b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu R.drawable.ic_title, getActivity().getTheme())); 7671e7e67f320b23feac784b629db17b3bcce08722Dake Gu setTitle("Leanback Sample App"); 7771e7e67f320b23feac784b629db17b3bcce08722Dake Gu setHeadersState(HEADERS_ENABLED); 7871e7e67f320b23feac784b629db17b3bcce08722Dake Gu setOnSearchClickedListener(new View.OnClickListener() { 7971e7e67f320b23feac784b629db17b3bcce08722Dake Gu @Override 8071e7e67f320b23feac784b629db17b3bcce08722Dake Gu public void onClick(View view) { 8171e7e67f320b23feac784b629db17b3bcce08722Dake Gu Intent intent = new Intent(getActivity(), SearchSupportActivity.class); 8271e7e67f320b23feac784b629db17b3bcce08722Dake Gu startActivity(intent); 8371e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 8471e7e67f320b23feac784b629db17b3bcce08722Dake Gu }); 8571e7e67f320b23feac784b629db17b3bcce08722Dake Gu 8671e7e67f320b23feac784b629db17b3bcce08722Dake Gu setOnItemViewClickedListener(new ItemViewClickedListener()); 8771e7e67f320b23feac784b629db17b3bcce08722Dake Gu setOnItemViewSelectedListener(new OnItemViewSelectedListener() { 8871e7e67f320b23feac784b629db17b3bcce08722Dake Gu @Override 8971e7e67f320b23feac784b629db17b3bcce08722Dake Gu public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 9071e7e67f320b23feac784b629db17b3bcce08722Dake Gu RowPresenter.ViewHolder rowViewHolder, Row row) { 9171e7e67f320b23feac784b629db17b3bcce08722Dake Gu Log.i(TAG, "onItemSelected: " + item + " row " + row); 9271e7e67f320b23feac784b629db17b3bcce08722Dake Gu 93181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu updateBackgroundToSelection(); 94181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu } 95181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu }); 96181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu setBrowseTransitionListener(new BrowseTransitionListener() { 97181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu @Override 98181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu public void onHeadersTransitionStop(boolean withHeaders) { 99181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu updateBackgroundToSelection(); 10071e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 10171e7e67f320b23feac784b629db17b3bcce08722Dake Gu }); 10271e7e67f320b23feac784b629db17b3bcce08722Dake Gu if (TEST_ENTRANCE_TRANSITION) { 10371e7e67f320b23feac784b629db17b3bcce08722Dake Gu // don't run entrance transition if fragment is restored. 10471e7e67f320b23feac784b629db17b3bcce08722Dake Gu if (savedInstanceState == null) { 10571e7e67f320b23feac784b629db17b3bcce08722Dake Gu prepareEntranceTransition(); 10671e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 10771e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 108380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata 10971e7e67f320b23feac784b629db17b3bcce08722Dake Gu // simulates in a real world use case data being loaded two seconds later 11071e7e67f320b23feac784b629db17b3bcce08722Dake Gu new Handler().postDelayed(new Runnable() { 111e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 11271e7e67f320b23feac784b629db17b3bcce08722Dake Gu public void run() { 11335d7a6c31606ed4ca38deda3cacae080a95c95c9susnata setupRows(); 11471e7e67f320b23feac784b629db17b3bcce08722Dake Gu loadData(); 11571e7e67f320b23feac784b629db17b3bcce08722Dake Gu startEntranceTransition(); 11671e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 11771e7e67f320b23feac784b629db17b3bcce08722Dake Gu }, 2000); 11871e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 11971e7e67f320b23feac784b629db17b3bcce08722Dake Gu 120c578ad430b51de0151ca9b3299d84f73bb71286bsusnata @Override 121181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu public void onStart() { 122181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu super.onStart(); 123181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu updateBackgroundToSelection(); 124181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu } 125181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu 126181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu void updateBackgroundToSelection() { 127181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu if (!isShowingHeaders()) { 128181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu RowPresenter.ViewHolder rowViewHolder = getSelectedRowViewHolder(); 129181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu Object item = rowViewHolder == null ? null : rowViewHolder.getSelectedItem(); 130181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu if (item != null) { 131181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu mBackgroundHelper.setBackground(((PhotoItem) item).getImageResourceId()); 132181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu } else { 133181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu mBackgroundHelper.clearDrawable(); 134181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu } 135181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu } else { 136181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu mBackgroundHelper.clearDrawable(); 137181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu } 138181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu } 139181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu 140181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu @Override 141c578ad430b51de0151ca9b3299d84f73bb71286bsusnata public View onCreateView( 142c578ad430b51de0151ca9b3299d84f73bb71286bsusnata LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 143c578ad430b51de0151ca9b3299d84f73bb71286bsusnata return super.onCreateView(inflater, container, savedInstanceState); 144c578ad430b51de0151ca9b3299d84f73bb71286bsusnata } 14571e7e67f320b23feac784b629db17b3bcce08722Dake Gu 146c578ad430b51de0151ca9b3299d84f73bb71286bsusnata private void setupRows() { 1474ff7f6d210b75531b3dce98f8028804f55c72051susnata ListRowPresenter listRowPresenter = new ListRowPresenter(); 14848cbca8d2f412611a09e4f231055f10573a1f45asusnata listRowPresenter.setNumRows(1); 1494ff7f6d210b75531b3dce98f8028804f55c72051susnata mRowsAdapter = new ArrayObjectAdapter(listRowPresenter); 15071e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 15171e7e67f320b23feac784b629db17b3bcce08722Dake Gu 15271e7e67f320b23feac784b629db17b3bcce08722Dake Gu private void loadData() { 153c578ad430b51de0151ca9b3299d84f73bb71286bsusnata int i = 0; 154380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata 1555635fbd2da9e73c8f68287626728f909565c7a8aDake Gu mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID1, "Page Row 0"))); 1565635fbd2da9e73c8f68287626728f909565c7a8aDake Gu mRowsAdapter.add(new DividerRow()); 157380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata 1585635fbd2da9e73c8f68287626728f909565c7a8aDake Gu mRowsAdapter.add(new SectionRow(new HeaderItem("section 0"))); 159c578ad430b51de0151ca9b3299d84f73bb71286bsusnata for (; i < NUM_ROWS; ++i) { 16048cbca8d2f412611a09e4f231055f10573a1f45asusnata HeaderItem headerItem = new HeaderItem(i, "Row " + i); 16148cbca8d2f412611a09e4f231055f10573a1f45asusnata headerItem.setDescription("Description for Row "+i); 16248cbca8d2f412611a09e4f231055f10573a1f45asusnata mRowsAdapter.add(new ListRow(headerItem, createListRowAdapter(i))); 16371e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 16471e7e67f320b23feac784b629db17b3bcce08722Dake Gu 1655635fbd2da9e73c8f68287626728f909565c7a8aDake Gu mRowsAdapter.add(new DividerRow()); 1665635fbd2da9e73c8f68287626728f909565c7a8aDake Gu mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID2, "Page Row 1"))); 1678f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata 1688f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID3, "Page Row 2"))); 16999e222d5b14544bbb89d402eb704829c642f8abfDake Gu setAdapter(mRowsAdapter); 170c578ad430b51de0151ca9b3299d84f73bb71286bsusnata } 171c578ad430b51de0151ca9b3299d84f73bb71286bsusnata 172c578ad430b51de0151ca9b3299d84f73bb71286bsusnata private ArrayObjectAdapter createListRowAdapter(int i) { 173c578ad430b51de0151ca9b3299d84f73bb71286bsusnata ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ? 174c578ad430b51de0151ca9b3299d84f73bb71286bsusnata mCardPresenter : mCardPresenter2); 175c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 176c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "Hello world", 177c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_1)); 178c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 179c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "This is a test", 180c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "Only a test", 181c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_2)); 182c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 183c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "Android TV", 184c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "by Google", 185c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_3)); 186c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 187c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "Leanback", 188c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_4)); 189c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 190c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "GuidedStep (Slide left/right)", 191c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_5)); 192c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 193c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "GuidedStep (Slide bottom up)", 194c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "Open GuidedStepSupportFragment", 195c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_6)); 196c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 197c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "Android TV", 198c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "open RowsSupportActivity", 199c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_7)); 200c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 201c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "Leanback", 202c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "open BrowseSupportActivity", 203c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_8)); 2048f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata listRowAdapter.add(new PhotoItem( 2054ff7f6d210b75531b3dce98f8028804f55c72051susnata "Hello world", 2064ff7f6d210b75531b3dce98f8028804f55c72051susnata R.drawable.gallery_photo_1)); 2074ff7f6d210b75531b3dce98f8028804f55c72051susnata listRowAdapter.add(new PhotoItem( 2084ff7f6d210b75531b3dce98f8028804f55c72051susnata "This is a test", 2094ff7f6d210b75531b3dce98f8028804f55c72051susnata "Only a test", 2104ff7f6d210b75531b3dce98f8028804f55c72051susnata R.drawable.gallery_photo_2)); 2114ff7f6d210b75531b3dce98f8028804f55c72051susnata listRowAdapter.add(new PhotoItem( 2124ff7f6d210b75531b3dce98f8028804f55c72051susnata "Android TV", 2134ff7f6d210b75531b3dce98f8028804f55c72051susnata "by Google", 2144ff7f6d210b75531b3dce98f8028804f55c72051susnata R.drawable.gallery_photo_3)); 2158f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata listRowAdapter.add(new PhotoItem( 2168f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata "Leanback", 2174ff7f6d210b75531b3dce98f8028804f55c72051susnata R.drawable.gallery_photo_4)); 218c578ad430b51de0151ca9b3299d84f73bb71286bsusnata return listRowAdapter; 21971e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 22071e7e67f320b23feac784b629db17b3bcce08722Dake Gu 22171e7e67f320b23feac784b629db17b3bcce08722Dake Gu private final class ItemViewClickedListener implements OnItemViewClickedListener { 22271e7e67f320b23feac784b629db17b3bcce08722Dake Gu @Override 22371e7e67f320b23feac784b629db17b3bcce08722Dake Gu public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, 22471e7e67f320b23feac784b629db17b3bcce08722Dake Gu RowPresenter.ViewHolder rowViewHolder, Row row) { 22571e7e67f320b23feac784b629db17b3bcce08722Dake Gu 22671e7e67f320b23feac784b629db17b3bcce08722Dake Gu Intent intent; 22771e7e67f320b23feac784b629db17b3bcce08722Dake Gu Bundle bundle; 22871e7e67f320b23feac784b629db17b3bcce08722Dake Gu if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) { 22971e7e67f320b23feac784b629db17b3bcce08722Dake Gu GuidedStepSupportFragment.add(getFragmentManager(), 23020767a171ab46addb5d50248d4267db14c0c8883susnata new GuidedStepSupportHalfScreenActivity.FirstStepFragment(), 231ee3c13ee552002263be40f6a5986f61c605b0bacDake Gu R.id.lb_guidedstep_host); 23271e7e67f320b23feac784b629db17b3bcce08722Dake Gu return; 23320767a171ab46addb5d50248d4267db14c0c8883susnata } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) { 23420767a171ab46addb5d50248d4267db14c0c8883susnata GuidedStepSupportFragment.add(getFragmentManager(), 235c578ad430b51de0151ca9b3299d84f73bb71286bsusnata new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host); 236c578ad430b51de0151ca9b3299d84f73bb71286bsusnata return; 237c578ad430b51de0151ca9b3299d84f73bb71286bsusnata } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) { 23871e7e67f320b23feac784b629db17b3bcce08722Dake Gu intent = new Intent(getActivity(), BrowseSupportActivity.class); 23971e7e67f320b23feac784b629db17b3bcce08722Dake Gu bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity()) 24071e7e67f320b23feac784b629db17b3bcce08722Dake Gu .toBundle(); 241c578ad430b51de0151ca9b3299d84f73bb71286bsusnata } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) { 24271e7e67f320b23feac784b629db17b3bcce08722Dake Gu intent = new Intent(getActivity(), RowsSupportActivity.class); 24371e7e67f320b23feac784b629db17b3bcce08722Dake Gu bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity()) 24471e7e67f320b23feac784b629db17b3bcce08722Dake Gu .toBundle(); 24571e7e67f320b23feac784b629db17b3bcce08722Dake Gu } else { 24671e7e67f320b23feac784b629db17b3bcce08722Dake Gu intent = new Intent(getActivity(), DetailsSupportActivity.class); 24771e7e67f320b23feac784b629db17b3bcce08722Dake Gu intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item); 24871e7e67f320b23feac784b629db17b3bcce08722Dake Gu bundle = ActivityOptionsCompat.makeSceneTransitionAnimation( 24971e7e67f320b23feac784b629db17b3bcce08722Dake Gu getActivity(), 250c578ad430b51de0151ca9b3299d84f73bb71286bsusnata ((ImageCardView) itemViewHolder.view).getMainImageView(), 25171e7e67f320b23feac784b629db17b3bcce08722Dake Gu DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle(); 25271e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 25371e7e67f320b23feac784b629db17b3bcce08722Dake Gu getActivity().startActivity(intent, bundle); 25471e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 25571e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 256c578ad430b51de0151ca9b3299d84f73bb71286bsusnata 257380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata public static class PageRowFragmentFactory extends FragmentFactory { 258c578ad430b51de0151ca9b3299d84f73bb71286bsusnata 259c578ad430b51de0151ca9b3299d84f73bb71286bsusnata @Override 260380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata public Fragment createFragment(Object rowObj) { 261380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata Row row = (Row) rowObj; 262380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata if (row.getHeaderItem().getId() == HEADER_ID1) { 2635f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu return new SampleRowsSupportFragment(); 264380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata } else if (row.getHeaderItem().getId() == HEADER_ID2) { 265380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata return new SampleRowsSupportFragment(); 2668f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata } else if (row.getHeaderItem().getId() == HEADER_ID3) { 2678f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata return new SampleFragment(); 268c578ad430b51de0151ca9b3299d84f73bb71286bsusnata } 269380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata 270380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata return null; 271c578ad430b51de0151ca9b3299d84f73bb71286bsusnata } 272c578ad430b51de0151ca9b3299d84f73bb71286bsusnata } 273c578ad430b51de0151ca9b3299d84f73bb71286bsusnata 274380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata public static class SampleRowsSupportFragment extends RowsSupportFragment { 275c578ad430b51de0151ca9b3299d84f73bb71286bsusnata final CardPresenter mCardPresenter = new CardPresenter(); 276c578ad430b51de0151ca9b3299d84f73bb71286bsusnata final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme); 277c578ad430b51de0151ca9b3299d84f73bb71286bsusnata 2785f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu void loadFragmentData() { 27999e222d5b14544bbb89d402eb704829c642f8abfDake Gu ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter()); 280380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata for (int i = 0; i < 4; i++) { 281380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i)); 282380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata adapter.add(row); 283c578ad430b51de0151ca9b3299d84f73bb71286bsusnata } 2845f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu if (getMainFragmentAdapter() != null) { 2855f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu getMainFragmentAdapter().getFragmentHost() 2865f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu .notifyDataReady(getMainFragmentAdapter()); 2875f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu } 28899e222d5b14544bbb89d402eb704829c642f8abfDake Gu setAdapter(adapter); 2895f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu } 2905f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu 2915f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu public SampleRowsSupportFragment() { 2925f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu // simulates late data loading: 2935f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu new Handler().postDelayed(new Runnable() { 294e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 2955f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu public void run() { 2965f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu loadFragmentData(); 2975f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu } 2985f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu }, 500); 299380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata 300380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata setOnItemViewClickedListener(new OnItemViewClickedListener() { 301380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata @Override 3024ff7f6d210b75531b3dce98f8028804f55c72051susnata public void onItemClicked( 3034ff7f6d210b75531b3dce98f8028804f55c72051susnata Presenter.ViewHolder itemViewHolder, 3044ff7f6d210b75531b3dce98f8028804f55c72051susnata Object item, 3054ff7f6d210b75531b3dce98f8028804f55c72051susnata RowPresenter.ViewHolder rowViewHolder, 3064ff7f6d210b75531b3dce98f8028804f55c72051susnata Row row) { 3078f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata Intent intent; 3088f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata Bundle bundle; 3098f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) { 3105f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu GuidedStepSupportFragment.add(getActivity().getSupportFragmentManager(), 3118f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata new GuidedStepSupportHalfScreenActivity.FirstStepFragment(), 3128f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata R.id.lb_guidedstep_host); 3138f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata return; 3148f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) { 3155f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu GuidedStepSupportFragment.add(getActivity().getSupportFragmentManager(), 3168f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host); 3178f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata return; 3188f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) { 3198f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata intent = new Intent(getActivity(), BrowseSupportActivity.class); 3208f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity()) 3218f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata .toBundle(); 3228f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) { 3238f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata intent = new Intent(getActivity(), RowsSupportActivity.class); 3248f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity()) 3258f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata .toBundle(); 3268f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata } else { 3278f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata intent = new Intent(getActivity(), DetailsSupportActivity.class); 3288f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item); 3298f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata bundle = ActivityOptionsCompat.makeSceneTransitionAnimation( 3308f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata getActivity(), 3318f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata ((ImageCardView) itemViewHolder.view).getMainImageView(), 3328f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle(); 3338f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata } 3348f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata getActivity().startActivity(intent, bundle); 335380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata } 336380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata }); 337c578ad430b51de0151ca9b3299d84f73bb71286bsusnata } 338c578ad430b51de0151ca9b3299d84f73bb71286bsusnata 339c578ad430b51de0151ca9b3299d84f73bb71286bsusnata private ArrayObjectAdapter createListRowAdapter(int i) { 340c578ad430b51de0151ca9b3299d84f73bb71286bsusnata ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ? 341c578ad430b51de0151ca9b3299d84f73bb71286bsusnata mCardPresenter : mCardPresenter2); 342c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 343c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "Hello world", 344c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_1)); 345c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 346c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "This is a test", 347c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "Only a test", 348c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_2)); 349c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 350c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "Android TV", 351c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "by Google", 352c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_3)); 353c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 354c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "Leanback", 355c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_4)); 356c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 357c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "GuidedStep (Slide left/right)", 358c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_5)); 359c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 360c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "GuidedStep (Slide bottom up)", 361c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "Open GuidedStepSupportFragment", 362c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_6)); 363c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 364c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "Android TV", 365c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "open RowsSupportActivity", 366c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_7)); 367c578ad430b51de0151ca9b3299d84f73bb71286bsusnata listRowAdapter.add(new PhotoItem( 368c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "Leanback", 369c578ad430b51de0151ca9b3299d84f73bb71286bsusnata "open BrowseSupportActivity", 370c578ad430b51de0151ca9b3299d84f73bb71286bsusnata R.drawable.gallery_photo_8)); 371c578ad430b51de0151ca9b3299d84f73bb71286bsusnata return listRowAdapter; 372c578ad430b51de0151ca9b3299d84f73bb71286bsusnata } 373c578ad430b51de0151ca9b3299d84f73bb71286bsusnata } 374c578ad430b51de0151ca9b3299d84f73bb71286bsusnata 3755f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> { 3765f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu 3775f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu public PageFragmentAdapterImpl(SampleFragment fragment) { 3785f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu super(fragment); 3795f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu setScalingEnabled(true); 3805f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu } 3815f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu 3825f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu @Override 3835f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu public void setEntranceTransitionState(boolean state) { 3845f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu getFragment().setEntranceTransitionState(state); 3855f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu } 3865f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu } 3875f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu 3888f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata public static class SampleFragment extends Fragment implements MainFragmentAdapterProvider { 389380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata 390380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this); 391c578ad430b51de0151ca9b3299d84f73bb71286bsusnata 392acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu public void setEntranceTransitionState(boolean state) { 393acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu final View view = getView(); 394acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu int visibility = state ? View.VISIBLE : View.INVISIBLE; 395acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu view.findViewById(R.id.tv1).setVisibility(visibility); 396acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu view.findViewById(R.id.tv2).setVisibility(visibility); 397acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu view.findViewById(R.id.tv3).setVisibility(visibility); 398acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu } 399acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu 400c578ad430b51de0151ca9b3299d84f73bb71286bsusnata @Override 401c578ad430b51de0151ca9b3299d84f73bb71286bsusnata public View onCreateView( 402380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 403380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata View view = inflater.inflate(R.layout.page_fragment, container, false); 404380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata view.findViewById(R.id.tv1).setOnClickListener(new View.OnClickListener() { 405380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata @Override 406380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata public void onClick(View view) { 407380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata Intent intent = new Intent(inflater.getContext(), GuidedStepSupportActivity.class); 408380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata startActivity(intent); 409380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata } 410380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata }); 411380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata 412380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata return view; 413380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata } 414380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata 415380a6d5bcb74ec69524f248d0b2edee49805b31bsusnata @Override 416aadab57a5c879a377588d7e5d21b7e8b09b94170Dake Gu public void onViewCreated(View view, Bundle savedInstanceState) { 4175f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu // static layout has view and data ready immediately 4185f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter); 4195f15bc26bec463ef6ece44e8c90d5c63988ae16bDake Gu mMainFragmentAdapter.getFragmentHost().notifyDataReady(mMainFragmentAdapter); 420acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu } 421acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu 422acccd0ab69d4c55e763b452c007aed7d14cf6654Dake Gu @Override 4238f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata public MainFragmentAdapter getMainFragmentAdapter() { 4248f94d180902da7469b67f7c47c93a3a0b9acdb3asusnata return mMainFragmentAdapter; 425c578ad430b51de0151ca9b3299d84f73bb71286bsusnata } 426c578ad430b51de0151ca9b3299d84f73bb71286bsusnata } 42771e7e67f320b23feac784b629db17b3bcce08722Dake Gu} 428