BrowseSupportFragment.java revision acccd0ab69d4c55e763b452c007aed7d14cf6654
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        @Override
232        public void setEntranceTransitionState(boolean state) {
233            getFragment().setEntranceTransitionState(state);
234        }
235    }
236
237    public static class SampleRowsSupportFragment extends RowsSupportFragment {
238        final CardPresenter mCardPresenter = new CardPresenter();
239        final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
240
241        public SampleRowsSupportFragment() {
242            ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
243            for (int i = 0; i < 4; i++) {
244                ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i));
245                adapter.add(row);
246            }
247            setAdapter(adapter);
248
249            setOnItemViewClickedListener(new OnItemViewClickedListener() {
250                @Override
251                public void onItemClicked(
252                        Presenter.ViewHolder itemViewHolder,
253                        Object item,
254                        RowPresenter.ViewHolder rowViewHolder, Row row) {
255                    Intent intent = new Intent(
256                            itemViewHolder.view.getContext(), GuidedStepSupportActivity.class);
257                    startActivity(intent);
258                }
259            });
260        }
261
262        private ArrayObjectAdapter createListRowAdapter(int i) {
263            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
264                    mCardPresenter : mCardPresenter2);
265            listRowAdapter.add(new PhotoItem(
266                    "Hello world",
267                    R.drawable.gallery_photo_1));
268            listRowAdapter.add(new PhotoItem(
269                    "This is a test",
270                    "Only a test",
271                    R.drawable.gallery_photo_2));
272            listRowAdapter.add(new PhotoItem(
273                    "Android TV",
274                    "by Google",
275                    R.drawable.gallery_photo_3));
276            listRowAdapter.add(new PhotoItem(
277                    "Leanback",
278                    R.drawable.gallery_photo_4));
279            listRowAdapter.add(new PhotoItem(
280                    "GuidedStep (Slide left/right)",
281                    R.drawable.gallery_photo_5));
282            listRowAdapter.add(new PhotoItem(
283                    "GuidedStep (Slide bottom up)",
284                    "Open GuidedStepSupportFragment",
285                    R.drawable.gallery_photo_6));
286            listRowAdapter.add(new PhotoItem(
287                    "Android TV",
288                    "open RowsSupportActivity",
289                    R.drawable.gallery_photo_7));
290            listRowAdapter.add(new PhotoItem(
291                    "Leanback",
292                    "open BrowseSupportActivity",
293                    R.drawable.gallery_photo_8));
294            return listRowAdapter;
295        }
296    }
297
298    public static class SampleFragment extends Fragment implements Adaptable {
299
300        final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this);
301
302        boolean mEntranceTransitionState = true;
303
304        public void setEntranceTransitionState(boolean state) {
305            mEntranceTransitionState = state;
306            final View view = getView();
307            if (view == null) {
308                return;
309            }
310            int visibility = state ? View.VISIBLE : View.INVISIBLE;
311            view.findViewById(R.id.tv1).setVisibility(visibility);
312            view.findViewById(R.id.tv2).setVisibility(visibility);
313            view.findViewById(R.id.tv3).setVisibility(visibility);
314        }
315
316        @Override
317        public View onCreateView(
318                final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
319            View view = inflater.inflate(R.layout.page_fragment, container, false);
320            view.findViewById(R.id.tv1).setOnClickListener(new View.OnClickListener() {
321                @Override
322                public void onClick(View view) {
323                    Intent intent = new Intent(inflater.getContext(), GuidedStepSupportActivity.class);
324                    startActivity(intent);
325                }
326            });
327
328            return view;
329        }
330
331        @Override
332        public void onViewCreated(View view, Bundle savedInstanceState) {
333            setEntranceTransitionState(mEntranceTransitionState);
334        }
335
336        @Override
337        public PageFragmentAdapterImpl getAdapter(Class clazz) {
338            if (clazz == MainFragmentAdapter.class) {
339                return mMainFragmentAdapter;
340            }
341            return null;
342        }
343    }
344
345    private static class MyPresenterSelector extends PresenterSelector {
346        private Presenter[] presenters = {
347                new ListRowPresenter(),
348                new PageRowPresenter()
349        };
350
351        @Override
352        public Presenter getPresenter(Object item) {
353            if (item instanceof PageRow) {
354                return presenters[1];
355            }
356            return presenters[0];
357        }
358
359        @Override
360        public Presenter[] getPresenters() {
361            return presenters;
362        }
363    }
364}
365
366