diff --git a/samples/SupportLeanbackShowcase/app/src/main/AndroidManifest.xml b/samples/SupportLeanbackShowcase/app/src/main/AndroidManifest.xml
index df351806c..756ef94e7 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/AndroidManifest.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/AndroidManifest.xml
@@ -41,10 +41,10 @@
android:theme="@style/Theme.Example.LeanbackDialog">
+ android:theme="@style/Theme.Example.LeanbackDetails">
+ android:theme="@style/Theme.Example.LeanbackBrowse">
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/MainFragment.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/MainFragment.java
index 1288a3797..ab22928d8 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/MainFragment.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/MainFragment.java
@@ -164,8 +164,7 @@ public class MainFragment extends BrowseFragment {
break;
}
if (intent != null) {
- Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(),
- ((ImageCardView) itemViewHolder.view).getMainImageView(), "transition")
+ Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
.toBundle();
startActivity(intent, bundle);
}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/cards/CardExampleFragment.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/cards/CardExampleFragment.java
index a7b3f9771..4b2a44557 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/cards/CardExampleFragment.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/cards/CardExampleFragment.java
@@ -14,21 +14,32 @@
package android.support.v17.leanback.supportleanbackshowcase.app.cards;
+import android.content.Intent;
import android.os.Bundle;
+import android.os.Handler;
import android.support.v17.leanback.app.BrowseFragment;
-import android.support.v17.leanback.supportleanbackshowcase.utils.CardListRow;
import android.support.v17.leanback.supportleanbackshowcase.R;
+import android.support.v17.leanback.supportleanbackshowcase.app.details.DetailViewExampleActivity;
+import android.support.v17.leanback.supportleanbackshowcase.app.details.DetailViewExampleFragment;
import android.support.v17.leanback.supportleanbackshowcase.app.details.ShadowRowPresenterSelector;
-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.supportleanbackshowcase.models.CardRow;
-import android.support.v17.leanback.supportleanbackshowcase.cards.presenters.CardPresenterSelector;
+import android.support.v17.leanback.supportleanbackshowcase.utils.CardListRow;
+import android.support.v17.leanback.supportleanbackshowcase.utils.Utils;
import android.support.v17.leanback.widget.ArrayObjectAdapter;
import android.support.v17.leanback.widget.HeaderItem;
+import android.support.v17.leanback.widget.ImageCardView;
import android.support.v17.leanback.widget.ListRow;
+import android.support.v17.leanback.widget.OnItemViewClickedListener;
+import android.support.v17.leanback.widget.Presenter;
import android.support.v17.leanback.widget.PresenterSelector;
+import android.support.v17.leanback.widget.Row;
+import android.support.v17.leanback.widget.RowPresenter;
import android.support.v17.leanback.widget.SearchOrbView;
+import android.support.v4.app.ActivityOptionsCompat;
import android.view.View;
+import android.widget.ImageView;
import android.widget.Toast;
import com.google.gson.Gson;
@@ -52,22 +63,50 @@ public class CardExampleFragment extends BrowseFragment {
setHeadersTransitionOnBackEnabled(true);
setSearchAffordanceColors(
new SearchOrbView.Colors(getResources().getColor(R.color.search_color),
- getResources().getColor(R.color.search_bright_color),
- getResources().getColor(R.color.search_icon_color)));
+ getResources().getColor(R.color.search_bright_color),
+ getResources().getColor(R.color.search_icon_color)));
setBrandColor(getResources().getColor(R.color.fastlane_background));
setTitle(getString(R.string.card_examples_title));
setOnSearchClickedListener(new View.OnClickListener() {
- @Override public void onClick(View v) {
+ @Override
+ public void onClick(View v) {
Toast.makeText(getActivity(), getString(R.string.implement_search),
- Toast.LENGTH_LONG).show();
+ Toast.LENGTH_LONG).show();
}
});
+ setOnItemViewClickedListener(new OnItemViewClickedListener() {
+
+ @Override
+ public void onItemClicked(Presenter.ViewHolder viewHolder, Object item, RowPresenter.ViewHolder viewHolder1, Row row) {
+ if (!(item instanceof Card)) return;
+ if (!(viewHolder.view instanceof ImageCardView)) return;
+
+ ImageView imageView = ((ImageCardView) viewHolder.view).getMainImageView();
+ Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(),
+ imageView, DetailViewExampleFragment.TRANSITION_NAME).toBundle();
+ Intent intent = new Intent(getActivity().getBaseContext(),
+ DetailViewExampleActivity.class);
+ Card card = (Card) item;
+ int imageResId = card.getLocalImageResourceId(getContext());
+ intent.putExtra(DetailViewExampleFragment.EXTRA_CARD, imageResId);
+ startActivity(intent, bundle);
+ }
+
+ });
+
+ prepareEntranceTransition();
}
private void setupRowAdapter() {
mRowsAdapter = new ArrayObjectAdapter(new ShadowRowPresenterSelector());
- createRows();
setAdapter(mRowsAdapter);
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ createRows();
+ startEntranceTransition();
+ }
+ }, 500);
}
private void createRows() {
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
index 7f9e77a30..eed800ffd 100644
--- 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
@@ -14,7 +14,10 @@
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;
@@ -27,6 +30,7 @@ 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;
@@ -47,11 +51,14 @@ import com.google.gson.Gson;
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 onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
setupUi();
setupEventListeners();
}
@@ -85,6 +92,13 @@ public class DetailViewExampleFragment extends DetailsFragment implements OnItem
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);
@@ -98,6 +112,11 @@ public class DetailViewExampleFragment extends DetailsFragment implements OnItem
// 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()));
@@ -120,6 +139,12 @@ public class DetailViewExampleFragment extends DetailsFragment implements OnItem
mRowsAdapter.add(new ListRow(header, listRowAdapter));
setAdapter(mRowsAdapter);
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ startEntranceTransition();
+ }
+ }, 500);
}
private void setupEventListeners() {
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/grid/GridExample.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/grid/GridExampleFragment.java
similarity index 97%
rename from samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/grid/GridExample.java
rename to samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/grid/GridExampleFragment.java
index e8cf3eba3..8002bf2c5 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/grid/GridExample.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/grid/GridExampleFragment.java
@@ -30,7 +30,7 @@ import com.google.gson.Gson;
/**
* An example how to use leanback's {@link VerticalGridFragment}.
*/
-public class GridExample extends VerticalGridFragment {
+public class GridExampleFragment extends VerticalGridFragment {
private static final int COLUMNS = 4;
private static final int ZOOM_FACTOR = FocusHighlight.ZOOM_FACTOR_MEDIUM;
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/wizard/WizardExample1stStepFragment.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/wizard/WizardExample1stStepFragment.java
index 0b0f6929c..e7808b113 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/wizard/WizardExample1stStepFragment.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/wizard/WizardExample1stStepFragment.java
@@ -52,6 +52,7 @@ public class WizardExample1stStepFragment extends WizardExampleBaseStepFragment
GuidedAction action = new GuidedAction.Builder()
.id(ACTION_ID_BUY_HD)
.title(getString(R.string.wizard_example_rent_hd))
+ .editable(false)
.description(mMovie.getPriceHd() + " " +
getString(R.string.wizard_example_watch_hd))
.build();
@@ -59,6 +60,7 @@ public class WizardExample1stStepFragment extends WizardExampleBaseStepFragment
action = new GuidedAction.Builder()
.id(ACTION_ID_BUY_SD)
.title(getString(R.string.wizard_example_rent_sd))
+ .editable(false)
.description(mMovie.getPriceSd() + " " +
getString(R.string.wizard_example_watch_sd))
.build();
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/wizard/WizardExample2ndStepFragment.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/wizard/WizardExample2ndStepFragment.java
index 7f3a83a39..8bbf5a455 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/wizard/WizardExample2ndStepFragment.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/wizard/WizardExample2ndStepFragment.java
@@ -58,6 +58,7 @@ public class WizardExample2ndStepFragment extends WizardExampleBaseStepFragment
getString(R.string.wizard_example_rental_period),
mMovie.getBreadcrump(), null);
return guidance;
+
}
@Override
@@ -68,12 +69,14 @@ public class WizardExample2ndStepFragment extends WizardExampleBaseStepFragment
.id(ACTION_ID_CONFIRM)
.title(getString(R.string.wizard_example_rent))
.description(rentHighDefinition ? mMovie.getPriceHd() : mMovie.getPriceSd())
+ .editable(false)
.build();
actions.add(action);
action = new GuidedAction.Builder()
.id(ACTION_ID_PAYMENT_METHOD)
.title(getString(R.string.wizard_example_payment_method))
.description(getString(R.string.wizard_example_visa_balance))
+ .editable(false)
.build();
actions.add(action);
}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/wizard/WizardExample4thStepFragment.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/wizard/WizardExample4thStepFragment.java
index 450311c24..5601fdac7 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/wizard/WizardExample4thStepFragment.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/app/wizard/WizardExample4thStepFragment.java
@@ -52,11 +52,13 @@ public class WizardExample4thStepFragment extends WizardExampleBaseStepFragment
public void onCreateActions(@NonNull List actions, Bundle savedInstanceState) {
GuidedAction action = new GuidedAction.Builder()
.id(ACTION_ID_WATCH)
+ .editable(false)
.title(getString(R.string.wizard_example_watch_now))
.build();
actions.add(action);
action = new GuidedAction.Builder()
.id(ACTION_ID_LATER)
+ .editable(false)
.title(getString(R.string.wizard_example_later))
.build();
actions.add(action);
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/CharacterCardView.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/CharacterCardView.java
index eeda4dae8..0486a4259 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/CharacterCardView.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/CharacterCardView.java
@@ -47,6 +47,7 @@ public class CharacterCardView extends BaseCardView {
}
});
setFocusable(true);
+ setBackground(null);
}
public void updateUi(Card card) {
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/utils/Utils.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/utils/Utils.java
index 257aedbd0..4416cbe49 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/utils/Utils.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/utils/Utils.java
@@ -16,16 +16,10 @@ package android.support.v17.leanback.supportleanbackshowcase.utils;
import android.content.ContentResolver;
import android.content.Context;
-import android.graphics.drawable.Drawable;
import android.net.Uri;
-import android.widget.ImageView;
-
-import com.squareup.picasso.Picasso;
-import com.squareup.picasso.RequestCreator;
import java.io.IOException;
import java.io.InputStream;
-import java.net.URI;
/**
* A collection of utility methods, all static.
@@ -55,37 +49,6 @@ public class Utils {
}
}
- /**
- * The method uses {@link Picasso} to fetch an image from a given url, resize it (if required)
- * and display it inside an {@link ImageView}.
- *
- * @param context Context which is used to create a {@link Picasso} instance.
- * @param uri The {@link URI} to fetch the image from.
- * @param target The {@link ImageView} which shall display the image.
- * @param resizeWidthInDp The target width of the image. Pass -1 if you don't want
- * to resize the image.
- * @param resizeHeightInDp The target height of the image. Pass -1 if you don't
- * want to resize the image.
- * @param centerCrop Centers and scales an image to fit the requested bounds.
- * @param errorDrawable A drawable which will be shown in case the image could not be fetched
- * from the server.
- * @see {@link Picasso#with(Context)}
- * @see {@link RequestCreator#resize(int, int)}
- * @see {@link RequestCreator#centerCrop()}
- * @see {@link RequestCreator#error(Drawable)}
- */
- public static void loadImageFromUri(Context context, URI uri, ImageView target,
- int resizeWidthInDp, int resizeHeightInDp,
- boolean centerCrop, Drawable errorDrawable) {
- if (uri == null) return;
- RequestCreator builder = Picasso.with(context).load(uri.toString());
- if (resizeHeightInDp != -1 && resizeWidthInDp != -1)
- builder.resize(Utils.convertDpToPixel(context, resizeWidthInDp),
- Utils.convertDpToPixel(context, resizeHeightInDp));
- if (centerCrop) builder.centerCrop();
- builder.error(errorDrawable).into(target);
- }
-
public static Uri getResourceUri(Context context, int resID) {
return Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
context.getResources().getResourcePackageName(resID) + '/' +
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_cards_example.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_cards_example.xml
index cbcfe0539..903c52fd3 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_cards_example.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_cards_example.xml
@@ -17,6 +17,7 @@
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/character_card.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/character_card.xml
index 13f85845f..dee09a8e6 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/character_card.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/layout/character_card.xml
@@ -18,6 +18,7 @@
xmlns:lb="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ lb:cardBackground="@null"
lb:layout_viewType="main">
+
+
@@ -48,7 +51,7 @@
- @color/settings_background
-