1f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu/*
2f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu * Copyright (C) 2014 The Android Open Source Project
3f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu *
4f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu * in compliance with the License. You may obtain a copy of the License at
6f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu *
7f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu * http://www.apache.org/licenses/LICENSE-2.0
8f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu *
9f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu * Unless required by applicable law or agreed to in writing, software distributed under the License
10f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu * or implied. See the License for the specific language governing permissions and limitations under
12f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu * the License.
13f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu */
14f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gupackage com.example.android.leanback;
15f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu
16f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Guimport android.content.Intent;
17f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Guimport android.os.Bundle;
18f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Guimport android.support.v17.leanback.widget.ArrayObjectAdapter;
19f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Guimport android.support.v17.leanback.widget.HeaderItem;
20f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Guimport android.support.v17.leanback.widget.ImageCardView;
21f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Guimport android.support.v17.leanback.widget.ListRow;
22f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Guimport android.support.v17.leanback.widget.ListRowPresenter;
23f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Guimport android.support.v17.leanback.widget.OnItemViewClickedListener;
24f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Guimport android.support.v17.leanback.widget.OnItemViewSelectedListener;
25f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Guimport android.support.v17.leanback.widget.Presenter;
26f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Guimport android.support.v17.leanback.widget.Row;
27f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Guimport android.support.v17.leanback.widget.RowPresenter;
28c632bd20d83c175e76ee109e50d844cefce2a2ccAlan Viveretteimport android.support.v17.leanback.widget.TitleHelper;
29c632bd20d83c175e76ee109e50d844cefce2a2ccAlan Viveretteimport android.support.v4.app.ActivityOptionsCompat;
30f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Guimport android.util.Log;
31f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu
32f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gupublic class RowsFragment extends android.support.v17.leanback.app.RowsFragment {
33f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu
34f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu    private static final String TAG = "leanback.RowsFragment";
35f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu
36f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu    private static final int NUM_ROWS = 10;
37005084f6f0860a69c80492d3549a687ffb283c40Craig Stout    // Row heights default to wrap content
38005084f6f0860a69c80492d3549a687ffb283c40Craig Stout    private static final boolean USE_FIXED_ROW_HEIGHT = false;
39005084f6f0860a69c80492d3549a687ffb283c40Craig Stout
40f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu    private ArrayObjectAdapter mRowsAdapter;
418cef5c8d58f50d5baca1da44a7c19f623cbf98ecCraig Stout    private TitleHelper mTitleHelper;
428cef5c8d58f50d5baca1da44a7c19f623cbf98ecCraig Stout
438cef5c8d58f50d5baca1da44a7c19f623cbf98ecCraig Stout    public void setTitleHelper(TitleHelper titleHelper) {
448cef5c8d58f50d5baca1da44a7c19f623cbf98ecCraig Stout        mTitleHelper = titleHelper;
458cef5c8d58f50d5baca1da44a7c19f623cbf98ecCraig Stout    }
46f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu
47f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu    @Override
48f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu    public void onCreate(Bundle savedInstanceState) {
49f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu        Log.i(TAG, "onCreate");
50f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu        super.onCreate(savedInstanceState);
51f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu
52f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu        setupRows();
53f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu        setOnItemViewClickedListener(new ItemViewClickedListener());
54f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu        setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
55f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            @Override
56f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
57f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu                    RowPresenter.ViewHolder rowViewHolder, Row row) {
58f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu                Log.i(TAG, "onItemSelected: " + item + " row " + row);
598cef5c8d58f50d5baca1da44a7c19f623cbf98ecCraig Stout                if (mTitleHelper != null) {
608cef5c8d58f50d5baca1da44a7c19f623cbf98ecCraig Stout                    mTitleHelper.showTitle(getAdapter() == null || getAdapter().size() == 0 ||
618cef5c8d58f50d5baca1da44a7c19f623cbf98ecCraig Stout                            getAdapter().get(0) == row);
62f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu                }
63f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            }
64f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu        });
65f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu    }
66f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu
67f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu    private void setupRows() {
68f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu        ListRowPresenter lrp = new ListRowPresenter();
69005084f6f0860a69c80492d3549a687ffb283c40Craig Stout
7087b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu        // For good performance, it's important to use a single instance of
7187b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu        // a card presenter for all rows using that presenter.
7287b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu        final CardPresenter cardPresenter = new CardPresenter();
7387b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu
74005084f6f0860a69c80492d3549a687ffb283c40Craig Stout        if (USE_FIXED_ROW_HEIGHT) {
7587b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu            lrp.setRowHeight(cardPresenter.getRowHeight(getActivity()));
7687b904ffa106f12f2fecfe8b9a46084863678f29Dake Gu            lrp.setExpandedRowHeight(cardPresenter.getExpandedRowHeight(getActivity()));
77005084f6f0860a69c80492d3549a687ffb283c40Craig Stout        }
78f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu
79f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu        mRowsAdapter = new ArrayObjectAdapter(lrp);
80f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu
81f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu        for (int i = 0; i < NUM_ROWS; ++i) {
82f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);
83f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1));
84f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            listRowAdapter.add(new PhotoItem("This is a test", R.drawable.gallery_photo_2));
85f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            listRowAdapter.add(new PhotoItem("Android TV", R.drawable.gallery_photo_3));
86f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            listRowAdapter.add(new PhotoItem("Leanback", R.drawable.gallery_photo_4));
87f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_5));
88f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            listRowAdapter.add(new PhotoItem("This is a test", R.drawable.gallery_photo_6));
89f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            listRowAdapter.add(new PhotoItem("Android TV", R.drawable.gallery_photo_7));
90f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            listRowAdapter.add(new PhotoItem("Leanback", R.drawable.gallery_photo_8));
91f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            HeaderItem header = new HeaderItem(i, "Row " + i);
92f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            mRowsAdapter.add(new ListRow(header, listRowAdapter));
93f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu        }
94f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu
95f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu        setAdapter(mRowsAdapter);
96f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu    }
97f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu
98f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu    private final class ItemViewClickedListener implements OnItemViewClickedListener {
99f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu        @Override
100f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu        public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
101f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu                RowPresenter.ViewHolder rowViewHolder, Row row) {
102f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            Intent intent = new Intent(getActivity(), DetailsActivity.class);
103f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            intent.putExtra(DetailsActivity.EXTRA_ITEM, (PhotoItem) item);
104f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu
105f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
106f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu                    getActivity(),
107f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu                    ((ImageCardView)itemViewHolder.view).getMainImageView(),
108f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu                    DetailsActivity.SHARED_ELEMENT_NAME).toBundle();
109f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu            getActivity().startActivity(intent, bundle);
110f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu        }
111f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu    }
112f4b2f81cf278d3f08d60feefee139b532db3ce01Dake Gu}
113