summaryrefslogtreecommitdiffstats
path: root/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/details/DetailViewExampleFragment.java
diff options
context:
space:
mode:
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.java179
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);
+ }
+ }
+}