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;
22fc772efa5c0c39d7a59dba5e39f75b4977fbc017Dake Guimport android.graphics.drawable.Drawable;
23290cc49f6210525560e9d6c92fcca3789d28dd7cDake Guimport android.net.Uri;
2471e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.os.Bundle;
2571e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.os.Handler;
26def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport android.util.Log;
27def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport android.view.LayoutInflater;
28def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport android.view.View;
29def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport android.view.ViewGroup;
30def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas
31def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.core.app.ActivityOptionsCompat;
32def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.core.content.res.ResourcesCompat;
33ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.app.DetailsSupportFragmentBackgroundController;
34ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.media.MediaPlayerAdapter;
35ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.media.MediaPlayerGlue;
36ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.media.PlaybackGlue;
37ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.media.PlaybackTransportControlGlue;
38ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.Action;
39ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.ArrayObjectAdapter;
40ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.ClassPresenterSelector;
41ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.DetailsOverviewRow;
42ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.FullWidthDetailsOverviewRowPresenter;
43ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.FullWidthDetailsOverviewSharedElementHelper;
44ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.HeaderItem;
45ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.ImageCardView;
46ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.ListRow;
47ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.ListRowPresenter;
48ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.OnActionClickedListener;
49ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.OnItemViewClickedListener;
50ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.OnItemViewSelectedListener;
51ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.Presenter;
52ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.Row;
53ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.RowPresenter;
54ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.SparseArrayObjectAdapter;
5571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
56ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspublic class NewDetailsSupportFragment extends androidx.leanback.app.DetailsSupportFragment {
57290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu
5871e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final String TAG = "leanback.DetailsSupportFragment";
5971e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final String ITEM = "item";
6071e7e67f320b23feac784b629db17b3bcce08722Dake Gu
6171e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final int NUM_ROWS = 3;
6271e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private ArrayObjectAdapter mRowsAdapter;
6371e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private PhotoItem mPhotoItem;
6471e7e67f320b23feac784b629db17b3bcce08722Dake Gu    final CardPresenter cardPresenter = new CardPresenter();
6571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
6671e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final int ACTION_PLAY = 1;
6771e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final int ACTION_RENT = 2;
6871e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final int ACTION_BUY = 3;
6971e7e67f320b23feac784b629db17b3bcce08722Dake Gu
70290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu    private boolean TEST_SHARED_ELEMENT_TRANSITION = true;
715bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu    private boolean TEST_BACKGROUND_PLAYER;
7271e7e67f320b23feac784b629db17b3bcce08722Dake Gu
7371e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final long TIME_TO_LOAD_OVERVIEW_ROW_MS = 1000;
7471e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final long TIME_TO_LOAD_RELATED_ROWS_MS = 2000;
7571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
7671e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private Action mActionPlay;
7771e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private Action mActionRent;
7871e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private Action mActionBuy;
7971e7e67f320b23feac784b629db17b3bcce08722Dake Gu
8071e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private FullWidthDetailsOverviewSharedElementHelper mHelper;
81e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    private BackgroundHelper mBackgroundHelper; // used to download bitmap async.
82e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    private final DetailsSupportFragmentBackgroundController mDetailsBackground =
83e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu            new DetailsSupportFragmentBackgroundController(this);
8471e7e67f320b23feac784b629db17b3bcce08722Dake Gu
85290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu    void setupTrailerVideo() {
86290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        MediaPlayerGlue mediaPlayerGlue = new MediaPlayerGlue(getActivity());
87290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        mDetailsBackground.setupVideoPlayback(mediaPlayerGlue);
88290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        mediaPlayerGlue.setMode(MediaPlayerGlue.REPEAT_ONE);
89290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        mediaPlayerGlue.setArtist("A Googler");
90290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        mediaPlayerGlue.setTitle("Diving with Sharks Trailer");
91290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        mediaPlayerGlue.setMediaSource(Uri.parse("android.resource://com.example.android.leanback/"
92290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                + "raw/browse"));
93290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu    }
94290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu
95290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu    void setupMainVideo() {
96290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        Context context = getActivity();
97290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        MediaPlayerAdapter adapter = new MediaPlayerAdapter(context);
98290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        PlaybackTransportControlGlue<MediaPlayerAdapter> mediaPlayerGlue =
99290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                new PlaybackTransportControlGlue(context, adapter);
100290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        mDetailsBackground.setupVideoPlayback(mediaPlayerGlue);
101290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        mediaPlayerGlue.setSubtitle("A Googler");
102290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        mediaPlayerGlue.setTitle("Diving with Sharks");
103290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        mediaPlayerGlue.getPlayerAdapter().setDataSource(Uri.parse(
104290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                "https://storage.googleapis.com/android-tv/Sample videos/April Fool's "
105290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        + "2013/Explore Treasure Mode with Google Maps.mp4"));
106290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        mediaPlayerGlue.addPlayerCallback(new PlaybackGlue.PlayerCallback() {
107290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu            @Override
108290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu            public void onPreparedStateChanged(PlaybackGlue glue) {
109290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                super.onPreparedStateChanged(glue);
110290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                PlaybackTransportControlGlue controlGlue = (PlaybackTransportControlGlue) glue;
111290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                controlGlue.setSeekProvider(new PlaybackSeekDiskDataProvider(
112290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        controlGlue.getDuration(), 1000,
113290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        "/sdcard/seek/frame_%04d.jpg"));
114290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu            }
115290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        });
11671e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
11771e7e67f320b23feac784b629db17b3bcce08722Dake Gu
11871e7e67f320b23feac784b629db17b3bcce08722Dake Gu    @Override
11971e7e67f320b23feac784b629db17b3bcce08722Dake Gu    public void onCreate(Bundle savedInstanceState) {
12071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        Log.i(TAG, "onCreate");
12171e7e67f320b23feac784b629db17b3bcce08722Dake Gu        super.onCreate(savedInstanceState);
12271e7e67f320b23feac784b629db17b3bcce08722Dake Gu
123181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu        mBackgroundHelper = new BackgroundHelper(getActivity());
124e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mDetailsBackground.enableParallax();
1255bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu        if (TEST_BACKGROUND_PLAYER) {
126290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu            if (MovieData.sStatus == MovieData.STATUS_INIT) {
127290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                // not own/rented, play trailer
128290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                setupTrailerVideo();
129290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu            } else {
130290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                // bought or rented, play the main content
131290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                setupMainVideo();
132290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                // hide details main ui
133290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                mDetailsBackground.switchToVideo();
134290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu            }
1355bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu        }
136181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu
137b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu        final Context context = getActivity();
138b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu        setBadgeDrawable(ResourcesCompat.getDrawable(context.getResources(), R.drawable.ic_title,
139b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu                context.getTheme()));
14071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setTitle("Leanback Sample App");
1415bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu        if (!TEST_BACKGROUND_PLAYER) {
1425bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu            setOnSearchClickedListener(new View.OnClickListener() {
1435bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu                @Override
1445bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu                public void onClick(View view) {
1455bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu                    Intent intent = new Intent(getActivity(), SearchSupportActivity.class);
1465bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu                    startActivity(intent);
1475bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu                }
1485bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu            });
1495bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu        }
15071e7e67f320b23feac784b629db17b3bcce08722Dake Gu
15171e7e67f320b23feac784b629db17b3bcce08722Dake Gu        mActionPlay = new Action(ACTION_PLAY, "Play");
152b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu        mActionRent = new Action(ACTION_RENT, "Rent", "$3.99", ResourcesCompat.getDrawable(
153b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu                context.getResources(), R.drawable.ic_action_a, context.getTheme()));
15471e7e67f320b23feac784b629db17b3bcce08722Dake Gu        mActionBuy = new Action(ACTION_BUY, "Buy $9.99");
15571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
15671e7e67f320b23feac784b629db17b3bcce08722Dake Gu        ClassPresenterSelector ps = new ClassPresenterSelector();
15771e7e67f320b23feac784b629db17b3bcce08722Dake Gu        FullWidthDetailsOverviewRowPresenter dorPresenter =
15871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                new FullWidthDetailsOverviewRowPresenter(new DetailsDescriptionPresenter());
15971e7e67f320b23feac784b629db17b3bcce08722Dake Gu        dorPresenter.setOnActionClickedListener(new OnActionClickedListener() {
16071e7e67f320b23feac784b629db17b3bcce08722Dake Gu            @Override
16171e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void onActionClicked(Action action) {
162b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu                final Context context = getActivity();
163290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                DetailsOverviewRow dor = (DetailsOverviewRow) mRowsAdapter.get(0);
16471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                if (action.getId() == ACTION_BUY) {
16571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    // on the UI thread, we can modify actions adapter directly
16671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    SparseArrayObjectAdapter actions = (SparseArrayObjectAdapter)
16771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                            dor.getActionsAdapter();
16871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    actions.set(ACTION_PLAY, mActionPlay);
16971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    actions.clear(ACTION_RENT);
17071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    actions.clear(ACTION_BUY);
171290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    boolean previousRented = MovieData.sStatus == MovieData.STATUS_RENTED;
172290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    MovieData.sStatus = MovieData.STATUS_OWN;
173290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    dor.setItem(getDisplayTitle(mPhotoItem.getTitle()));
174b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu                    dor.setImageDrawable(ResourcesCompat.getDrawable(context.getResources(),
175b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu                            R.drawable.details_img_16x9, context.getTheme()));
176290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    if (TEST_BACKGROUND_PLAYER) {
177290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        if (!previousRented) {
178290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                            setupMainVideo();
179290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                            mDetailsBackground.switchToVideo();
180290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        }
181290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    } else {
18299e222d5b14544bbb89d402eb704829c642f8abfDake Gu                        Intent intent = new Intent(context, PlaybackActivity.class);
183290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        getActivity().startActivity(intent);
184290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    }
18571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                } else if (action.getId() == ACTION_RENT) {
18671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    // on the UI thread, we can modify actions adapter directly
18771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    SparseArrayObjectAdapter actions = (SparseArrayObjectAdapter)
18871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                            dor.getActionsAdapter();
18971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    actions.set(ACTION_PLAY, mActionPlay);
19071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    actions.clear(ACTION_RENT);
191290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    MovieData.sStatus = MovieData.STATUS_RENTED;
192290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    dor.setItem(getDisplayTitle(mPhotoItem.getTitle()));
193290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    if (TEST_BACKGROUND_PLAYER) {
194290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        setupMainVideo();
195290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        mDetailsBackground.switchToVideo();
196290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    } else {
19799e222d5b14544bbb89d402eb704829c642f8abfDake Gu                        Intent intent = new Intent(context, PlaybackActivity.class);
198290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        getActivity().startActivity(intent);
199290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    }
20071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                } else if (action.getId() == ACTION_PLAY) {
201290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    if (TEST_BACKGROUND_PLAYER) {
202290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        mDetailsBackground.switchToVideo();
203290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    } else {
20499e222d5b14544bbb89d402eb704829c642f8abfDake Gu                        Intent intent = new Intent(context, PlaybackActivity.class);
205290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        getActivity().startActivity(intent);
206290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    }
20771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                }
20871e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
20971e7e67f320b23feac784b629db17b3bcce08722Dake Gu        });
21071e7e67f320b23feac784b629db17b3bcce08722Dake Gu
21171e7e67f320b23feac784b629db17b3bcce08722Dake Gu        ps.addClassPresenter(DetailsOverviewRow.class, dorPresenter);
21271e7e67f320b23feac784b629db17b3bcce08722Dake Gu        ps.addClassPresenter(ListRow.class, new ListRowPresenter());
21371e7e67f320b23feac784b629db17b3bcce08722Dake Gu
21471e7e67f320b23feac784b629db17b3bcce08722Dake Gu        mRowsAdapter = new ArrayObjectAdapter(ps);
2155bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu        updateAdapter();
21671e7e67f320b23feac784b629db17b3bcce08722Dake Gu
21771e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnItemViewClickedListener(new OnItemViewClickedListener() {
21871e7e67f320b23feac784b629db17b3bcce08722Dake Gu            @Override
21971e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
220290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    RowPresenter.ViewHolder rowViewHolder, Row row) {
22171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                Log.i(TAG, "onItemClicked: " + item + " row " + row);
2224702556bfd15c9819a7b2af759aee0f719cd631fsusnata                if (item instanceof PhotoItem) {
22371e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    Intent intent = new Intent(getActivity(), DetailsSupportActivity.class);
22471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item);
22571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
22671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
22771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                            getActivity(),
2284702556bfd15c9819a7b2af759aee0f719cd631fsusnata                            ((ImageCardView) itemViewHolder.view).getMainImageView(),
22971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                            DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle();
23071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    getActivity().startActivity(intent, bundle);
23171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                }
23271e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
23371e7e67f320b23feac784b629db17b3bcce08722Dake Gu        });
23471e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
23571e7e67f320b23feac784b629db17b3bcce08722Dake Gu            @Override
23671e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
237290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    RowPresenter.ViewHolder rowViewHolder, Row row) {
23871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                Log.i(TAG, "onItemSelected: " + item + " row " + row);
23971e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
24071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        });
24171e7e67f320b23feac784b629db17b3bcce08722Dake Gu
24271e7e67f320b23feac784b629db17b3bcce08722Dake Gu        if (TEST_SHARED_ELEMENT_TRANSITION) {
24371e7e67f320b23feac784b629db17b3bcce08722Dake Gu            mHelper = new FullWidthDetailsOverviewSharedElementHelper();
24471e7e67f320b23feac784b629db17b3bcce08722Dake Gu            mHelper.setSharedElementEnterTransition(getActivity(),
24571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    DetailsSupportActivity.SHARED_ELEMENT_NAME);
24671e7e67f320b23feac784b629db17b3bcce08722Dake Gu            dorPresenter.setListener(mHelper);
24771e7e67f320b23feac784b629db17b3bcce08722Dake Gu            dorPresenter.setParticipatingEntranceTransition(false);
24871e7e67f320b23feac784b629db17b3bcce08722Dake Gu        } else {
24971e7e67f320b23feac784b629db17b3bcce08722Dake Gu            dorPresenter.setParticipatingEntranceTransition(true);
25071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
25171e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
25271e7e67f320b23feac784b629db17b3bcce08722Dake Gu
253181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu    @Override
254181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu    public View onCreateView(LayoutInflater inflater, ViewGroup container,
255290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu            Bundle savedInstanceState) {
256181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu        View view = super.onCreateView(inflater, container, savedInstanceState);
257181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu        return view;
258181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu    }
259181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu
2605bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu    public void setBackgroundVideo(boolean backgroundVideo) {
2615bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu        TEST_BACKGROUND_PLAYER = backgroundVideo;
2625bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu    }
2635bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu
26471e7e67f320b23feac784b629db17b3bcce08722Dake Gu    public void setItem(PhotoItem photoItem) {
26571e7e67f320b23feac784b629db17b3bcce08722Dake Gu        mPhotoItem = photoItem;
2665bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu        updateAdapter();
2675bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu    }
26871e7e67f320b23feac784b629db17b3bcce08722Dake Gu
269290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu    static String getDisplayTitle(String title) {
270290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        switch (MovieData.sStatus) {
271290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu            case MovieData.STATUS_OWN:
272290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                title = title + "(Owned)";
273290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                break;
274290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu            case MovieData.STATUS_RENTED:
275290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                title = title + "(Rented)";
276290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                break;
277290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu            case MovieData.STATUS_INIT:
278290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu            default:
279290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        }
280290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu        return title;
281290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu    }
282290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu
2835bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu    void updateAdapter() {
2845bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu        if (mRowsAdapter == null) {
2855bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu            return;
2865bcc058bb1aed2e88b38009e83084554cf2cd86bDake Gu        }
28771e7e67f320b23feac784b629db17b3bcce08722Dake Gu        mRowsAdapter.clear();
28871e7e67f320b23feac784b629db17b3bcce08722Dake Gu        new Handler().postDelayed(new Runnable() {
289e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas            @Override
29071e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void run() {
2913649f8fb98e56cbdde7e9c5806312372b20a4d23Chulwoo Lee                final Context context = getActivity();
2923649f8fb98e56cbdde7e9c5806312372b20a4d23Chulwoo Lee                if (context == null) {
2933649f8fb98e56cbdde7e9c5806312372b20a4d23Chulwoo Lee                    return;
2943649f8fb98e56cbdde7e9c5806312372b20a4d23Chulwoo Lee                }
29571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
296290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                DetailsOverviewRow dor = new DetailsOverviewRow(
297290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        getDisplayTitle(mPhotoItem.getTitle()));
298b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu                dor.setImageDrawable(ResourcesCompat.getDrawable(context.getResources(),
299b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu                        mPhotoItem.getImageResourceId(), context.getTheme()));
30071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                SparseArrayObjectAdapter adapter = new SparseArrayObjectAdapter();
301290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                switch (MovieData.sStatus) {
302290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    case MovieData.STATUS_INIT:
303290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        adapter.set(ACTION_RENT, mActionRent);
304290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        adapter.set(ACTION_BUY, mActionBuy);
305290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        break;
306290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    case MovieData.STATUS_OWN:
307290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        adapter.set(ACTION_PLAY, mActionPlay);
308290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        break;
309290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    case MovieData.STATUS_RENTED:
310290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        adapter.set(ACTION_PLAY, mActionPlay);
311290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        adapter.set(ACTION_BUY, mActionBuy);
312290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        break;
313290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                }
314fc772efa5c0c39d7a59dba5e39f75b4977fbc017Dake Gu                // one line text with icon
315fc772efa5c0c39d7a59dba5e39f75b4977fbc017Dake Gu                Drawable d = ResourcesCompat.getDrawable(context.getResources(),
316fc772efa5c0c39d7a59dba5e39f75b4977fbc017Dake Gu                        R.drawable.ic_action_a, context.getTheme());
317fc772efa5c0c39d7a59dba5e39f75b4977fbc017Dake Gu                adapter.set(202, new Action(202, "Top", null, d));
31871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                dor.setActionsAdapter(adapter);
319290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                mRowsAdapter.add(0, dor);
32071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                setSelectedPosition(0, true);
32171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                if (TEST_SHARED_ELEMENT_TRANSITION) {
32271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    if (mHelper != null && !mHelper.getAutoStartSharedElementTransition()) {
32371e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        mHelper.startPostponedEnterTransition();
32471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    }
32571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                }
32671e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
32771e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }, TIME_TO_LOAD_OVERVIEW_ROW_MS);
32871e7e67f320b23feac784b629db17b3bcce08722Dake Gu
32971e7e67f320b23feac784b629db17b3bcce08722Dake Gu        new Handler().postDelayed(new Runnable() {
330e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas            @Override
33171e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void run() {
3323649f8fb98e56cbdde7e9c5806312372b20a4d23Chulwoo Lee                if (getActivity() == null) {
3333649f8fb98e56cbdde7e9c5806312372b20a4d23Chulwoo Lee                    return;
3343649f8fb98e56cbdde7e9c5806312372b20a4d23Chulwoo Lee                }
33571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                for (int i = 0; i < NUM_ROWS; ++i) {
33671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);
33771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1));
33871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    listRowAdapter.add(new PhotoItem("This is a test", R.drawable.gallery_photo_2));
33971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    listRowAdapter.add(new PhotoItem("Android TV", R.drawable.gallery_photo_3));
34071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    listRowAdapter.add(new PhotoItem("Leanback", R.drawable.gallery_photo_4));
34171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    HeaderItem header = new HeaderItem(i, "Row " + i);
34271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    mRowsAdapter.add(new ListRow(header, listRowAdapter));
34371e7e67f320b23feac784b629db17b3bcce08722Dake Gu                }
34471e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
34571e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }, TIME_TO_LOAD_RELATED_ROWS_MS);
34671e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setAdapter(mRowsAdapter);
34771e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
34871e7e67f320b23feac784b629db17b3bcce08722Dake Gu
349935b033edfd9d03129fce6a5b7a1d3a327b74f91susnata    @Override
3504702556bfd15c9819a7b2af759aee0f719cd631fsusnata    public void onStart() {
3514702556bfd15c9819a7b2af759aee0f719cd631fsusnata        super.onStart();
3524702556bfd15c9819a7b2af759aee0f719cd631fsusnata
3530908efd712e79f77e0cf9307bd5c32753c855561Dake Gu        // Restore background drawable in onStart():
3540908efd712e79f77e0cf9307bd5c32753c855561Dake Gu        mBackgroundHelper.loadBitmap(R.drawable.spiderman,
3550908efd712e79f77e0cf9307bd5c32753c855561Dake Gu                new BackgroundHelper.BitmapLoadCallback() {
356290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    @Override
357290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    public void onBitmapLoaded(Bitmap bitmap) {
358290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                        mDetailsBackground.setCoverBitmap(bitmap);
359290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                    }
360290cc49f6210525560e9d6c92fcca3789d28dd7cDake Gu                });
361935b033edfd9d03129fce6a5b7a1d3a327b74f91susnata    }
362180dc4030628425a8081fe058bdc1d529c505ae8susnata
3634702556bfd15c9819a7b2af759aee0f719cd631fsusnata    @Override
3644702556bfd15c9819a7b2af759aee0f719cd631fsusnata    public void onStop() {
365e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mDetailsBackground.setCoverBitmap(null);
3664702556bfd15c9819a7b2af759aee0f719cd631fsusnata        super.onStop();
367180dc4030628425a8081fe058bdc1d529c505ae8susnata    }
36871e7e67f320b23feac784b629db17b3bcce08722Dake Gu}
369