MainFragment.java revision 3f7de3bbcb5b30979f827fe3725bfa520349f55a
1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
12 * the License.
13 */
14
15package android.support.v17.leanback.supportleanbackshowcase.app;
16
17import android.content.Intent;
18import android.os.Bundle;
19import android.support.v17.leanback.app.BrowseFragment;
20import android.support.v17.leanback.supportleanbackshowcase.R;
21import android.support.v17.leanback.supportleanbackshowcase.app.cards.CardExampleActivity;
22import android.support.v17.leanback.supportleanbackshowcase.app.details.DetailViewExampleActivity;
23import android.support.v17.leanback.supportleanbackshowcase.app.dialog.DialogExampleActivity;
24import android.support.v17.leanback.supportleanbackshowcase.app.grid.GridExampleActivity;
25import android.support.v17.leanback.supportleanbackshowcase.app.media.MusicExampleActivity;
26import android.support.v17.leanback.supportleanbackshowcase.app.media.VideoExampleActivity;
27import android.support.v17.leanback.supportleanbackshowcase.app.settings.SettingsExampleActivity;
28import android.support.v17.leanback.supportleanbackshowcase.app.wizard.WizardExampleActivity;
29import android.support.v17.leanback.supportleanbackshowcase.cards.presenters.CardPresenterSelector;
30import android.support.v17.leanback.supportleanbackshowcase.models.Card;
31import android.support.v17.leanback.supportleanbackshowcase.models.CardRow;
32import android.support.v17.leanback.supportleanbackshowcase.models.Movie;
33import android.support.v17.leanback.supportleanbackshowcase.utils.Utils;
34import android.support.v17.leanback.widget.ArrayObjectAdapter;
35import android.support.v17.leanback.widget.ImageCardView;
36import android.support.v17.leanback.widget.ListRow;
37import android.support.v17.leanback.widget.ListRowPresenter;
38import android.support.v17.leanback.widget.OnItemViewClickedListener;
39import android.support.v17.leanback.widget.OnItemViewSelectedListener;
40import android.support.v17.leanback.widget.Presenter;
41import android.support.v17.leanback.widget.PresenterSelector;
42import android.support.v17.leanback.widget.Row;
43import android.support.v17.leanback.widget.RowPresenter;
44import android.support.v4.app.ActivityOptionsCompat;
45
46import com.google.gson.Gson;
47
48
49public class MainFragment extends BrowseFragment {
50
51    private ArrayObjectAdapter mRowsAdapter;
52
53    @Override
54    public void onActivityCreated(Bundle savedInstanceState) {
55        super.onActivityCreated(savedInstanceState);
56
57        setupUIElements();
58        setupRowAdapter();
59        setupEventListeners();
60    }
61
62    private void setupRowAdapter() {
63        mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
64        createRows();
65        setAdapter(mRowsAdapter);
66    }
67
68    private void createRows() {
69        String json = Utils
70                .inputStreamToString(getResources().openRawResource(R.raw.launcher_cards));
71        CardRow[] rows = new Gson().fromJson(json, CardRow[].class);
72        for (CardRow row : rows) {
73            mRowsAdapter.add(createCardRow(row));
74        }
75    }
76
77    private ListRow createCardRow(CardRow cardRow) {
78        PresenterSelector presenterSelector = new CardPresenterSelector(getActivity());
79        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(presenterSelector);
80        for (Card card : cardRow.getCards()) {
81            listRowAdapter.add(card);
82        }
83        return new ListRow(listRowAdapter);
84    }
85
86    private void setupUIElements() {
87        setTitle(getString(R.string.browse_title));
88        setBadgeDrawable(getResources().getDrawable(R.drawable.title_android_tv, null));
89        setHeadersState(HEADERS_DISABLED);
90        setHeadersTransitionOnBackEnabled(false);
91        setBrandColor(getResources().getColor(R.color.fastlane_background));
92    }
93
94    private void setupEventListeners() {
95        setOnItemViewClickedListener(new ItemViewClickedListener());
96        setOnItemViewSelectedListener(new ItemViewSelectedListener());
97    }
98
99    private final class ItemViewClickedListener implements OnItemViewClickedListener {
100
101        @Override
102        public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
103                                  RowPresenter.ViewHolder rowViewHolder, Row row) {
104            Intent intent = null;
105            Card card = (Card) item;
106            int id = card.getId();
107            switch (id) {
108                case 0: {
109                    intent = new Intent(getActivity().getBaseContext(),
110                            CardExampleActivity.class);
111                    break;
112                }
113                case 2: {
114                    intent = new Intent(getActivity().getBaseContext(),
115                            GridExampleActivity.class);
116                    break;
117                }
118                case 3: {
119                    intent = new Intent(getActivity().getBaseContext(),
120                            DetailViewExampleActivity.class);
121                    break;
122                }
123                case 4: {
124                    intent = new Intent(getActivity().getBaseContext(),
125                            VideoExampleActivity.class);
126                    break;
127                }
128                case 5: {
129                    intent = new Intent(getActivity().getBaseContext(),
130                            MusicExampleActivity.class);
131                    break;
132                }
133                case 6: {
134                    // Let's create a new Wizard for a given Movie. The movie can come from any sort
135                    // of data source. To simplify this example we decode it from a JSON source
136                    // which might be loaded from a server in a real world example.
137                    intent = new Intent(getActivity().getBaseContext(),
138                            WizardExampleActivity.class);
139
140                    // Prepare extras which contains the Movie and will be passed to the Activity
141                    // which is started through the Intent/.
142                    Bundle extras = new Bundle();
143                    String json = Utils.inputStreamToString(
144                            getResources().openRawResource(R.raw.wizard_example));
145                    Movie movie = new Gson().fromJson(json, Movie.class);
146                    extras.putSerializable("movie", movie);
147                    intent.putExtras(extras);
148
149                    // Finally, start the wizard Activity.
150                    break;
151                }
152                case 7: {
153                    intent = new Intent(getActivity().getBaseContext(),
154                            SettingsExampleActivity.class);
155                    startActivity(intent);
156                    return;
157                }
158                case 8: {
159                    intent = new Intent(getActivity().getBaseContext(),
160                            DialogExampleActivity.class);
161                    break;
162                }
163                default:
164                    break;
165            }
166            if (intent != null) {
167                Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(),
168                        ((ImageCardView) itemViewHolder.view).getMainImageView(), "transition")
169                        .toBundle();
170                startActivity(intent, bundle);
171            }
172        }
173    }
174
175    private final class ItemViewSelectedListener implements OnItemViewSelectedListener {
176
177        @Override
178        public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
179                                   RowPresenter.ViewHolder rowViewHolder, Row row) {
180        }
181    }
182}
183