BrowseSupportFragment.java revision 87b904ffa106f12f2fecfe8b9a46084863678f29
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
1871e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.content.Intent;
1971e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.os.Bundle;
2071e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.os.Handler;
2171e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v4.app.ActivityOptionsCompat;
2271e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.app.GuidedStepSupportFragment;
2371e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ArrayObjectAdapter;
2471e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.HeaderItem;
2571e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ImageCardView;
2671e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ListRow;
2771e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.ListRowPresenter;
2871e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.OnItemViewClickedListener;
2971e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.OnItemViewSelectedListener;
3071e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.Presenter;
3171e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.Row;
3271e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.support.v17.leanback.widget.RowPresenter;
3371e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.util.Log;
3471e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.view.View;
3571e7e67f320b23feac784b629db17b3bcce08722Dake Guimport android.view.ViewGroup;
3671e7e67f320b23feac784b629db17b3bcce08722Dake Gu
3771e7e67f320b23feac784b629db17b3bcce08722Dake Gupublic class BrowseSupportFragment extends android.support.v17.leanback.app.BrowseSupportFragment {
3871e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final String TAG = "leanback.BrowseSupportFragment";
3971e7e67f320b23feac784b629db17b3bcce08722Dake Gu
4071e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final boolean TEST_ENTRANCE_TRANSITION = true;
4171e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private static final int NUM_ROWS = 10;
4271e7e67f320b23feac784b629db17b3bcce08722Dake Gu
4371e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private ArrayObjectAdapter mRowsAdapter;
4471e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private BackgroundHelper mBackgroundHelper = new BackgroundHelper();
4571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
4671e7e67f320b23feac784b629db17b3bcce08722Dake Gu    // For good performance, it's important to use a single instance of
4771e7e67f320b23feac784b629db17b3bcce08722Dake Gu    // a card presenter for all rows using that presenter.
4887b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu    final CardPresenter mCardPresenter = new CardPresenter();
4987b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu    final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
5071e7e67f320b23feac784b629db17b3bcce08722Dake Gu
5171e7e67f320b23feac784b629db17b3bcce08722Dake Gu    @Override
5271e7e67f320b23feac784b629db17b3bcce08722Dake Gu    public void onCreate(Bundle savedInstanceState) {
5371e7e67f320b23feac784b629db17b3bcce08722Dake Gu        Log.i(TAG, "onCreate");
5471e7e67f320b23feac784b629db17b3bcce08722Dake Gu        super.onCreate(savedInstanceState);
5571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
5671e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.ic_title));
5771e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setTitle("Leanback Sample App");
5871e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setHeadersState(HEADERS_ENABLED);
5971e7e67f320b23feac784b629db17b3bcce08722Dake Gu
6071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnSearchClickedListener(new View.OnClickListener() {
6171e7e67f320b23feac784b629db17b3bcce08722Dake Gu            @Override
6271e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void onClick(View view) {
6371e7e67f320b23feac784b629db17b3bcce08722Dake Gu                Intent intent = new Intent(getActivity(), SearchSupportActivity.class);
6471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                startActivity(intent);
6571e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
6671e7e67f320b23feac784b629db17b3bcce08722Dake Gu        });
6771e7e67f320b23feac784b629db17b3bcce08722Dake Gu
6871e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setupRows();
6971e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnItemViewClickedListener(new ItemViewClickedListener());
7071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
7171e7e67f320b23feac784b629db17b3bcce08722Dake Gu            @Override
7271e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
7371e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    RowPresenter.ViewHolder rowViewHolder, Row row) {
7471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                Log.i(TAG, "onItemSelected: " + item + " row " + row);
7571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
7671e7e67f320b23feac784b629db17b3bcce08722Dake Gu                if (isShowingHeaders()) {
7771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    mBackgroundHelper.setBackground(getActivity(), null);
7871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                }
7971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                else if (item instanceof PhotoItem) {
8071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                    mBackgroundHelper.setBackground(
8171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                            getActivity(), ((PhotoItem) item).getImageResourceId());
8271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                }
8371e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
8471e7e67f320b23feac784b629db17b3bcce08722Dake Gu        });
8571e7e67f320b23feac784b629db17b3bcce08722Dake Gu        if (TEST_ENTRANCE_TRANSITION) {
8671e7e67f320b23feac784b629db17b3bcce08722Dake Gu            // don't run entrance transition if fragment is restored.
8771e7e67f320b23feac784b629db17b3bcce08722Dake Gu            if (savedInstanceState == null) {
8871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                prepareEntranceTransition();
8971e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
9071e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
9171e7e67f320b23feac784b629db17b3bcce08722Dake Gu        // simulates in a real world use case  data being loaded two seconds later
9271e7e67f320b23feac784b629db17b3bcce08722Dake Gu        new Handler().postDelayed(new Runnable() {
9371e7e67f320b23feac784b629db17b3bcce08722Dake Gu            public void run() {
9471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                loadData();
9571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                startEntranceTransition();
9671e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
9771e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }, 2000);
9871e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
9971e7e67f320b23feac784b629db17b3bcce08722Dake Gu
10071e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private void setupRows() {
10171e7e67f320b23feac784b629db17b3bcce08722Dake Gu        ListRowPresenter lrp = new ListRowPresenter();
10271e7e67f320b23feac784b629db17b3bcce08722Dake Gu
10371e7e67f320b23feac784b629db17b3bcce08722Dake Gu        mRowsAdapter = new ArrayObjectAdapter(lrp);
10471e7e67f320b23feac784b629db17b3bcce08722Dake Gu
10571e7e67f320b23feac784b629db17b3bcce08722Dake Gu        setAdapter(mRowsAdapter);
10671e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
10771e7e67f320b23feac784b629db17b3bcce08722Dake Gu
10871e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private void loadData() {
10971e7e67f320b23feac784b629db17b3bcce08722Dake Gu        for (int i = 0; i < NUM_ROWS; ++i) {
11087b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
11187b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu                    mCardPresenter : mCardPresenter2);
11271e7e67f320b23feac784b629db17b3bcce08722Dake Gu            listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1));
11371e7e67f320b23feac784b629db17b3bcce08722Dake Gu            listRowAdapter.add(new PhotoItem("This is a test", "Only a test", R.drawable.gallery_photo_2));
11471e7e67f320b23feac784b629db17b3bcce08722Dake Gu            listRowAdapter.add(new PhotoItem("Android TV", "by Google", R.drawable.gallery_photo_3));
11571e7e67f320b23feac784b629db17b3bcce08722Dake Gu            listRowAdapter.add(new PhotoItem("Leanback", R.drawable.gallery_photo_4));
11671e7e67f320b23feac784b629db17b3bcce08722Dake Gu            listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_5));
11771e7e67f320b23feac784b629db17b3bcce08722Dake Gu            listRowAdapter.add(new PhotoItem("This is a test", "Open GuidedStepSupportFragment", R.drawable.gallery_photo_6));
11871e7e67f320b23feac784b629db17b3bcce08722Dake Gu            listRowAdapter.add(new PhotoItem("Android TV", "open RowsSupportActivity", R.drawable.gallery_photo_7));
11971e7e67f320b23feac784b629db17b3bcce08722Dake Gu            listRowAdapter.add(new PhotoItem("Leanback", "open BrowseSupportActivity", R.drawable.gallery_photo_8));
12071e7e67f320b23feac784b629db17b3bcce08722Dake Gu            HeaderItem header = new HeaderItem(i, "Row " + i);
12171e7e67f320b23feac784b629db17b3bcce08722Dake Gu            mRowsAdapter.add(new ListRow(header, listRowAdapter));
12271e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
12371e7e67f320b23feac784b629db17b3bcce08722Dake Gu
12471e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
12571e7e67f320b23feac784b629db17b3bcce08722Dake Gu
12671e7e67f320b23feac784b629db17b3bcce08722Dake Gu    private final class ItemViewClickedListener implements OnItemViewClickedListener {
12771e7e67f320b23feac784b629db17b3bcce08722Dake Gu        @Override
12871e7e67f320b23feac784b629db17b3bcce08722Dake Gu        public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
12971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                RowPresenter.ViewHolder rowViewHolder, Row row) {
13071e7e67f320b23feac784b629db17b3bcce08722Dake Gu
13171e7e67f320b23feac784b629db17b3bcce08722Dake Gu            Intent intent;
13271e7e67f320b23feac784b629db17b3bcce08722Dake Gu            Bundle bundle;
13371e7e67f320b23feac784b629db17b3bcce08722Dake Gu            if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
13471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                GuidedStepSupportFragment.add(getFragmentManager(),
13571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        new GuidedStepSupportActivity.FirstStepFragment(),
136ee3c13ee552002263be40f6a5986f61c605b0bacDake Gu                        R.id.lb_guidedstep_host);
13771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                return;
13871e7e67f320b23feac784b629db17b3bcce08722Dake Gu            } else if ( ((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
13971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), BrowseSupportActivity.class);
14071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
14171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        .toBundle();
14271e7e67f320b23feac784b629db17b3bcce08722Dake Gu            } else if ( ((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) {
14371e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), RowsSupportActivity.class);
14471e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
14571e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        .toBundle();
14671e7e67f320b23feac784b629db17b3bcce08722Dake Gu            } else {
14771e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent = new Intent(getActivity(), DetailsSupportActivity.class);
14871e7e67f320b23feac784b629db17b3bcce08722Dake Gu                intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item);
14971e7e67f320b23feac784b629db17b3bcce08722Dake Gu                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
15071e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        getActivity(),
15171e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        ((ImageCardView)itemViewHolder.view).getMainImageView(),
15271e7e67f320b23feac784b629db17b3bcce08722Dake Gu                        DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle();
15371e7e67f320b23feac784b629db17b3bcce08722Dake Gu            }
15471e7e67f320b23feac784b629db17b3bcce08722Dake Gu            getActivity().startActivity(intent, bundle);
15571e7e67f320b23feac784b629db17b3bcce08722Dake Gu        }
15671e7e67f320b23feac784b629db17b3bcce08722Dake Gu    }
15771e7e67f320b23feac784b629db17b3bcce08722Dake Gu}
158