diff options
Diffstat (limited to 'samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/details/DetailViewExampleFragment.java')
-rw-r--r-- | samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/details/DetailViewExampleFragment.java | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/details/DetailViewExampleFragment.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/details/DetailViewExampleFragment.java new file mode 100644 index 000000000..eed800ffd --- /dev/null +++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/details/DetailViewExampleFragment.java @@ -0,0 +1,179 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package android.support.v17.leanback.supportleanbackshowcase.app.details; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.os.Handler; +import android.support.v17.leanback.app.DetailsFragment; +import android.support.v17.leanback.supportleanbackshowcase.models.DetailedCard; +import android.support.v17.leanback.supportleanbackshowcase.R; +import android.support.v17.leanback.supportleanbackshowcase.utils.CardListRow; +import android.support.v17.leanback.supportleanbackshowcase.utils.Utils; +import android.support.v17.leanback.supportleanbackshowcase.cards.presenters.CardPresenterSelector; +import android.support.v17.leanback.supportleanbackshowcase.models.Card; +import android.support.v17.leanback.widget.Action; +import android.support.v17.leanback.widget.ArrayObjectAdapter; +import android.support.v17.leanback.widget.ClassPresenterSelector; +import android.support.v17.leanback.widget.DetailsOverviewRow; +import android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter; +import android.support.v17.leanback.widget.FullWidthDetailsOverviewSharedElementHelper; +import android.support.v17.leanback.widget.HeaderItem; +import android.support.v17.leanback.widget.ListRow; +import android.support.v17.leanback.widget.ListRowPresenter; +import android.support.v17.leanback.widget.OnItemViewClickedListener; +import android.support.v17.leanback.widget.OnItemViewSelectedListener; +import android.support.v17.leanback.widget.Presenter; +import android.support.v17.leanback.widget.Row; +import android.support.v17.leanback.widget.RowPresenter; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import com.google.gson.Gson; + +/** + * Displays a card with more details using a {@link DetailsFragment}. + */ +public class DetailViewExampleFragment extends DetailsFragment implements OnItemViewClickedListener, + OnItemViewSelectedListener { + + public static final String TRANSITION_NAME = "t_for_transition"; + public static final String EXTRA_CARD = "card"; + + private ArrayObjectAdapter mRowsAdapter; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setupUi(); + setupEventListeners(); + } + + private void setupUi() { + // Load the card we want to display from a JSON resource. This JSON data could come from + // anywhere in a real world app, e.g. a server. + String json = Utils + .inputStreamToString(getResources().openRawResource(R.raw.detail_example)); + DetailedCard data = new Gson().fromJson(json, DetailedCard.class); + + // Setup fragment + setTitle(getString(R.string.detail_view_title)); + + FullWidthDetailsOverviewRowPresenter rowPresenter = new FullWidthDetailsOverviewRowPresenter( + new DetailsDescriptionPresenter(getActivity())) { + + @Override + protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) { + // Customize Actionbar and Content by using custom colors. + RowPresenter.ViewHolder viewHolder = super.createRowViewHolder(parent); + + View actionsView = viewHolder.view. + findViewById(R.id.details_overview_actions_background); + actionsView.setBackgroundColor(getActivity().getResources(). + getColor(R.color.detail_view_actionbar_background, null)); + + View detailsView = viewHolder.view.findViewById(R.id.details_frame); + detailsView.setBackgroundColor( + getResources().getColor(R.color.detail_view_background, null)); + return viewHolder; + } + }; + + FullWidthDetailsOverviewSharedElementHelper mHelper = new FullWidthDetailsOverviewSharedElementHelper(); + mHelper.setSharedElementEnterTransition(getActivity(), TRANSITION_NAME); + rowPresenter.setListener(mHelper); + rowPresenter.setParticipatingEntranceTransition(false); + prepareEntranceTransition(); + + ListRowPresenter shadowDisabledRowPresenter = new ListRowPresenter(); + shadowDisabledRowPresenter.setShadowEnabled(false); + + // Setup PresenterSelector to distinguish between the different rows. + ClassPresenterSelector rowPresenterSelector = new ClassPresenterSelector(); + rowPresenterSelector.addClassPresenter(DetailsOverviewRow.class, rowPresenter); + rowPresenterSelector.addClassPresenter(CardListRow.class, shadowDisabledRowPresenter); + rowPresenterSelector.addClassPresenter(ListRow.class, new ListRowPresenter()); + mRowsAdapter = new ArrayObjectAdapter(rowPresenterSelector); + + // Setup action and detail row. + DetailsOverviewRow detailsOverview = new DetailsOverviewRow(data); + int imageResId = data.getLocalImageResourceId(getActivity()); + + Bundle extras = getActivity().getIntent().getExtras(); + if (extras != null && extras.containsKey(EXTRA_CARD)) { + imageResId = extras.getInt(EXTRA_CARD, imageResId); + } + detailsOverview.setImageDrawable(getResources().getDrawable(imageResId, null)); + ArrayObjectAdapter actionAdapter = new ArrayObjectAdapter(); + actionAdapter.add(new Action(1, getString(R.string.action_buy) + data.getPrice())); + actionAdapter.add(new Action(2, getString(R.string.action_wishlist))); + actionAdapter.add(new Action(3, getString(R.string.action_related))); + detailsOverview.setActionsAdapter(actionAdapter); + mRowsAdapter.add(detailsOverview); + + // Setup related row. + ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter( + new CardPresenterSelector(getActivity())); + for (Card characterCard : data.getCharacters()) listRowAdapter.add(characterCard); + HeaderItem header = new HeaderItem(0, getString(R.string.header_related)); + mRowsAdapter.add(new CardListRow(header, listRowAdapter, null)); + + // Setup recommended row. + listRowAdapter = new ArrayObjectAdapter(new CardPresenterSelector(getActivity())); + for (Card card : data.getRecommended()) listRowAdapter.add(card); + header = new HeaderItem(1, getString(R.string.header_recommended)); + mRowsAdapter.add(new ListRow(header, listRowAdapter)); + + setAdapter(mRowsAdapter); + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + startEntranceTransition(); + } + }, 500); + } + + private void setupEventListeners() { + setOnItemViewSelectedListener(this); + setOnItemViewClickedListener(this); + } + + @Override + public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, + RowPresenter.ViewHolder rowViewHolder, Row row) { + if (!(item instanceof Action)) return; + Action action = (Action) item; + if (action.getId() == 3) { + setSelectedPosition(1); + } else { + Toast.makeText(getActivity(), getString(R.string.action_cicked), Toast.LENGTH_LONG) + .show(); + } + } + + @Override + public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, + RowPresenter.ViewHolder rowViewHolder, Row row) { + if (mRowsAdapter.indexOf(row) > 0) { + int backgroundColor = getResources().getColor(R.color.detail_view_related_background, + null); + getView().setBackgroundColor(backgroundColor); + } else { + getView().setBackground(null); + } + } +} |