BrowseSupportFragment.java revision 380a6d5bcb74ec69524f248d0b2edee49805b31b
1/* This file is auto-generated from BrowseFragment.java.  DO NOT MODIFY. */
2
3/*
4 * Copyright (C) 2014 The Android Open Source Project
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
7 * in compliance with the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software distributed under the License
12 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13 * or implied. See the License for the specific language governing permissions and limitations under
14 * the License.
15 */
16package com.example.android.leanback;
17
18import android.support.v4.app.Fragment;
19import android.content.Intent;
20import android.os.Bundle;
21import android.os.Handler;
22import android.support.v17.leanback.app.Adaptable;
23import android.support.v17.leanback.app.GuidedStepSupportFragment;
24import android.support.v17.leanback.app.RowsSupportFragment;
25import android.support.v17.leanback.widget.ArrayObjectAdapter;
26import android.support.v17.leanback.widget.HeaderItem;
27import android.support.v17.leanback.widget.ImageCardView;
28import android.support.v17.leanback.widget.ListRow;
29import android.support.v17.leanback.widget.ListRowPresenter;
30import android.support.v17.leanback.widget.OnItemViewClickedListener;
31import android.support.v17.leanback.widget.OnItemViewSelectedListener;
32import android.support.v17.leanback.widget.PageRow;
33import android.support.v17.leanback.widget.PageRowPresenter;
34import android.support.v17.leanback.widget.Presenter;
35import android.support.v17.leanback.widget.PresenterSelector;
36import android.support.v17.leanback.widget.Row;
37import android.support.v17.leanback.widget.RowPresenter;
38import android.support.v4.app.ActivityOptionsCompat;
39import android.util.Log;
40import android.view.LayoutInflater;
41import android.view.View;
42import android.view.ViewGroup;
43
44public class BrowseSupportFragment extends android.support.v17.leanback.app.BrowseSupportFragment {
45    private static final String TAG = "leanback.BrowseSupportFragment";
46
47    private static final boolean TEST_ENTRANCE_TRANSITION = true;
48    private static final int NUM_ROWS = 8;
49    private static final long HEADER_ID1 = 1001;
50    private static final long HEADER_ID2 = 1002;
51
52    private ArrayObjectAdapter mRowsAdapter;
53    private BackgroundHelper mBackgroundHelper = new BackgroundHelper();
54
55    // For good performance, it's important to use a single instance of
56    // a card presenter for all rows using that presenter.
57    final CardPresenter mCardPresenter = new CardPresenter();
58    final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
59
60    public BrowseSupportFragment() {
61        getMainFragmentRegistry().registerFragment(PageRow.class, new PageRowFragmentFactory());
62    }
63
64    @Override
65    public void onCreate(Bundle savedInstanceState) {
66        Log.i(TAG, "onCreate");
67        super.onCreate(savedInstanceState);
68
69        setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.ic_title));
70        setTitle("Leanback Sample App");
71        setHeadersState(HEADERS_ENABLED);
72        setupRows();
73        setOnSearchClickedListener(new View.OnClickListener() {
74            @Override
75            public void onClick(View view) {
76                Intent intent = new Intent(getActivity(), SearchSupportActivity.class);
77                startActivity(intent);
78            }
79        });
80
81        setOnItemViewClickedListener(new ItemViewClickedListener());
82        setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
83            @Override
84            public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
85                    RowPresenter.ViewHolder rowViewHolder, Row row) {
86                Log.i(TAG, "onItemSelected: " + item + " row " + row);
87
88                if (isShowingHeaders()) {
89                    mBackgroundHelper.setBackground(getActivity(), null);
90                } else if (item instanceof PhotoItem) {
91                    mBackgroundHelper.setBackground(
92                            getActivity(), ((PhotoItem) item).getImageResourceId());
93                }
94            }
95        });
96        if (TEST_ENTRANCE_TRANSITION) {
97            // don't run entrance transition if fragment is restored.
98            if (savedInstanceState == null) {
99                prepareEntranceTransition();
100            }
101        }
102
103        // simulates in a real world use case  data being loaded two seconds later
104        new Handler().postDelayed(new Runnable() {
105            public void run() {
106                loadData();
107                startEntranceTransition();
108            }
109        }, 2000);
110    }
111
112    @Override
113    public View onCreateView(
114            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
115        return super.onCreateView(inflater, container, savedInstanceState);
116    }
117
118    private void setupRows() {
119        mRowsAdapter = new ArrayObjectAdapter(new MyPresenterSelector());
120        setAdapter(mRowsAdapter);
121    }
122
123    private void loadData() {
124        int i = 0;
125
126        HeaderItem header = new HeaderItem(HEADER_ID1, "Page Row " + 0);
127        mRowsAdapter.add(new PageRow(header));
128
129        for (; i < NUM_ROWS; ++i) {
130            header = new HeaderItem(i, "Row " + i);
131            mRowsAdapter.add(new ListRow(header, createListRowAdapter(i)));
132        }
133
134        header = new HeaderItem(HEADER_ID2, "Page Row " + 1);
135        mRowsAdapter.add(new PageRow(header));
136    }
137
138    private ArrayObjectAdapter createListRowAdapter(int i) {
139        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
140                mCardPresenter : mCardPresenter2);
141        listRowAdapter.add(new PhotoItem(
142                "Hello world",
143                R.drawable.gallery_photo_1));
144        listRowAdapter.add(new PhotoItem(
145                "This is a test",
146                "Only a test",
147                R.drawable.gallery_photo_2));
148        listRowAdapter.add(new PhotoItem(
149                "Android TV",
150                "by Google",
151                R.drawable.gallery_photo_3));
152        listRowAdapter.add(new PhotoItem(
153                "Leanback",
154                R.drawable.gallery_photo_4));
155        listRowAdapter.add(new PhotoItem(
156                "GuidedStep (Slide left/right)",
157                R.drawable.gallery_photo_5));
158        listRowAdapter.add(new PhotoItem(
159                "GuidedStep (Slide bottom up)",
160                "Open GuidedStepSupportFragment",
161                R.drawable.gallery_photo_6));
162        listRowAdapter.add(new PhotoItem(
163                "Android TV",
164                "open RowsSupportActivity",
165                R.drawable.gallery_photo_7));
166        listRowAdapter.add(new PhotoItem(
167                "Leanback",
168                "open BrowseSupportActivity",
169                R.drawable.gallery_photo_8));
170        return listRowAdapter;
171    }
172
173    private final class ItemViewClickedListener implements OnItemViewClickedListener {
174        @Override
175        public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
176                RowPresenter.ViewHolder rowViewHolder, Row row) {
177
178            Intent intent;
179            Bundle bundle;
180            if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
181                GuidedStepSupportFragment.add(getFragmentManager(),
182                        new GuidedStepSupportHalfScreenActivity.FirstStepFragment(),
183                        R.id.lb_guidedstep_host);
184                return;
185            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) {
186                GuidedStepSupportFragment.add(getFragmentManager(),
187                        new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
188                return;
189            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
190                intent = new Intent(getActivity(), BrowseSupportActivity.class);
191                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
192                        .toBundle();
193            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) {
194                intent = new Intent(getActivity(), RowsSupportActivity.class);
195                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
196                        .toBundle();
197            } else {
198                intent = new Intent(getActivity(), DetailsSupportActivity.class);
199                intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item);
200                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
201                        getActivity(),
202                        ((ImageCardView) itemViewHolder.view).getMainImageView(),
203                        DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle();
204            }
205            getActivity().startActivity(intent, bundle);
206        }
207    }
208
209    public static class PageRowFragmentFactory extends FragmentFactory {
210
211        @Override
212        public Fragment createFragment(Object rowObj) {
213            Row row = (Row) rowObj;
214            if (row.getHeaderItem().getId() == HEADER_ID1) {
215                return new SampleFragment();
216            } else if (row.getHeaderItem().getId() == HEADER_ID2) {
217                return new SampleRowsSupportFragment();
218            }
219
220            return null;
221        }
222    }
223
224    public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
225
226        public PageFragmentAdapterImpl(SampleFragment fragment) {
227            super(fragment);
228            setScalingEnabled(true);
229        }
230    }
231
232    public static class SampleRowsSupportFragment extends RowsSupportFragment {
233        final CardPresenter mCardPresenter = new CardPresenter();
234        final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
235
236        public SampleRowsSupportFragment() {
237            ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
238            for (int i = 0; i < 4; i++) {
239                ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i));
240                adapter.add(row);
241            }
242            setAdapter(adapter);
243
244            setOnItemViewClickedListener(new OnItemViewClickedListener() {
245                @Override
246                public void onItemClicked(
247                        Presenter.ViewHolder itemViewHolder,
248                        Object item,
249                        RowPresenter.ViewHolder rowViewHolder, Row row) {
250                    Intent intent = new Intent(
251                            itemViewHolder.view.getContext(), GuidedStepSupportActivity.class);
252                    startActivity(intent);
253                }
254            });
255        }
256
257        private ArrayObjectAdapter createListRowAdapter(int i) {
258            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
259                    mCardPresenter : mCardPresenter2);
260            listRowAdapter.add(new PhotoItem(
261                    "Hello world",
262                    R.drawable.gallery_photo_1));
263            listRowAdapter.add(new PhotoItem(
264                    "This is a test",
265                    "Only a test",
266                    R.drawable.gallery_photo_2));
267            listRowAdapter.add(new PhotoItem(
268                    "Android TV",
269                    "by Google",
270                    R.drawable.gallery_photo_3));
271            listRowAdapter.add(new PhotoItem(
272                    "Leanback",
273                    R.drawable.gallery_photo_4));
274            listRowAdapter.add(new PhotoItem(
275                    "GuidedStep (Slide left/right)",
276                    R.drawable.gallery_photo_5));
277            listRowAdapter.add(new PhotoItem(
278                    "GuidedStep (Slide bottom up)",
279                    "Open GuidedStepSupportFragment",
280                    R.drawable.gallery_photo_6));
281            listRowAdapter.add(new PhotoItem(
282                    "Android TV",
283                    "open RowsSupportActivity",
284                    R.drawable.gallery_photo_7));
285            listRowAdapter.add(new PhotoItem(
286                    "Leanback",
287                    "open BrowseSupportActivity",
288                    R.drawable.gallery_photo_8));
289            return listRowAdapter;
290        }
291    }
292
293    public static class SampleFragment extends Fragment implements Adaptable {
294
295        final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this);
296
297        @Override
298        public View onCreateView(
299                final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
300            View view = inflater.inflate(R.layout.page_fragment, container, false);
301            view.findViewById(R.id.tv1).setOnClickListener(new View.OnClickListener() {
302                @Override
303                public void onClick(View view) {
304                    Intent intent = new Intent(inflater.getContext(), GuidedStepSupportActivity.class);
305                    startActivity(intent);
306                }
307            });
308
309            return view;
310        }
311
312        @Override
313        public PageFragmentAdapterImpl getAdapter(Class clazz) {
314            if (clazz == MainFragmentAdapter.class) {
315                return mMainFragmentAdapter;
316            }
317            return null;
318        }
319    }
320
321    private static class MyPresenterSelector extends PresenterSelector {
322        private Presenter[] presenters = {
323                new ListRowPresenter(),
324                new PageRowPresenter()
325        };
326
327        @Override
328        public Presenter getPresenter(Object item) {
329            if (item instanceof PageRow) {
330                return presenters[1];
331            }
332            return presenters[0];
333        }
334
335        @Override
336        public Presenter[] getPresenters() {
337            return presenters;
338        }
339    }
340}
341
342