MainFragment.java revision 22f51aab96c6bb84d0ad3d5aa81afd0ca9d9002f
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 .toBundle(); 169 startActivity(intent, bundle); 170 } 171 } 172 } 173 174 private final class ItemViewSelectedListener implements OnItemViewSelectedListener { 175 176 @Override 177 public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 178 RowPresenter.ViewHolder rowViewHolder, Row row) { 179 } 180 } 181} 182