1cc671dd3caac1d0cbf3f6999ab063c9ff1f297b2Dake Gu// CHECKSTYLE:OFF Generated code 271e7e67f320b23feac784b629db17b3bcce08722Dake Gu/* This file is auto-generated from NewDetailsFragment.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 19b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Guimport android.content.Context; 2071e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.content.Intent; 21935b033edfd9d03129fce6a5b7a1d3a327b74f91susnataimport android.graphics.Bitmap; 22290cc49f6210525560e9d6c92fcca3789d28dd7cDake Guimport android.net.Uri; 2371e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.os.Bundle; 2471e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.os.Handler; 25e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Guimport android.support.v17.leanback.app.DetailsSupportFragmentBackgroundController; 26290cc49f6210525560e9d6c92fcca3789d28dd7cDake Guimport android.support.v17.leanback.media.MediaPlayerAdapter; 2795ac470f2bbea06114a64906d95c0da7d9412db0Dake Guimport android.support.v17.leanback.media.MediaPlayerGlue; 28290cc49f6210525560e9d6c92fcca3789d28dd7cDake Guimport android.support.v17.leanback.media.PlaybackGlue; 29290cc49f6210525560e9d6c92fcca3789d28dd7cDake Guimport android.support.v17.leanback.media.PlaybackTransportControlGlue; 3071e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.Action; 3171e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ArrayObjectAdapter; 3271e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ClassPresenterSelector; 3371e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.DetailsOverviewRow; 3471e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter; 3571e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.FullWidthDetailsOverviewSharedElementHelper; 3671e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.HeaderItem; 3771e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ImageCardView; 3871e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ListRow; 3971e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ListRowPresenter; 4071e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.OnActionClickedListener; 4171e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.OnItemViewClickedListener; 4271e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.OnItemViewSelectedListener; 4371e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.Presenter; 4471e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.Row; 4571e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.RowPresenter; 4671e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.SparseArrayObjectAdapter; 473778c4eaa62895085d33965ee391c8b21783cffaDake Guimport android.support.v4.app.ActivityOptionsCompat; 48b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Guimport android.support.v4.content.res.ResourcesCompat; 4971e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.util.Log; 50181c8847d5a1169e26755ed690131333b7fff7e9Dake Guimport android.view.LayoutInflater; 5171e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.view.View; 52181c8847d5a1169e26755ed690131333b7fff7e9Dake Guimport android.view.ViewGroup; 5371e7e67f320b23feac784b629db17b3bcce08722Dake Gu 5471e7e67f320b23feac784b629db17b3bcce08722Dake Gupublic class NewDetailsSupportFragment extends android.support.v17.leanback.app.DetailsSupportFragment { 55290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu 5671e7e67f320b23feac784b629db17b3bcce08722Dake Gu private static final String TAG = "leanback.DetailsSupportFragment"; 5771e7e67f320b23feac784b629db17b3bcce08722Dake Gu private static final String ITEM = "item"; 5871e7e67f320b23feac784b629db17b3bcce08722Dake Gu 5971e7e67f320b23feac784b629db17b3bcce08722Dake Gu private static final int NUM_ROWS = 3; 6071e7e67f320b23feac784b629db17b3bcce08722Dake Gu private ArrayObjectAdapter mRowsAdapter; 6171e7e67f320b23feac784b629db17b3bcce08722Dake Gu private PhotoItem mPhotoItem; 6271e7e67f320b23feac784b629db17b3bcce08722Dake Gu final CardPresenter cardPresenter = new CardPresenter(); 6371e7e67f320b23feac784b629db17b3bcce08722Dake Gu 6471e7e67f320b23feac784b629db17b3bcce08722Dake Gu private static final int ACTION_PLAY = 1; 6571e7e67f320b23feac784b629db17b3bcce08722Dake Gu private static final int ACTION_RENT = 2; 6671e7e67f320b23feac784b629db17b3bcce08722Dake Gu private static final int ACTION_BUY = 3; 6771e7e67f320b23feac784b629db17b3bcce08722Dake Gu 68290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu private boolean TEST_SHARED_ELEMENT_TRANSITION = true; 695bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu private boolean TEST_BACKGROUND_PLAYER; 7071e7e67f320b23feac784b629db17b3bcce08722Dake Gu 7171e7e67f320b23feac784b629db17b3bcce08722Dake Gu private static final long TIME_TO_LOAD_OVERVIEW_ROW_MS = 1000; 7271e7e67f320b23feac784b629db17b3bcce08722Dake Gu private static final long TIME_TO_LOAD_RELATED_ROWS_MS = 2000; 7371e7e67f320b23feac784b629db17b3bcce08722Dake Gu 7471e7e67f320b23feac784b629db17b3bcce08722Dake Gu private Action mActionPlay; 7571e7e67f320b23feac784b629db17b3bcce08722Dake Gu private Action mActionRent; 7671e7e67f320b23feac784b629db17b3bcce08722Dake Gu private Action mActionBuy; 7771e7e67f320b23feac784b629db17b3bcce08722Dake Gu 7871e7e67f320b23feac784b629db17b3bcce08722Dake Gu private FullWidthDetailsOverviewSharedElementHelper mHelper; 79e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu private BackgroundHelper mBackgroundHelper; // used to download bitmap async. 80e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu private final DetailsSupportFragmentBackgroundController mDetailsBackground = 81e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu new DetailsSupportFragmentBackgroundController(this); 8271e7e67f320b23feac784b629db17b3bcce08722Dake Gu 83290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu void setupTrailerVideo() { 84290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu MediaPlayerGlue mediaPlayerGlue = new MediaPlayerGlue(getActivity()); 85290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mDetailsBackground.setupVideoPlayback(mediaPlayerGlue); 86290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mediaPlayerGlue.setMode(MediaPlayerGlue.REPEAT_ONE); 87290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mediaPlayerGlue.setArtist("A Googler"); 88290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mediaPlayerGlue.setTitle("Diving with Sharks Trailer"); 89290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mediaPlayerGlue.setMediaSource(Uri.parse("android.resource://com.example.android.leanback/" 90290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu + "raw/browse")); 91290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } 92290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu 93290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu void setupMainVideo() { 94290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu Context context = getActivity(); 95290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu MediaPlayerAdapter adapter = new MediaPlayerAdapter(context); 96290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu PlaybackTransportControlGlue<MediaPlayerAdapter> mediaPlayerGlue = 97290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu new PlaybackTransportControlGlue(context, adapter); 98290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mDetailsBackground.setupVideoPlayback(mediaPlayerGlue); 99290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mediaPlayerGlue.setSubtitle("A Googler"); 100290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mediaPlayerGlue.setTitle("Diving with Sharks"); 101290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mediaPlayerGlue.getPlayerAdapter().setDataSource(Uri.parse( 102290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu "https://storage.googleapis.com/android-tv/Sample videos/April Fool's " 103290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu + "2013/Explore Treasure Mode with Google Maps.mp4")); 104290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mediaPlayerGlue.addPlayerCallback(new PlaybackGlue.PlayerCallback() { 105290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu @Override 106290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu public void onPreparedStateChanged(PlaybackGlue glue) { 107290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu super.onPreparedStateChanged(glue); 108290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu PlaybackTransportControlGlue controlGlue = (PlaybackTransportControlGlue) glue; 109290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu controlGlue.setSeekProvider(new PlaybackSeekDiskDataProvider( 110290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu controlGlue.getDuration(), 1000, 111290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu "/sdcard/seek/frame_%04d.jpg")); 112290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } 113290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu }); 11471e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 11571e7e67f320b23feac784b629db17b3bcce08722Dake Gu 11671e7e67f320b23feac784b629db17b3bcce08722Dake Gu @Override 11771e7e67f320b23feac784b629db17b3bcce08722Dake Gu public void onCreate(Bundle savedInstanceState) { 11871e7e67f320b23feac784b629db17b3bcce08722Dake Gu Log.i(TAG, "onCreate"); 11971e7e67f320b23feac784b629db17b3bcce08722Dake Gu super.onCreate(savedInstanceState); 12071e7e67f320b23feac784b629db17b3bcce08722Dake Gu 121181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu mBackgroundHelper = new BackgroundHelper(getActivity()); 122e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mDetailsBackground.enableParallax(); 1235bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu if (TEST_BACKGROUND_PLAYER) { 124290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu if (MovieData.sStatus == MovieData.STATUS_INIT) { 125290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu // not own/rented, play trailer 126290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu setupTrailerVideo(); 127290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } else { 128290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu // bought or rented, play the main content 129290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu setupMainVideo(); 130290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu // hide details main ui 131290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mDetailsBackground.switchToVideo(); 132290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } 1335bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu } 134181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu 135b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu final Context context = getActivity(); 136b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu setBadgeDrawable(ResourcesCompat.getDrawable(context.getResources(), R.drawable.ic_title, 137b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu context.getTheme())); 13871e7e67f320b23feac784b629db17b3bcce08722Dake Gu setTitle("Leanback Sample App"); 1395bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu if (!TEST_BACKGROUND_PLAYER) { 1405bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu setOnSearchClickedListener(new View.OnClickListener() { 1415bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu @Override 1425bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu public void onClick(View view) { 1435bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu Intent intent = new Intent(getActivity(), SearchSupportActivity.class); 1445bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu startActivity(intent); 1455bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu } 1465bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu }); 1475bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu } 14871e7e67f320b23feac784b629db17b3bcce08722Dake Gu 14971e7e67f320b23feac784b629db17b3bcce08722Dake Gu mActionPlay = new Action(ACTION_PLAY, "Play"); 150b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu mActionRent = new Action(ACTION_RENT, "Rent", "$3.99", ResourcesCompat.getDrawable( 151b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu context.getResources(), R.drawable.ic_action_a, context.getTheme())); 15271e7e67f320b23feac784b629db17b3bcce08722Dake Gu mActionBuy = new Action(ACTION_BUY, "Buy $9.99"); 15371e7e67f320b23feac784b629db17b3bcce08722Dake Gu 15471e7e67f320b23feac784b629db17b3bcce08722Dake Gu ClassPresenterSelector ps = new ClassPresenterSelector(); 15571e7e67f320b23feac784b629db17b3bcce08722Dake Gu FullWidthDetailsOverviewRowPresenter dorPresenter = 15671e7e67f320b23feac784b629db17b3bcce08722Dake Gu new FullWidthDetailsOverviewRowPresenter(new DetailsDescriptionPresenter()); 15771e7e67f320b23feac784b629db17b3bcce08722Dake Gu dorPresenter.setOnActionClickedListener(new OnActionClickedListener() { 15871e7e67f320b23feac784b629db17b3bcce08722Dake Gu @Override 15971e7e67f320b23feac784b629db17b3bcce08722Dake Gu public void onActionClicked(Action action) { 160b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu final Context context = getActivity(); 161290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu DetailsOverviewRow dor = (DetailsOverviewRow) mRowsAdapter.get(0); 16271e7e67f320b23feac784b629db17b3bcce08722Dake Gu if (action.getId() == ACTION_BUY) { 16371e7e67f320b23feac784b629db17b3bcce08722Dake Gu // on the UI thread, we can modify actions adapter directly 16471e7e67f320b23feac784b629db17b3bcce08722Dake Gu SparseArrayObjectAdapter actions = (SparseArrayObjectAdapter) 16571e7e67f320b23feac784b629db17b3bcce08722Dake Gu dor.getActionsAdapter(); 16671e7e67f320b23feac784b629db17b3bcce08722Dake Gu actions.set(ACTION_PLAY, mActionPlay); 16771e7e67f320b23feac784b629db17b3bcce08722Dake Gu actions.clear(ACTION_RENT); 16871e7e67f320b23feac784b629db17b3bcce08722Dake Gu actions.clear(ACTION_BUY); 169290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu boolean previousRented = MovieData.sStatus == MovieData.STATUS_RENTED; 170290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu MovieData.sStatus = MovieData.STATUS_OWN; 171290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu dor.setItem(getDisplayTitle(mPhotoItem.getTitle())); 172b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu dor.setImageDrawable(ResourcesCompat.getDrawable(context.getResources(), 173b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu R.drawable.details_img_16x9, context.getTheme())); 174290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu if (TEST_BACKGROUND_PLAYER) { 175290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu if (!previousRented) { 176290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu setupMainVideo(); 177290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mDetailsBackground.switchToVideo(); 178290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } 179290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } else { 1808b0439505202fd21c595c21dded4cebebe8bfdeaDake Gu Intent intent = new Intent(context, PlaybackSupportActivity.class); 181290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu getActivity().startActivity(intent); 182290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } 18371e7e67f320b23feac784b629db17b3bcce08722Dake Gu } else if (action.getId() == ACTION_RENT) { 18471e7e67f320b23feac784b629db17b3bcce08722Dake Gu // on the UI thread, we can modify actions adapter directly 18571e7e67f320b23feac784b629db17b3bcce08722Dake Gu SparseArrayObjectAdapter actions = (SparseArrayObjectAdapter) 18671e7e67f320b23feac784b629db17b3bcce08722Dake Gu dor.getActionsAdapter(); 18771e7e67f320b23feac784b629db17b3bcce08722Dake Gu actions.set(ACTION_PLAY, mActionPlay); 18871e7e67f320b23feac784b629db17b3bcce08722Dake Gu actions.clear(ACTION_RENT); 189290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu MovieData.sStatus = MovieData.STATUS_RENTED; 190290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu dor.setItem(getDisplayTitle(mPhotoItem.getTitle())); 191290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu if (TEST_BACKGROUND_PLAYER) { 192290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu setupMainVideo(); 193290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mDetailsBackground.switchToVideo(); 194290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } else { 1958b0439505202fd21c595c21dded4cebebe8bfdeaDake Gu Intent intent = new Intent(context, PlaybackSupportActivity.class); 196290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu getActivity().startActivity(intent); 197290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } 19871e7e67f320b23feac784b629db17b3bcce08722Dake Gu } else if (action.getId() == ACTION_PLAY) { 199290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu if (TEST_BACKGROUND_PLAYER) { 200290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mDetailsBackground.switchToVideo(); 201290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } else { 2028b0439505202fd21c595c21dded4cebebe8bfdeaDake Gu Intent intent = new Intent(context, PlaybackSupportActivity.class); 203290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu getActivity().startActivity(intent); 204290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } 20571e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 20671e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 20771e7e67f320b23feac784b629db17b3bcce08722Dake Gu }); 20871e7e67f320b23feac784b629db17b3bcce08722Dake Gu 20971e7e67f320b23feac784b629db17b3bcce08722Dake Gu ps.addClassPresenter(DetailsOverviewRow.class, dorPresenter); 21071e7e67f320b23feac784b629db17b3bcce08722Dake Gu ps.addClassPresenter(ListRow.class, new ListRowPresenter()); 21171e7e67f320b23feac784b629db17b3bcce08722Dake Gu 21271e7e67f320b23feac784b629db17b3bcce08722Dake Gu mRowsAdapter = new ArrayObjectAdapter(ps); 2135bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu updateAdapter(); 21471e7e67f320b23feac784b629db17b3bcce08722Dake Gu 21571e7e67f320b23feac784b629db17b3bcce08722Dake Gu setOnItemViewClickedListener(new OnItemViewClickedListener() { 21671e7e67f320b23feac784b629db17b3bcce08722Dake Gu @Override 21771e7e67f320b23feac784b629db17b3bcce08722Dake Gu public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, 218290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu RowPresenter.ViewHolder rowViewHolder, Row row) { 21971e7e67f320b23feac784b629db17b3bcce08722Dake Gu Log.i(TAG, "onItemClicked: " + item + " row " + row); 2204702556bfd15c9819a7b2af759aee0f719cd631fsusnata if (item instanceof PhotoItem) { 22171e7e67f320b23feac784b629db17b3bcce08722Dake Gu Intent intent = new Intent(getActivity(), DetailsSupportActivity.class); 22271e7e67f320b23feac784b629db17b3bcce08722Dake Gu intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item); 22371e7e67f320b23feac784b629db17b3bcce08722Dake Gu 22471e7e67f320b23feac784b629db17b3bcce08722Dake Gu Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation( 22571e7e67f320b23feac784b629db17b3bcce08722Dake Gu getActivity(), 2264702556bfd15c9819a7b2af759aee0f719cd631fsusnata ((ImageCardView) itemViewHolder.view).getMainImageView(), 22771e7e67f320b23feac784b629db17b3bcce08722Dake Gu DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle(); 22871e7e67f320b23feac784b629db17b3bcce08722Dake Gu getActivity().startActivity(intent, bundle); 22971e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 23071e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 23171e7e67f320b23feac784b629db17b3bcce08722Dake Gu }); 23271e7e67f320b23feac784b629db17b3bcce08722Dake Gu setOnItemViewSelectedListener(new OnItemViewSelectedListener() { 23371e7e67f320b23feac784b629db17b3bcce08722Dake Gu @Override 23471e7e67f320b23feac784b629db17b3bcce08722Dake Gu public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 235290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu RowPresenter.ViewHolder rowViewHolder, Row row) { 23671e7e67f320b23feac784b629db17b3bcce08722Dake Gu Log.i(TAG, "onItemSelected: " + item + " row " + row); 23771e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 23871e7e67f320b23feac784b629db17b3bcce08722Dake Gu }); 23971e7e67f320b23feac784b629db17b3bcce08722Dake Gu 24071e7e67f320b23feac784b629db17b3bcce08722Dake Gu if (TEST_SHARED_ELEMENT_TRANSITION) { 24171e7e67f320b23feac784b629db17b3bcce08722Dake Gu mHelper = new FullWidthDetailsOverviewSharedElementHelper(); 24271e7e67f320b23feac784b629db17b3bcce08722Dake Gu mHelper.setSharedElementEnterTransition(getActivity(), 24371e7e67f320b23feac784b629db17b3bcce08722Dake Gu DetailsSupportActivity.SHARED_ELEMENT_NAME); 24471e7e67f320b23feac784b629db17b3bcce08722Dake Gu dorPresenter.setListener(mHelper); 24571e7e67f320b23feac784b629db17b3bcce08722Dake Gu dorPresenter.setParticipatingEntranceTransition(false); 24671e7e67f320b23feac784b629db17b3bcce08722Dake Gu } else { 24771e7e67f320b23feac784b629db17b3bcce08722Dake Gu dorPresenter.setParticipatingEntranceTransition(true); 24871e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 24971e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 25071e7e67f320b23feac784b629db17b3bcce08722Dake Gu 251181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu @Override 252181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu public View onCreateView(LayoutInflater inflater, ViewGroup container, 253290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu Bundle savedInstanceState) { 254181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu View view = super.onCreateView(inflater, container, savedInstanceState); 255181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu return view; 256181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu } 257181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu 2585bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu public void setBackgroundVideo(boolean backgroundVideo) { 2595bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu TEST_BACKGROUND_PLAYER = backgroundVideo; 2605bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu } 2615bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu 26271e7e67f320b23feac784b629db17b3bcce08722Dake Gu public void setItem(PhotoItem photoItem) { 26371e7e67f320b23feac784b629db17b3bcce08722Dake Gu mPhotoItem = photoItem; 2645bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu updateAdapter(); 2655bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu } 26671e7e67f320b23feac784b629db17b3bcce08722Dake Gu 267290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu static String getDisplayTitle(String title) { 268290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu switch (MovieData.sStatus) { 269290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu case MovieData.STATUS_OWN: 270290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu title = title + "(Owned)"; 271290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu break; 272290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu case MovieData.STATUS_RENTED: 273290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu title = title + "(Rented)"; 274290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu break; 275290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu case MovieData.STATUS_INIT: 276290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu default: 277290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } 278290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu return title; 279290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } 280290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu 2815bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu void updateAdapter() { 2825bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu if (mRowsAdapter == null) { 2835bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu return; 2845bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu } 28571e7e67f320b23feac784b629db17b3bcce08722Dake Gu mRowsAdapter.clear(); 28671e7e67f320b23feac784b629db17b3bcce08722Dake Gu new Handler().postDelayed(new Runnable() { 287e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 28871e7e67f320b23feac784b629db17b3bcce08722Dake Gu public void run() { 2893649f8fb98e56cbdde7e9c5806312372b20a4d23Chulwoo Lee final Context context = getActivity(); 2903649f8fb98e56cbdde7e9c5806312372b20a4d23Chulwoo Lee if (context == null) { 2913649f8fb98e56cbdde7e9c5806312372b20a4d23Chulwoo Lee return; 2923649f8fb98e56cbdde7e9c5806312372b20a4d23Chulwoo Lee } 29371e7e67f320b23feac784b629db17b3bcce08722Dake Gu 294290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu DetailsOverviewRow dor = new DetailsOverviewRow( 295290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu getDisplayTitle(mPhotoItem.getTitle())); 296b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu dor.setImageDrawable(ResourcesCompat.getDrawable(context.getResources(), 297b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu mPhotoItem.getImageResourceId(), context.getTheme())); 29871e7e67f320b23feac784b629db17b3bcce08722Dake Gu SparseArrayObjectAdapter adapter = new SparseArrayObjectAdapter(); 299290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu switch (MovieData.sStatus) { 300290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu case MovieData.STATUS_INIT: 301290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu adapter.set(ACTION_RENT, mActionRent); 302290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu adapter.set(ACTION_BUY, mActionBuy); 303290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu break; 304290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu case MovieData.STATUS_OWN: 305290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu adapter.set(ACTION_PLAY, mActionPlay); 306290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu break; 307290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu case MovieData.STATUS_RENTED: 308290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu adapter.set(ACTION_PLAY, mActionPlay); 309290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu adapter.set(ACTION_BUY, mActionBuy); 310290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu break; 311290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } 31271e7e67f320b23feac784b629db17b3bcce08722Dake Gu dor.setActionsAdapter(adapter); 313290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mRowsAdapter.add(0, dor); 31471e7e67f320b23feac784b629db17b3bcce08722Dake Gu setSelectedPosition(0, true); 31571e7e67f320b23feac784b629db17b3bcce08722Dake Gu if (TEST_SHARED_ELEMENT_TRANSITION) { 31671e7e67f320b23feac784b629db17b3bcce08722Dake Gu if (mHelper != null && !mHelper.getAutoStartSharedElementTransition()) { 31771e7e67f320b23feac784b629db17b3bcce08722Dake Gu mHelper.startPostponedEnterTransition(); 31871e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 31971e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 32071e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 32171e7e67f320b23feac784b629db17b3bcce08722Dake Gu }, TIME_TO_LOAD_OVERVIEW_ROW_MS); 32271e7e67f320b23feac784b629db17b3bcce08722Dake Gu 32371e7e67f320b23feac784b629db17b3bcce08722Dake Gu new Handler().postDelayed(new Runnable() { 324e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 32571e7e67f320b23feac784b629db17b3bcce08722Dake Gu public void run() { 3263649f8fb98e56cbdde7e9c5806312372b20a4d23Chulwoo Lee if (getActivity() == null) { 3273649f8fb98e56cbdde7e9c5806312372b20a4d23Chulwoo Lee return; 3283649f8fb98e56cbdde7e9c5806312372b20a4d23Chulwoo Lee } 32971e7e67f320b23feac784b629db17b3bcce08722Dake Gu for (int i = 0; i < NUM_ROWS; ++i) { 33071e7e67f320b23feac784b629db17b3bcce08722Dake Gu ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter); 33171e7e67f320b23feac784b629db17b3bcce08722Dake Gu listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1)); 33271e7e67f320b23feac784b629db17b3bcce08722Dake Gu listRowAdapter.add(new PhotoItem("This is a test", R.drawable.gallery_photo_2)); 33371e7e67f320b23feac784b629db17b3bcce08722Dake Gu listRowAdapter.add(new PhotoItem("Android TV", R.drawable.gallery_photo_3)); 33471e7e67f320b23feac784b629db17b3bcce08722Dake Gu listRowAdapter.add(new PhotoItem("Leanback", R.drawable.gallery_photo_4)); 33571e7e67f320b23feac784b629db17b3bcce08722Dake Gu HeaderItem header = new HeaderItem(i, "Row " + i); 33671e7e67f320b23feac784b629db17b3bcce08722Dake Gu mRowsAdapter.add(new ListRow(header, listRowAdapter)); 33771e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 33871e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 33971e7e67f320b23feac784b629db17b3bcce08722Dake Gu }, TIME_TO_LOAD_RELATED_ROWS_MS); 34071e7e67f320b23feac784b629db17b3bcce08722Dake Gu setAdapter(mRowsAdapter); 34171e7e67f320b23feac784b629db17b3bcce08722Dake Gu } 34271e7e67f320b23feac784b629db17b3bcce08722Dake Gu 343935b033edfd9d03129fce6a5b7a1d3a327b74f91susnata @Override 3444702556bfd15c9819a7b2af759aee0f719cd631fsusnata public void onStart() { 3454702556bfd15c9819a7b2af759aee0f719cd631fsusnata super.onStart(); 3464702556bfd15c9819a7b2af759aee0f719cd631fsusnata 3470908efd712e79f77e0cf9307bd5c32753c855561Dake Gu // Restore background drawable in onStart(): 3480908efd712e79f77e0cf9307bd5c32753c855561Dake Gu mBackgroundHelper.loadBitmap(R.drawable.spiderman, 3490908efd712e79f77e0cf9307bd5c32753c855561Dake Gu new BackgroundHelper.BitmapLoadCallback() { 350290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu @Override 351290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu public void onBitmapLoaded(Bitmap bitmap) { 352290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu mDetailsBackground.setCoverBitmap(bitmap); 353290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu } 354290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu }); 355935b033edfd9d03129fce6a5b7a1d3a327b74f91susnata } 356180dc4030628425a8081fe058bdc1d529c505ae8susnata 3574702556bfd15c9819a7b2af759aee0f719cd631fsusnata @Override 3584702556bfd15c9819a7b2af759aee0f719cd631fsusnata public void onStop() { 359e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mDetailsBackground.setCoverBitmap(null); 3604702556bfd15c9819a7b2af759aee0f719cd631fsusnata super.onStop(); 361180dc4030628425a8081fe058bdc1d529c505ae8susnata } 36271e7e67f320b23feac784b629db17b3bcce08722Dake Gu} 363