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