BrowseSupportFragment.java revision 8f94d180902da7469b67f7c47c93a3a0b9acdb3a
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.GuidedStepSupportFragment;
23import android.support.v17.leanback.app.RowsSupportFragment;
24import android.support.v17.leanback.widget.ArrayObjectAdapter;
25import android.support.v17.leanback.widget.DividerRow;
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.Presenter;
34import android.support.v17.leanback.widget.Row;
35import android.support.v17.leanback.widget.RowPresenter;
36import android.support.v17.leanback.widget.SectionRow;
37import android.support.v4.app.ActivityOptionsCompat;
38import android.util.Log;
39import android.view.LayoutInflater;
40import android.view.View;
41import android.view.ViewGroup;
42
43public class BrowseSupportFragment extends android.support.v17.leanback.app.BrowseSupportFragment {
44    private static final String TAG = "leanback.BrowseSupportFragment";
45
46    private static final boolean TEST_ENTRANCE_TRANSITION = true;
47    private static final int NUM_ROWS = 8;
48    private static final long HEADER_ID1 = 1001;
49    private static final long HEADER_ID2 = 1002;
50    private static final long HEADER_ID3 = 1003;
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 ListRowPresenter());
120        setAdapter(mRowsAdapter);
121    }
122
123    private void loadData() {
124        int i = 0;
125
126        mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID1, "Page Row 0")));
127        mRowsAdapter.add(new DividerRow());
128
129        mRowsAdapter.add(new SectionRow(new HeaderItem("section 0")));
130        for (; i < NUM_ROWS; ++i) {
131            mRowsAdapter.add(new ListRow(new HeaderItem(i, "Row " + i), createListRowAdapter(i)));
132        }
133
134        mRowsAdapter.add(new DividerRow());
135        mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID2, "Page Row 1")));
136
137        mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID3, "Page Row 2")));
138    }
139
140    private ArrayObjectAdapter createListRowAdapter(int i) {
141        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
142                mCardPresenter : mCardPresenter2);
143        listRowAdapter.add(new PhotoItem(
144                "Hello world",
145                R.drawable.gallery_photo_1));
146        listRowAdapter.add(new PhotoItem(
147                "This is a test",
148                "Only a test",
149                R.drawable.gallery_photo_2));
150        listRowAdapter.add(new PhotoItem(
151                "Android TV",
152                "by Google",
153                R.drawable.gallery_photo_3));
154        listRowAdapter.add(new PhotoItem(
155                "Leanback",
156                R.drawable.gallery_photo_4));
157        listRowAdapter.add(new PhotoItem(
158                "GuidedStep (Slide left/right)",
159                R.drawable.gallery_photo_5));
160        listRowAdapter.add(new PhotoItem(
161                "GuidedStep (Slide bottom up)",
162                "Open GuidedStepSupportFragment",
163                R.drawable.gallery_photo_6));
164        listRowAdapter.add(new PhotoItem(
165                "Android TV",
166                "open RowsSupportActivity",
167                R.drawable.gallery_photo_7));
168        listRowAdapter.add(new PhotoItem(
169                "Leanback",
170                "open BrowseSupportActivity",
171                R.drawable.gallery_photo_8));
172        listRowAdapter.add(new PhotoItem(
173                "Leanback",
174                "open BrowseSupportActivity",
175                R.drawable.gallery_photo_8));
176        listRowAdapter.add(new PhotoItem(
177                "Leanback",
178                "open BrowseSupportActivity",
179                R.drawable.gallery_photo_8));
180        return listRowAdapter;
181    }
182
183    private final class ItemViewClickedListener implements OnItemViewClickedListener {
184        @Override
185        public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
186                RowPresenter.ViewHolder rowViewHolder, Row row) {
187
188            Intent intent;
189            Bundle bundle;
190            if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
191                GuidedStepSupportFragment.add(getFragmentManager(),
192                        new GuidedStepSupportHalfScreenActivity.FirstStepFragment(),
193                        R.id.lb_guidedstep_host);
194                return;
195            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) {
196                GuidedStepSupportFragment.add(getFragmentManager(),
197                        new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
198                return;
199            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
200                intent = new Intent(getActivity(), BrowseSupportActivity.class);
201                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
202                        .toBundle();
203            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) {
204                intent = new Intent(getActivity(), RowsSupportActivity.class);
205                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
206                        .toBundle();
207            } else {
208                intent = new Intent(getActivity(), DetailsSupportActivity.class);
209                intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item);
210                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
211                        getActivity(),
212                        ((ImageCardView) itemViewHolder.view).getMainImageView(),
213                        DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle();
214            }
215            getActivity().startActivity(intent, bundle);
216        }
217    }
218
219    public static class PageRowFragmentFactory extends FragmentFactory {
220
221        @Override
222        public Fragment createFragment(Object rowObj) {
223            Row row = (Row) rowObj;
224            if (row.getHeaderItem().getId() == HEADER_ID1) {
225                return new SampleFragment();
226            } else if (row.getHeaderItem().getId() == HEADER_ID2) {
227                return new SampleRowsSupportFragment();
228            } else if (row.getHeaderItem().getId() == HEADER_ID3) {
229                return new SampleFragment();
230            }
231
232            return null;
233        }
234    }
235
236    public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
237
238        public PageFragmentAdapterImpl(SampleFragment fragment) {
239            super(fragment);
240            setScalingEnabled(true);
241        }
242
243        @Override
244        public void setEntranceTransitionState(boolean state) {
245            getFragment().setEntranceTransitionState(state);
246        }
247    }
248
249    public static class SampleRowsSupportFragment extends RowsSupportFragment {
250        final CardPresenter mCardPresenter = new CardPresenter();
251        final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
252
253        public SampleRowsSupportFragment() {
254            ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
255            for (int i = 0; i < 4; i++) {
256                ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i));
257                adapter.add(row);
258            }
259            setAdapter(adapter);
260
261            setOnItemViewClickedListener(new OnItemViewClickedListener() {
262                @Override
263                public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder rowViewHolder, Row row) {
264                    Intent intent;
265                    Bundle bundle;
266                    if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
267                        GuidedStepSupportFragment.add(getFragmentManager(),
268                                new GuidedStepSupportHalfScreenActivity.FirstStepFragment(),
269                                R.id.lb_guidedstep_host);
270                        return;
271                    } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) {
272                        GuidedStepSupportFragment.add(getFragmentManager(),
273                                new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
274                        return;
275                    } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
276                        intent = new Intent(getActivity(), BrowseSupportActivity.class);
277                        bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
278                                .toBundle();
279                    } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) {
280                        intent = new Intent(getActivity(), RowsSupportActivity.class);
281                        bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
282                                .toBundle();
283                    } else {
284                        intent = new Intent(getActivity(), DetailsSupportActivity.class);
285                        intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item);
286                        bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
287                                getActivity(),
288                                ((ImageCardView) itemViewHolder.view).getMainImageView(),
289                                DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle();
290                    }
291                    getActivity().startActivity(intent, bundle);
292                }
293            });
294        }
295
296        private ArrayObjectAdapter createListRowAdapter(int i) {
297            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
298                    mCardPresenter : mCardPresenter2);
299            listRowAdapter.add(new PhotoItem(
300                    "Hello world",
301                    R.drawable.gallery_photo_1));
302            listRowAdapter.add(new PhotoItem(
303                    "This is a test",
304                    "Only a test",
305                    R.drawable.gallery_photo_2));
306            listRowAdapter.add(new PhotoItem(
307                    "Android TV",
308                    "by Google",
309                    R.drawable.gallery_photo_3));
310            listRowAdapter.add(new PhotoItem(
311                    "Leanback",
312                    R.drawable.gallery_photo_4));
313            listRowAdapter.add(new PhotoItem(
314                    "GuidedStep (Slide left/right)",
315                    R.drawable.gallery_photo_5));
316            listRowAdapter.add(new PhotoItem(
317                    "GuidedStep (Slide bottom up)",
318                    "Open GuidedStepSupportFragment",
319                    R.drawable.gallery_photo_6));
320            listRowAdapter.add(new PhotoItem(
321                    "Android TV",
322                    "open RowsSupportActivity",
323                    R.drawable.gallery_photo_7));
324            listRowAdapter.add(new PhotoItem(
325                    "Leanback",
326                    "open BrowseSupportActivity",
327                    R.drawable.gallery_photo_8));
328            return listRowAdapter;
329        }
330    }
331
332    public static class SampleFragment extends Fragment implements MainFragmentAdapterProvider {
333
334        final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this);
335
336        boolean mEntranceTransitionState = true;
337
338        public void setEntranceTransitionState(boolean state) {
339            mEntranceTransitionState = state;
340            final View view = getView();
341            if (view == null) {
342                return;
343            }
344            int visibility = state ? View.VISIBLE : View.INVISIBLE;
345            view.findViewById(R.id.tv1).setVisibility(visibility);
346            view.findViewById(R.id.tv2).setVisibility(visibility);
347            view.findViewById(R.id.tv3).setVisibility(visibility);
348        }
349
350        @Override
351        public View onCreateView(
352                final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
353            View view = inflater.inflate(R.layout.page_fragment, container, false);
354            view.findViewById(R.id.tv1).setOnClickListener(new View.OnClickListener() {
355                @Override
356                public void onClick(View view) {
357                    Intent intent = new Intent(inflater.getContext(), GuidedStepSupportActivity.class);
358                    startActivity(intent);
359                }
360            });
361
362            return view;
363        }
364
365        @Override
366        public void onStart() {
367            super.onStart();
368            mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter);
369        }
370
371        @Override
372        public void onViewCreated(View view, Bundle savedInstanceState) {
373            setEntranceTransitionState(mEntranceTransitionState);
374        }
375
376        @Override
377        public MainFragmentAdapter getMainFragmentAdapter() {
378            return mMainFragmentAdapter;
379        }
380    }
381}
382