BrowseSupportFragment.java revision 5635fbd2da9e73c8f68287626728f909565c7a8a
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.DividerRow;
29import android.support.v17.leanback.widget.SectionRow;
30import android.support.v17.leanback.widget.ListRow;
31import android.support.v17.leanback.widget.ListRowPresenter;
32import android.support.v17.leanback.widget.OnItemViewClickedListener;
33import android.support.v17.leanback.widget.OnItemViewSelectedListener;
34import android.support.v17.leanback.widget.PageRow;
35import android.support.v17.leanback.widget.Presenter;
36import android.support.v17.leanback.widget.PresenterSelector;
37import android.support.v17.leanback.widget.Row;
38import android.support.v17.leanback.widget.RowPresenter;
39import android.support.v4.app.ActivityOptionsCompat;
40import android.util.Log;
41import android.view.LayoutInflater;
42import android.view.View;
43import android.view.ViewGroup;
44
45public class BrowseSupportFragment extends android.support.v17.leanback.app.BrowseSupportFragment {
46    private static final String TAG = "leanback.BrowseSupportFragment";
47
48    private static final boolean TEST_ENTRANCE_TRANSITION = true;
49    private static final int NUM_ROWS = 8;
50    private static final long HEADER_ID1 = 1001;
51    private static final long HEADER_ID2 = 1002;
52
53    private ArrayObjectAdapter mRowsAdapter;
54    private BackgroundHelper mBackgroundHelper = new BackgroundHelper();
55
56    // For good performance, it's important to use a single instance of
57    // a card presenter for all rows using that presenter.
58    final CardPresenter mCardPresenter = new CardPresenter();
59    final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
60
61    public BrowseSupportFragment() {
62        getMainFragmentRegistry().registerFragment(PageRow.class, new PageRowFragmentFactory());
63    }
64
65    @Override
66    public void onCreate(Bundle savedInstanceState) {
67        Log.i(TAG, "onCreate");
68        super.onCreate(savedInstanceState);
69
70        setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.ic_title));
71        setTitle("Leanback Sample App");
72        setHeadersState(HEADERS_ENABLED);
73        setupRows();
74        setOnSearchClickedListener(new View.OnClickListener() {
75            @Override
76            public void onClick(View view) {
77                Intent intent = new Intent(getActivity(), SearchSupportActivity.class);
78                startActivity(intent);
79            }
80        });
81
82        setOnItemViewClickedListener(new ItemViewClickedListener());
83        setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
84            @Override
85            public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
86                    RowPresenter.ViewHolder rowViewHolder, Row row) {
87                Log.i(TAG, "onItemSelected: " + item + " row " + row);
88
89                if (isShowingHeaders()) {
90                    mBackgroundHelper.setBackground(getActivity(), null);
91                } else if (item instanceof PhotoItem) {
92                    mBackgroundHelper.setBackground(
93                            getActivity(), ((PhotoItem) item).getImageResourceId());
94                }
95            }
96        });
97        if (TEST_ENTRANCE_TRANSITION) {
98            // don't run entrance transition if fragment is restored.
99            if (savedInstanceState == null) {
100                prepareEntranceTransition();
101            }
102        }
103
104        // simulates in a real world use case  data being loaded two seconds later
105        new Handler().postDelayed(new Runnable() {
106            public void run() {
107                loadData();
108                startEntranceTransition();
109            }
110        }, 2000);
111    }
112
113    @Override
114    public View onCreateView(
115            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
116        return super.onCreateView(inflater, container, savedInstanceState);
117    }
118
119    private void setupRows() {
120        mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
121        setAdapter(mRowsAdapter);
122    }
123
124    private void loadData() {
125        int i = 0;
126
127        mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID1, "Page Row 0")));
128        mRowsAdapter.add(new DividerRow());
129
130        mRowsAdapter.add(new SectionRow(new HeaderItem("section 0")));
131        for (; i < NUM_ROWS; ++i) {
132            mRowsAdapter.add(new ListRow(new HeaderItem(i, "Row " + i), createListRowAdapter(i)));
133        }
134
135        mRowsAdapter.add(new DividerRow());
136        mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID2, "Page Row 1")));
137    }
138
139    private ArrayObjectAdapter createListRowAdapter(int i) {
140        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
141                mCardPresenter : mCardPresenter2);
142        listRowAdapter.add(new PhotoItem(
143                "Hello world",
144                R.drawable.gallery_photo_1));
145        listRowAdapter.add(new PhotoItem(
146                "This is a test",
147                "Only a test",
148                R.drawable.gallery_photo_2));
149        listRowAdapter.add(new PhotoItem(
150                "Android TV",
151                "by Google",
152                R.drawable.gallery_photo_3));
153        listRowAdapter.add(new PhotoItem(
154                "Leanback",
155                R.drawable.gallery_photo_4));
156        listRowAdapter.add(new PhotoItem(
157                "GuidedStep (Slide left/right)",
158                R.drawable.gallery_photo_5));
159        listRowAdapter.add(new PhotoItem(
160                "GuidedStep (Slide bottom up)",
161                "Open GuidedStepSupportFragment",
162                R.drawable.gallery_photo_6));
163        listRowAdapter.add(new PhotoItem(
164                "Android TV",
165                "open RowsSupportActivity",
166                R.drawable.gallery_photo_7));
167        listRowAdapter.add(new PhotoItem(
168                "Leanback",
169                "open BrowseSupportActivity",
170                R.drawable.gallery_photo_8));
171        return listRowAdapter;
172    }
173
174    private final class ItemViewClickedListener implements OnItemViewClickedListener {
175        @Override
176        public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
177                RowPresenter.ViewHolder rowViewHolder, Row row) {
178
179            Intent intent;
180            Bundle bundle;
181            if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
182                GuidedStepSupportFragment.add(getFragmentManager(),
183                        new GuidedStepSupportHalfScreenActivity.FirstStepFragment(),
184                        R.id.lb_guidedstep_host);
185                return;
186            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) {
187                GuidedStepSupportFragment.add(getFragmentManager(),
188                        new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
189                return;
190            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
191                intent = new Intent(getActivity(), BrowseSupportActivity.class);
192                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
193                        .toBundle();
194            } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) {
195                intent = new Intent(getActivity(), RowsSupportActivity.class);
196                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
197                        .toBundle();
198            } else {
199                intent = new Intent(getActivity(), DetailsSupportActivity.class);
200                intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item);
201                bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
202                        getActivity(),
203                        ((ImageCardView) itemViewHolder.view).getMainImageView(),
204                        DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle();
205            }
206            getActivity().startActivity(intent, bundle);
207        }
208    }
209
210    public static class PageRowFragmentFactory extends FragmentFactory {
211
212        @Override
213        public Fragment createFragment(Object rowObj) {
214            Row row = (Row) rowObj;
215            if (row.getHeaderItem().getId() == HEADER_ID1) {
216                return new SampleFragment();
217            } else if (row.getHeaderItem().getId() == HEADER_ID2) {
218                return new SampleRowsSupportFragment();
219            }
220
221            return null;
222        }
223    }
224
225    public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
226
227        public PageFragmentAdapterImpl(SampleFragment fragment) {
228            super(fragment);
229            setScalingEnabled(true);
230        }
231
232        @Override
233        public void setEntranceTransitionState(boolean state) {
234            getFragment().setEntranceTransitionState(state);
235        }
236    }
237
238    public static class SampleRowsSupportFragment extends RowsSupportFragment {
239        final CardPresenter mCardPresenter = new CardPresenter();
240        final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
241
242        public SampleRowsSupportFragment() {
243            ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
244            for (int i = 0; i < 4; i++) {
245                ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i));
246                adapter.add(row);
247            }
248            setAdapter(adapter);
249
250            setOnItemViewClickedListener(new OnItemViewClickedListener() {
251                @Override
252                public void onItemClicked(
253                        Presenter.ViewHolder itemViewHolder,
254                        Object item,
255                        RowPresenter.ViewHolder rowViewHolder, Row row) {
256                    Intent intent = new Intent(
257                            itemViewHolder.view.getContext(), GuidedStepSupportActivity.class);
258                    startActivity(intent);
259                }
260            });
261        }
262
263        private ArrayObjectAdapter createListRowAdapter(int i) {
264            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ?
265                    mCardPresenter : mCardPresenter2);
266            listRowAdapter.add(new PhotoItem(
267                    "Hello world",
268                    R.drawable.gallery_photo_1));
269            listRowAdapter.add(new PhotoItem(
270                    "This is a test",
271                    "Only a test",
272                    R.drawable.gallery_photo_2));
273            listRowAdapter.add(new PhotoItem(
274                    "Android TV",
275                    "by Google",
276                    R.drawable.gallery_photo_3));
277            listRowAdapter.add(new PhotoItem(
278                    "Leanback",
279                    R.drawable.gallery_photo_4));
280            listRowAdapter.add(new PhotoItem(
281                    "GuidedStep (Slide left/right)",
282                    R.drawable.gallery_photo_5));
283            listRowAdapter.add(new PhotoItem(
284                    "GuidedStep (Slide bottom up)",
285                    "Open GuidedStepSupportFragment",
286                    R.drawable.gallery_photo_6));
287            listRowAdapter.add(new PhotoItem(
288                    "Android TV",
289                    "open RowsSupportActivity",
290                    R.drawable.gallery_photo_7));
291            listRowAdapter.add(new PhotoItem(
292                    "Leanback",
293                    "open BrowseSupportActivity",
294                    R.drawable.gallery_photo_8));
295            return listRowAdapter;
296        }
297    }
298
299    public static class SampleFragment extends Fragment implements Adaptable {
300
301        final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this);
302
303        boolean mEntranceTransitionState = true;
304
305        public void setEntranceTransitionState(boolean state) {
306            mEntranceTransitionState = state;
307            final View view = getView();
308            if (view == null) {
309                return;
310            }
311            int visibility = state ? View.VISIBLE : View.INVISIBLE;
312            view.findViewById(R.id.tv1).setVisibility(visibility);
313            view.findViewById(R.id.tv2).setVisibility(visibility);
314            view.findViewById(R.id.tv3).setVisibility(visibility);
315        }
316
317        @Override
318        public View onCreateView(
319                final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
320            View view = inflater.inflate(R.layout.page_fragment, container, false);
321            view.findViewById(R.id.tv1).setOnClickListener(new View.OnClickListener() {
322                @Override
323                public void onClick(View view) {
324                    Intent intent = new Intent(inflater.getContext(), GuidedStepSupportActivity.class);
325                    startActivity(intent);
326                }
327            });
328
329            return view;
330        }
331
332        @Override
333        public void onStart() {
334            super.onStart();
335            mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter);
336        }
337
338        @Override
339        public void onViewCreated(View view, Bundle savedInstanceState) {
340            setEntranceTransitionState(mEntranceTransitionState);
341        }
342
343        @Override
344        public PageFragmentAdapterImpl getAdapter(Class clazz) {
345            if (clazz == MainFragmentAdapter.class) {
346                return mMainFragmentAdapter;
347            }
348            return null;
349        }
350    }
351
352}
353
354