186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn/* 286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * Copyright (C) 2015 The Android Open Source Project 386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * 486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * in compliance with the License. You may obtain a copy of the License at 686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * 786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * http://www.apache.org/licenses/LICENSE-2.0 886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * 986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * Unless required by applicable law or agreed to in writing, software distributed under the License 1086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 1186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * or implied. See the License for the specific language governing permissions and limitations under 1286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * the License. 1386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn */ 1486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 15ad31f63f5843898de645f6ee1ac244c872ded8ccRobert Hahnpackage android.support.v17.leanback.supportleanbackshowcase.app; 1686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 1786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.content.Intent; 1886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.os.Bundle; 1986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.app.BrowseFragment; 20fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahnimport android.support.v17.leanback.supportleanbackshowcase.R; 21fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahnimport android.support.v17.leanback.supportleanbackshowcase.app.cards.CardExampleActivity; 22ad31f63f5843898de645f6ee1ac244c872ded8ccRobert Hahnimport android.support.v17.leanback.supportleanbackshowcase.app.details.DetailViewExampleActivity; 23ad31f63f5843898de645f6ee1ac244c872ded8ccRobert Hahnimport android.support.v17.leanback.supportleanbackshowcase.app.dialog.DialogExampleActivity; 24fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahnimport android.support.v17.leanback.supportleanbackshowcase.app.grid.GridExampleActivity; 25fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahnimport android.support.v17.leanback.supportleanbackshowcase.app.media.MusicExampleActivity; 26fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahnimport android.support.v17.leanback.supportleanbackshowcase.app.media.VideoExampleActivity; 27d0b7372b46c0c2ca913efec14fd0becf4164b121susnataimport android.support.v17.leanback.supportleanbackshowcase.app.page.PageAndListRowActivity; 28ad31f63f5843898de645f6ee1ac244c872ded8ccRobert Hahnimport android.support.v17.leanback.supportleanbackshowcase.app.settings.SettingsExampleActivity; 29ad31f63f5843898de645f6ee1ac244c872ded8ccRobert Hahnimport android.support.v17.leanback.supportleanbackshowcase.app.wizard.WizardExampleActivity; 30fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahnimport android.support.v17.leanback.supportleanbackshowcase.cards.presenters.CardPresenterSelector; 31ad31f63f5843898de645f6ee1ac244c872ded8ccRobert Hahnimport android.support.v17.leanback.supportleanbackshowcase.models.Card; 32ad31f63f5843898de645f6ee1ac244c872ded8ccRobert Hahnimport android.support.v17.leanback.supportleanbackshowcase.models.CardRow; 33fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahnimport android.support.v17.leanback.supportleanbackshowcase.models.Movie; 34fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahnimport android.support.v17.leanback.supportleanbackshowcase.utils.Utils; 3586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.ArrayObjectAdapter; 363f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahnimport android.support.v17.leanback.widget.ImageCardView; 3786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.ListRow; 3886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.ListRowPresenter; 3986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.OnItemViewClickedListener; 4086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.OnItemViewSelectedListener; 4186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.Presenter; 4286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.PresenterSelector; 4386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.Row; 4486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.RowPresenter; 453f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahnimport android.support.v4.app.ActivityOptionsCompat; 4686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 4786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport com.google.gson.Gson; 4886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 4986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 5086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnpublic class MainFragment extends BrowseFragment { 5186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 5286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn private ArrayObjectAdapter mRowsAdapter; 5386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 54fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn @Override 55fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn public void onActivityCreated(Bundle savedInstanceState) { 5686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn super.onActivityCreated(savedInstanceState); 5786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 5886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn setupUIElements(); 5986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn setupRowAdapter(); 6086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn setupEventListeners(); 6186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 6286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 6386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn private void setupRowAdapter() { 6486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter()); 6586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn createRows(); 6686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn setAdapter(mRowsAdapter); 6786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 6886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 6986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn private void createRows() { 7086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn String json = Utils 71c5dfae438096bb2b3507afd16c0a2057f225bf63Robert Hahn .inputStreamToString(getResources().openRawResource(R.raw.launcher_cards)); 7286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn CardRow[] rows = new Gson().fromJson(json, CardRow[].class); 7386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn for (CardRow row : rows) { 7486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mRowsAdapter.add(createCardRow(row)); 7586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 7686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 7786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 7886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn private ListRow createCardRow(CardRow cardRow) { 7986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn PresenterSelector presenterSelector = new CardPresenterSelector(getActivity()); 8086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(presenterSelector); 8186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn for (Card card : cardRow.getCards()) { 8286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn listRowAdapter.add(card); 8386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 8486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn return new ListRow(listRowAdapter); 8586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 8686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 8786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn private void setupUIElements() { 8886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn setTitle(getString(R.string.browse_title)); 8986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn setBadgeDrawable(getResources().getDrawable(R.drawable.title_android_tv, null)); 9086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn setHeadersState(HEADERS_DISABLED); 9186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn setHeadersTransitionOnBackEnabled(false); 9286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn setBrandColor(getResources().getColor(R.color.fastlane_background)); 9386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 9486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 9586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn private void setupEventListeners() { 9686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn setOnItemViewClickedListener(new ItemViewClickedListener()); 9786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn setOnItemViewSelectedListener(new ItemViewSelectedListener()); 9886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 9986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 10086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn private final class ItemViewClickedListener implements OnItemViewClickedListener { 10186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 102fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn @Override 103fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, 104fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn RowPresenter.ViewHolder rowViewHolder, Row row) { 1053f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahn Intent intent = null; 10686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn Card card = (Card) item; 10786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn int id = card.getId(); 10886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn switch (id) { 10986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn case 0: { 1103f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahn intent = new Intent(getActivity().getBaseContext(), 111fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn CardExampleActivity.class); 11286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn break; 11386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 114d0b7372b46c0c2ca913efec14fd0becf4164b121susnata case 1: 115d0b7372b46c0c2ca913efec14fd0becf4164b121susnata intent = new Intent(getActivity().getBaseContext(), 116d0b7372b46c0c2ca913efec14fd0becf4164b121susnata PageAndListRowActivity.class); 117d0b7372b46c0c2ca913efec14fd0becf4164b121susnata break; 11886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn case 2: { 1193f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahn intent = new Intent(getActivity().getBaseContext(), 120fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn GridExampleActivity.class); 12186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn break; 12286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 12386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn case 3: { 1243f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahn intent = new Intent(getActivity().getBaseContext(), 12531475959eb09fd873551909dd21d00304b6a4ee9Robert Hahn DetailViewExampleActivity.class); 12686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn break; 12786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 12886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn case 4: { 1293f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahn intent = new Intent(getActivity().getBaseContext(), 130fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn VideoExampleActivity.class); 13186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn break; 13286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 13386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn case 5: { 1343f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahn intent = new Intent(getActivity().getBaseContext(), 135fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn MusicExampleActivity.class); 13686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn break; 13786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 13886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn case 6: { 13986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn // Let's create a new Wizard for a given Movie. The movie can come from any sort 14086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn // of data source. To simplify this example we decode it from a JSON source 14186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn // which might be loaded from a server in a real world example. 1423f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahn intent = new Intent(getActivity().getBaseContext(), 14386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn WizardExampleActivity.class); 14486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 14586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn // Prepare extras which contains the Movie and will be passed to the Activity 14686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn // which is started through the Intent/. 14786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn Bundle extras = new Bundle(); 14886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn String json = Utils.inputStreamToString( 14986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn getResources().openRawResource(R.raw.wizard_example)); 15086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn Movie movie = new Gson().fromJson(json, Movie.class); 15186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn extras.putSerializable("movie", movie); 15286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn intent.putExtras(extras); 15386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 15486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn // Finally, start the wizard Activity. 15586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn break; 15686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 15786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn case 7: { 1583f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahn intent = new Intent(getActivity().getBaseContext(), 15986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn SettingsExampleActivity.class); 16086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn startActivity(intent); 1613f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahn return; 16286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 16386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn case 8: { 1643f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahn intent = new Intent(getActivity().getBaseContext(), 16586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn DialogExampleActivity.class); 16686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn break; 16786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 16886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn default: 16986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn break; 17086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 1713f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahn if (intent != null) { 17222f51aab96c6bb84d0ad3d5aa81afd0ca9d9002fRobert Hahn Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity()) 1733f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahn .toBundle(); 1743f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahn startActivity(intent, bundle); 1753f7de3bbcb5b30979f827fe3725bfa520349f55aRobert Hahn } 17686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 17786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 17886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 17986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn private final class ItemViewSelectedListener implements OnItemViewSelectedListener { 18086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 181fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn @Override 182fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 183fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn RowPresenter.ViewHolder rowViewHolder, Row row) { 18486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 18586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 18686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn} 187