NewDetailsSupportFragment.java revision 3649f8fb98e56cbdde7e9c5806312372b20a4d23
1// CHECKSTYLE:OFF Generated code
2/* This file is auto-generated from NewDetailsFragment.java.  DO NOT MODIFY. */
3
4/*
5 * Copyright (C) 2014 The Android Open Source Project
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software distributed under the License
13 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14 * or implied. See the License for the specific language governing permissions and limitations under
15 * the License.
16 */
17package com.example.android.leanback;
18
19import android.content.Context;
20import android.content.Intent;
21import android.graphics.Bitmap;
22import android.os.Build;
23import android.os.Bundle;
24import android.os.Handler;
25import android.support.v17.leanback.app.DetailsSupportFragmentBackgroundController;
26import android.support.v17.leanback.media.MediaPlayerGlue;
27import android.support.v17.leanback.widget.Action;
28import android.support.v17.leanback.widget.ArrayObjectAdapter;
29import android.support.v17.leanback.widget.ClassPresenterSelector;
30import android.support.v17.leanback.widget.DetailsOverviewRow;
31import android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter;
32import android.support.v17.leanback.widget.FullWidthDetailsOverviewSharedElementHelper;
33import android.support.v17.leanback.widget.HeaderItem;
34import android.support.v17.leanback.widget.ImageCardView;
35import android.support.v17.leanback.widget.ListRow;
36import android.support.v17.leanback.widget.ListRowPresenter;
37import android.support.v17.leanback.widget.OnActionClickedListener;
38import android.support.v17.leanback.widget.OnItemViewClickedListener;
39import android.support.v17.leanback.widget.OnItemViewSelectedListener;
40import android.support.v17.leanback.widget.Presenter;
41import android.support.v17.leanback.widget.Row;
42import android.support.v17.leanback.widget.RowPresenter;
43import android.support.v17.leanback.widget.SparseArrayObjectAdapter;
44import android.support.v4.app.ActivityOptionsCompat;
45import android.support.v4.content.res.ResourcesCompat;
46import android.util.Log;
47import android.view.LayoutInflater;
48import android.view.View;
49import android.view.ViewGroup;
50import android.widget.Toast;
51
52public class NewDetailsSupportFragment extends android.support.v17.leanback.app.DetailsSupportFragment {
53    private static final String TAG = "leanback.DetailsSupportFragment";
54    private static final String ITEM = "item";
55
56    private static final int NUM_ROWS = 3;
57    private ArrayObjectAdapter mRowsAdapter;
58    private PhotoItem mPhotoItem;
59    final CardPresenter cardPresenter = new CardPresenter();
60
61    private static final int ACTION_PLAY = 1;
62    private static final int ACTION_RENT = 2;
63    private static final int ACTION_BUY = 3;
64
65    private boolean TEST_OVERVIEW_ROW_ON_SECOND;
66    private boolean TEST_SHARED_ELEMENT_TRANSITION;
67    private boolean TEST_ENTRANCE_TRANSITION;
68    private boolean TEST_BACKGROUND_PLAYER;
69
70    private static final long TIME_TO_LOAD_OVERVIEW_ROW_MS = 1000;
71    private static final long TIME_TO_LOAD_RELATED_ROWS_MS = 2000;
72
73    private Action mActionPlay;
74    private Action mActionRent;
75    private Action mActionBuy;
76
77    private FullWidthDetailsOverviewSharedElementHelper mHelper;
78    private BackgroundHelper mBackgroundHelper; // used to download bitmap async.
79    private final DetailsSupportFragmentBackgroundController mDetailsBackground =
80            new DetailsSupportFragmentBackgroundController(this);
81
82    private void initializeTest() {
83        TEST_SHARED_ELEMENT_TRANSITION = Build.VERSION.SDK_INT >= 21
84                && null != getActivity().getWindow().getSharedElementEnterTransition();
85        TEST_OVERVIEW_ROW_ON_SECOND = !TEST_SHARED_ELEMENT_TRANSITION;
86        TEST_ENTRANCE_TRANSITION = false;
87    }
88
89    @Override
90    public void onCreate(Bundle savedInstanceState) {
91        Log.i(TAG, "onCreate");
92        super.onCreate(savedInstanceState);
93        initializeTest();
94
95        mBackgroundHelper = new BackgroundHelper(getActivity());
96        mDetailsBackground.enableParallax();
97        if (TEST_BACKGROUND_PLAYER) {
98            MediaPlayerGlue mediaPlayerGlue = new MediaPlayerGlue(getActivity());
99            mDetailsBackground.setupVideoPlayback(mediaPlayerGlue);
100
101            mediaPlayerGlue.setMode(MediaPlayerGlue.REPEAT_ALL);
102            mediaPlayerGlue.setArtist("A Googleer");
103            mediaPlayerGlue.setTitle("Diving with Sharks");
104            mediaPlayerGlue.setVideoUrl("http://techslides.com/demos/sample-videos/small.mp4");
105        }
106
107        final Context context = getActivity();
108        setBadgeDrawable(ResourcesCompat.getDrawable(context.getResources(), R.drawable.ic_title,
109                context.getTheme()));
110        setTitle("Leanback Sample App");
111        if (!TEST_BACKGROUND_PLAYER) {
112            setOnSearchClickedListener(new View.OnClickListener() {
113                @Override
114                public void onClick(View view) {
115                    Intent intent = new Intent(getActivity(), SearchSupportActivity.class);
116                    startActivity(intent);
117                }
118            });
119        }
120
121        mActionPlay = new Action(ACTION_PLAY, "Play");
122        mActionRent = new Action(ACTION_RENT, "Rent", "$3.99", ResourcesCompat.getDrawable(
123                context.getResources(), R.drawable.ic_action_a, context.getTheme()));
124        mActionBuy = new Action(ACTION_BUY, "Buy $9.99");
125
126        ClassPresenterSelector ps = new ClassPresenterSelector();
127        FullWidthDetailsOverviewRowPresenter dorPresenter =
128                new FullWidthDetailsOverviewRowPresenter(new DetailsDescriptionPresenter());
129        dorPresenter.setOnActionClickedListener(new OnActionClickedListener() {
130            @Override
131            public void onActionClicked(Action action) {
132                final Context context = getActivity();
133                Toast.makeText(context, action.toString(), Toast.LENGTH_SHORT).show();
134                int indexOfOverviewRow = TEST_OVERVIEW_ROW_ON_SECOND ? 1 : 0;
135                DetailsOverviewRow dor = (DetailsOverviewRow) mRowsAdapter.get(indexOfOverviewRow);
136                if (action.getId() == ACTION_BUY) {
137                    // on the UI thread, we can modify actions adapter directly
138                    SparseArrayObjectAdapter actions = (SparseArrayObjectAdapter)
139                            dor.getActionsAdapter();
140                    actions.set(ACTION_PLAY, mActionPlay);
141                    actions.clear(ACTION_RENT);
142                    actions.clear(ACTION_BUY);
143                    dor.setItem(mPhotoItem.getTitle() + "(Owned)");
144                    dor.setImageDrawable(ResourcesCompat.getDrawable(context.getResources(),
145                            R.drawable.details_img_16x9, context.getTheme()));
146                } else if (action.getId() == ACTION_RENT) {
147                    // on the UI thread, we can modify actions adapter directly
148                    SparseArrayObjectAdapter actions = (SparseArrayObjectAdapter)
149                            dor.getActionsAdapter();
150                    actions.set(ACTION_PLAY, mActionPlay);
151                    actions.clear(ACTION_RENT);
152                    dor.setItem(mPhotoItem.getTitle() + "(Rented)");
153                } else if (action.getId() == ACTION_PLAY) {
154                    Intent intent = new Intent(context, PlaybackOverlaySupportActivity.class);
155                    getActivity().startActivity(intent);
156                }
157            }
158        });
159        if (TEST_OVERVIEW_ROW_ON_SECOND) {
160            dorPresenter.setInitialState(FullWidthDetailsOverviewRowPresenter.STATE_SMALL);
161        }
162
163        ps.addClassPresenter(DetailsOverviewRow.class, dorPresenter);
164        ps.addClassPresenter(ListRow.class, new ListRowPresenter());
165
166        mRowsAdapter = new ArrayObjectAdapter(ps);
167        updateAdapter();
168
169        setOnItemViewClickedListener(new OnItemViewClickedListener() {
170            @Override
171            public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
172                                      RowPresenter.ViewHolder rowViewHolder, Row row) {
173                Log.i(TAG, "onItemClicked: " + item + " row " + row);
174                if (item instanceof PhotoItem) {
175                    Intent intent = new Intent(getActivity(), DetailsSupportActivity.class);
176                    intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item);
177
178                    Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
179                            getActivity(),
180                            ((ImageCardView) itemViewHolder.view).getMainImageView(),
181                            DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle();
182                    getActivity().startActivity(intent, bundle);
183                }
184            }
185        });
186        setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
187            @Override
188            public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
189                                       RowPresenter.ViewHolder rowViewHolder, Row row) {
190                Log.i(TAG, "onItemSelected: " + item + " row " + row);
191            }
192        });
193
194        if (TEST_SHARED_ELEMENT_TRANSITION) {
195            mHelper = new FullWidthDetailsOverviewSharedElementHelper();
196            mHelper.setSharedElementEnterTransition(getActivity(),
197                    DetailsSupportActivity.SHARED_ELEMENT_NAME);
198            dorPresenter.setListener(mHelper);
199            dorPresenter.setParticipatingEntranceTransition(false);
200        } else {
201            dorPresenter.setParticipatingEntranceTransition(true);
202        }
203        if (TEST_ENTRANCE_TRANSITION) {
204            // don't run entrance transition if Activity is restored.
205            if (savedInstanceState == null) {
206                prepareEntranceTransition();
207            }
208        }
209
210    }
211
212    @Override
213    public View onCreateView(LayoutInflater inflater, ViewGroup container,
214                             Bundle savedInstanceState) {
215        View view = super.onCreateView(inflater, container, savedInstanceState);
216        return view;
217    }
218
219    public void setBackgroundVideo(boolean backgroundVideo) {
220        TEST_BACKGROUND_PLAYER = backgroundVideo;
221    }
222
223    public void setItem(PhotoItem photoItem) {
224        mPhotoItem = photoItem;
225        updateAdapter();
226    }
227
228    void updateAdapter() {
229        if (mRowsAdapter == null) {
230            return;
231        }
232        mRowsAdapter.clear();
233        new Handler().postDelayed(new Runnable() {
234            @Override
235            public void run() {
236                final Context context = getActivity();
237                if (context == null) {
238                    return;
239                }
240                if (TEST_OVERVIEW_ROW_ON_SECOND) {
241                    ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);
242                    listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1));
243                    listRowAdapter.add(new PhotoItem("This is a test", R.drawable.gallery_photo_2));
244                    listRowAdapter.add(new PhotoItem("Android TV", R.drawable.gallery_photo_3));
245                    listRowAdapter.add(new PhotoItem("Leanback", R.drawable.gallery_photo_4));
246                    HeaderItem header = new HeaderItem(0, "Search Result");
247                    mRowsAdapter.add(0, new ListRow(header, listRowAdapter));
248                }
249
250                DetailsOverviewRow dor = new DetailsOverviewRow(mPhotoItem.getTitle());
251                dor.setImageDrawable(ResourcesCompat.getDrawable(context.getResources(),
252                        mPhotoItem.getImageResourceId(), context.getTheme()));
253                SparseArrayObjectAdapter adapter = new SparseArrayObjectAdapter();
254                adapter.set(ACTION_RENT, mActionRent);
255                adapter.set(ACTION_BUY, mActionBuy);
256                dor.setActionsAdapter(adapter);
257                int indexOfOverviewRow = TEST_OVERVIEW_ROW_ON_SECOND ? 1 : 0;
258                mRowsAdapter.add(indexOfOverviewRow, dor);
259                setSelectedPosition(0, true);
260                if (TEST_SHARED_ELEMENT_TRANSITION) {
261                    if (mHelper != null && !mHelper.getAutoStartSharedElementTransition()) {
262                        mHelper.startPostponedEnterTransition();
263                    }
264                }
265            }
266        }, TIME_TO_LOAD_OVERVIEW_ROW_MS);
267
268        new Handler().postDelayed(new Runnable() {
269            @Override
270            public void run() {
271                if (getActivity() == null) {
272                    return;
273                }
274                for (int i = 0; i < NUM_ROWS; ++i) {
275                    ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);
276                    listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1));
277                    listRowAdapter.add(new PhotoItem("This is a test", R.drawable.gallery_photo_2));
278                    listRowAdapter.add(new PhotoItem("Android TV", R.drawable.gallery_photo_3));
279                    listRowAdapter.add(new PhotoItem("Leanback", R.drawable.gallery_photo_4));
280                    HeaderItem header = new HeaderItem(i, "Row " + i);
281                    mRowsAdapter.add(new ListRow(header, listRowAdapter));
282                }
283                if (TEST_ENTRANCE_TRANSITION) {
284                    startEntranceTransition();
285                }
286            }
287        }, TIME_TO_LOAD_RELATED_ROWS_MS);
288        setAdapter(mRowsAdapter);
289    }
290
291    @Override
292    public void onStart() {
293        super.onStart();
294
295        // Restore background drawable in onStart():
296        mBackgroundHelper.loadBitmap(R.drawable.spiderman,
297                new BackgroundHelper.BitmapLoadCallback() {
298                @Override
299                public void onBitmapLoaded(Bitmap bitmap) {
300                    mDetailsBackground.setCoverBitmap(bitmap);
301                }
302            });
303    }
304
305    @Override
306    public void onStop() {
307        mDetailsBackground.setCoverBitmap(null);
308        super.onStop();
309    }
310}
311