BrowseFragment.java revision af136b73e6c8e377914e494f9870da1618be20d0
1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
12 * the License.
13 */
14package com.example.android.leanback;
15
16import android.content.Intent;
17import android.os.Bundle;
18import android.os.Handler;
19import android.support.v4.app.ActivityOptionsCompat;
20import android.support.v17.leanback.widget.ArrayObjectAdapter;
21import android.support.v17.leanback.widget.HeaderItem;
22import android.support.v17.leanback.widget.ImageCardView;
23import android.support.v17.leanback.widget.ListRow;
24import android.support.v17.leanback.widget.ListRowPresenter;
25import android.support.v17.leanback.widget.OnItemViewClickedListener;
26import android.support.v17.leanback.widget.OnItemViewSelectedListener;
27import android.support.v17.leanback.widget.Presenter;
28import android.support.v17.leanback.widget.Row;
29import android.support.v17.leanback.widget.RowPresenter;
30import android.util.Log;
31import android.view.View;
32import android.view.ViewGroup;
33
34public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragment {
35    private static final String TAG = "leanback.BrowseFragment";
36
37    private static final boolean TEST_ENTRANCE_TRANSITION = true;
38    private static final int NUM_ROWS = 10;
39    private ArrayObjectAdapter mRowsAdapter;
40    private BackgroundHelper mBackgroundHelper = new BackgroundHelper();
41
42    @Override
43    public void onCreate(Bundle savedInstanceState) {
44        Log.i(TAG, "onCreate");
45        super.onCreate(savedInstanceState);
46
47        setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.ic_title));
48        setTitle("Leanback Sample App");
49        setHeadersState(HEADERS_ENABLED);
50
51        setOnSearchClickedListener(new View.OnClickListener() {
52            @Override
53            public void onClick(View view) {
54                Intent intent = new Intent(getActivity(), SearchActivity.class);
55                startActivity(intent);
56            }
57        });
58
59        setupRows();
60        setOnItemViewClickedListener(new ItemViewClickedListener());
61        setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
62            @Override
63            public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
64                    RowPresenter.ViewHolder rowViewHolder, Row row) {
65                Log.i(TAG, "onItemSelected: " + item + " row " + row);
66
67                if (item instanceof PhotoItem) {
68                    mBackgroundHelper.setBackground(
69                            getActivity(), ((PhotoItem) item).getImageResourceId());
70                }
71            }
72        });
73        if (TEST_ENTRANCE_TRANSITION) {
74            // don't run entrance transition if Activity is restored.
75            if (savedInstanceState == null) {
76                prepareEntranceTransition();
77            }
78            // simulate delay loading data
79            new Handler().postDelayed(new Runnable() {
80                public void run() {
81                    startEntranceTransition();
82                }
83            }, 2000);
84        }
85
86        mBackgroundHelper.attach(getActivity());
87    }
88
89    private void setupRows() {
90        ListRowPresenter lrp = new ListRowPresenter();
91        lrp.setRowHeight(CardPresenter.getRowHeight(getActivity()));
92        lrp.setExpandedRowHeight(CardPresenter.getExpandedRowHeight(getActivity()));
93
94        mRowsAdapter = new ArrayObjectAdapter(lrp);
95
96        // For good performance, it's important to use a single instance of
97        // a card presenter for all rows using that presenter.
98        final CardPresenter cardPresenter = new CardPresenter();
99
100        for (int i = 0; i < NUM_ROWS; ++i) {
101            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);
102            listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1));
103            listRowAdapter.add(new PhotoItem("This is a test", "Only a test", R.drawable.gallery_photo_2));
104            listRowAdapter.add(new PhotoItem("Android TV", "by Google", R.drawable.gallery_photo_3));
105            listRowAdapter.add(new PhotoItem("Leanback", R.drawable.gallery_photo_4));
106            listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_5));
107            listRowAdapter.add(new PhotoItem("This is a test", "Only a test", R.drawable.gallery_photo_6));
108            listRowAdapter.add(new PhotoItem("Android TV", "open RowsActivity", R.drawable.gallery_photo_7));
109            listRowAdapter.add(new PhotoItem("Leanback", "open MainActivity", R.drawable.gallery_photo_8));
110            HeaderItem header = new HeaderItem(i, "Row " + i);
111            mRowsAdapter.add(new ListRow(header, listRowAdapter));
112        }
113
114        setAdapter(mRowsAdapter);
115    }
116
117    private final class ItemViewClickedListener implements OnItemViewClickedListener {
118        @Override
119        public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
120                RowPresenter.ViewHolder rowViewHolder, Row row) {
121
122            Intent intent;
123            Bundle bundle;
124            if ( ((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
125                intent = new Intent(getActivity(), MainActivity.class);
126                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
127                        .toBundle();
128            } else if ( ((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) {
129                intent = new Intent(getActivity(), RowsActivity.class);
130                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
131                        .toBundle();
132            } else {
133                intent = new Intent(getActivity(), DetailsActivity.class);
134                intent.putExtra(DetailsActivity.EXTRA_ITEM, (PhotoItem) item);
135                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
136                        getActivity(),
137                        ((ImageCardView)itemViewHolder.view).getMainImageView(),
138                        DetailsActivity.SHARED_ELEMENT_NAME).toBundle();
139            }
140            getActivity().startActivity(intent, bundle);
141        }
142    }
143}
144