diff options
author | Dake Gu <dake@google.com> | 2015-04-29 11:46:46 -0700 |
---|---|---|
committer | Dake Gu <dake@google.com> | 2015-05-05 11:18:41 -0700 |
commit | 1063d9b435f91ebc8306c407cfa0a82223beb148 (patch) | |
tree | c2e046469b4c1adb509c0414b593eb40d2a21acf | |
parent | 374d4c2b146ef2d8b3defd11dc3a48bb776c80a3 (diff) | |
download | android_development-1063d9b435f91ebc8306c407cfa0a82223beb148.tar.gz android_development-1063d9b435f91ebc8306c407cfa0a82223beb148.tar.bz2 android_development-1063d9b435f91ebc8306c407cfa0a82223beb148.zip |
Add samples for new DetailsFragment
Two samples: Details opened from browse where the overview row is
the first row. Details used by Search where overview row is the
second row.
Added option in MainActivity to switch between using legacy
DetailsOverviewRowPresenter and FullWidthDetailsOverviewRowPresenter
Change-Id: I10220396b5cfc0538cd5e99e46829ddfca874359
10 files changed, 460 insertions, 3 deletions
diff --git a/samples/SupportLeanbackDemos/AndroidManifest.xml b/samples/SupportLeanbackDemos/AndroidManifest.xml index e429423f3..837a123a0 100644 --- a/samples/SupportLeanbackDemos/AndroidManifest.xml +++ b/samples/SupportLeanbackDemos/AndroidManifest.xml @@ -33,6 +33,10 @@ android:theme="@style/Theme.Example.Leanback.Details" android:exported="true" /> + <activity android:name="SearchDetailsActivity" + android:theme="@style/Theme.Example.Leanback.SearchDetails" + android:exported="true" /> + <activity android:name="RowsActivity" android:theme="@style/Theme.Example.Leanback.Rows" android:exported="true" /> @@ -56,5 +60,9 @@ android:theme="@style/Theme.Example.Leanback.GuidedStep" android:exported="true" /> + <activity android:name="DetailsPresenterSelectionActivity" + android:theme="@style/Theme.Example.Leanback.GuidedStep" + android:exported="true" /> + </application> </manifest> diff --git a/samples/SupportLeanbackDemos/res/layout/details.xml b/samples/SupportLeanbackDemos/res/layout/details.xml index 4af4e6a1e..3159f5428 100644 --- a/samples/SupportLeanbackDemos/res/layout/details.xml +++ b/samples/SupportLeanbackDemos/res/layout/details.xml @@ -16,7 +16,7 @@ --> <fragment xmlns:android="http://schemas.android.com/apk/res/android" - android:name="com.example.android.leanback.DetailsFragment" + android:name="com.example.android.leanback.NewDetailsFragment" android:id="@+id/details_fragment" android:layout_width="match_parent" android:layout_height="match_parent" diff --git a/samples/SupportLeanbackDemos/res/layout/legacy_details.xml b/samples/SupportLeanbackDemos/res/layout/legacy_details.xml new file mode 100644 index 000000000..4af4e6a1e --- /dev/null +++ b/samples/SupportLeanbackDemos/res/layout/legacy_details.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2014 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. +--> + +<fragment xmlns:android="http://schemas.android.com/apk/res/android" + android:name="com.example.android.leanback.DetailsFragment" + android:id="@+id/details_fragment" + android:layout_width="match_parent" + android:layout_height="match_parent" +/> diff --git a/samples/SupportLeanbackDemos/res/values/strings.xml b/samples/SupportLeanbackDemos/res/values/strings.xml index 09e43a685..125b0df64 100644 --- a/samples/SupportLeanbackDemos/res/values/strings.xml +++ b/samples/SupportLeanbackDemos/res/values/strings.xml @@ -25,6 +25,8 @@ <string name="search_description">SearchFragment test</string> <string name="details">Details</string> <string name="details_description">DetailsFragment test</string> + <string name="search_details">Search Details</string> + <string name="search_details_description">Search style DetailsFragment test</string> <string name="playback">Playback</string> <string name="playback_description">PlaybackOverlay test</string> <string name="hgrid">Horizontal Grid</string> @@ -35,6 +37,10 @@ <string name="guidedstep_description">GuidedStepFragment test</string> <string name="browseerror">Browse Error</string> <string name="browseerror_description">BrowseError test</string> + <string name="detail_presenter_options">Choose Presenter for Details</string> + <string name="detail_presenter_options_description">Choose Presenter for Details</string> + <string name="legacydetails_off">Use New DetailsPresenter</string> + <string name="legacydetails_on">Use Legacy DetailsPresenter</string> <!-- Strings related to guided sequence activity --> <string name="guidedstep_first_title">First</string> diff --git a/samples/SupportLeanbackDemos/res/values/themes.xml b/samples/SupportLeanbackDemos/res/values/themes.xml index 5d7c2320a..696d82c4b 100644 --- a/samples/SupportLeanbackDemos/res/values/themes.xml +++ b/samples/SupportLeanbackDemos/res/values/themes.xml @@ -19,6 +19,8 @@ </style> <style name="Theme.Example.Leanback.Browse" parent="Theme.Leanback.Browse"> </style> + <style name="Theme.Example.Leanback.SearchDetails" parent="Theme.Leanback.Details.NoSharedElementTransition"> + </style> <style name="Theme.Example.Leanback.Details" parent="Theme.Leanback.Details"> </style> <style name="Theme.Example.Leanback.Rows" parent="Theme.Leanback"> diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsActivity.java index d6c52ab12..f199e9d14 100644 --- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsActivity.java +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsActivity.java @@ -21,17 +21,28 @@ public class DetailsActivity extends Activity public static final String EXTRA_ITEM = "item"; public static final String SHARED_ELEMENT_NAME = "hero"; + public static boolean USE_LEGACY_PRESENTER = false; + + private boolean useLegacyFragment() { + return (USE_LEGACY_PRESENTER && !(this instanceof SearchDetailsActivity)); + } + /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.details); + setContentView(useLegacyFragment() ? R.layout.legacy_details : R.layout.details); if (savedInstanceState == null) { // Only pass object to fragment when activity is first time created, // later object is modified and persisted with fragment state. - ((DetailsFragment)getFragmentManager().findFragmentById(R.id.details_fragment)) + if (useLegacyFragment()) { + ((DetailsFragment)getFragmentManager().findFragmentById(R.id.details_fragment)) + .setItem((PhotoItem) getIntent().getParcelableExtra(EXTRA_ITEM)); + } else { + ((NewDetailsFragment)getFragmentManager().findFragmentById(R.id.details_fragment)) .setItem((PhotoItem) getIntent().getParcelableExtra(EXTRA_ITEM)); + } } } diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsPresenterSelectionActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsPresenterSelectionActivity.java new file mode 100644 index 000000000..ac0b67154 --- /dev/null +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsPresenterSelectionActivity.java @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2014 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 com.example.android.leanback; + +import android.app.Activity; +import android.app.FragmentManager; +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.support.v17.leanback.app.GuidedStepFragment; +import android.support.v17.leanback.widget.GuidedAction; +import android.support.v17.leanback.widget.GuidanceStylist; +import android.support.v17.leanback.widget.GuidanceStylist.Guidance; + +import java.util.List; +import java.util.ArrayList; + +/** + * Activity that showcases different aspects of GuidedStepFragments. + */ +public class DetailsPresenterSelectionActivity extends Activity { + + private static final int OPTION_CHECK_SET_ID = 10; + + private static final long ACTION_ID_SWITCH_LEGACY_ON = 10000; + private static final long ACTION_ID_SWITCH_LEGACY_OFF = 10001; + + + private static final String[] OPTION_NAMES = { "Use new details presenter", "Use legacy details presenter" }; + private static final String[] OPTION_DESCRIPTIONS = { "Use new details presenter", + "Use legacy details presenter"}; + private static final long[] OPTION_IDS = {ACTION_ID_SWITCH_LEGACY_OFF, ACTION_ID_SWITCH_LEGACY_ON}; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + GuidedStepFragment.add(getFragmentManager(), new SetupFragment()); + } + + private static void addAction(List<GuidedAction> actions, long id, String title, String desc) { + actions.add(new GuidedAction.Builder() + .id(id) + .title(title) + .description(desc) + .build()); + } + + private static void addCheckedAction(List<GuidedAction> actions, Context context, + long id, String title, String desc, boolean checked) { + actions.add(new GuidedAction.Builder() + .title(title) + .description(desc) + .id(id) + .checkSetId(OPTION_CHECK_SET_ID) + .checked(checked) + .build()); + } + + private static class SetupFragment extends GuidedStepFragment { + + @Override + public Guidance onCreateGuidance(Bundle savedInstanceState) { + String title = getString(R.string.guidedstep_second_title); + String breadcrumb = getString(R.string.guidedstep_second_breadcrumb); + String description = getString(R.string.guidedstep_second_description); + Drawable icon = getActivity().getDrawable(R.drawable.ic_main_icon); + return new Guidance(title, description, breadcrumb, icon); + } + + @Override + public GuidanceStylist onCreateGuidanceStylist() { + return new GuidanceStylist() { + @Override + public int onProvideLayoutId() { + return R.layout.guidedstep_second_guidance; + } + }; + } + + @Override + public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { + for (int i = 0; i < OPTION_NAMES.length; i++) { + boolean checked = false; + if (OPTION_IDS[i] == ACTION_ID_SWITCH_LEGACY_ON) { + if (DetailsActivity.USE_LEGACY_PRESENTER) { + checked = true; + } + } else if (OPTION_IDS[i] == ACTION_ID_SWITCH_LEGACY_OFF) { + if (!DetailsActivity.USE_LEGACY_PRESENTER) { + checked = true; + } + } + addCheckedAction(actions, getActivity(), OPTION_IDS[i], OPTION_NAMES[i], + OPTION_DESCRIPTIONS[i], checked); + } + } + + @Override + public void onGuidedActionClicked(GuidedAction action) { + if (action.getId() == ACTION_ID_SWITCH_LEGACY_ON) { + DetailsActivity.USE_LEGACY_PRESENTER = action.isChecked(); + } else if (action.getId() == ACTION_ID_SWITCH_LEGACY_OFF) { + DetailsActivity.USE_LEGACY_PRESENTER = !action.isChecked(); + } + getActivity().finish(); + } + + } + +} diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/MainActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/MainActivity.java index da6e0affd..8b0b04d05 100644 --- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/MainActivity.java +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/MainActivity.java @@ -59,6 +59,10 @@ public class MainActivity extends Activity { addAction(actions, DetailsActivity.class, R.string.details, R.string.details_description); actions.get(actions.size()-1).getIntent().putExtra(DetailsActivity.EXTRA_ITEM, new PhotoItem("Hello world", R.drawable.gallery_photo_1)); + addAction(actions, SearchDetailsActivity.class, R.string.search_details, + R.string.search_details_description); + actions.get(actions.size()-1).getIntent().putExtra(DetailsActivity.EXTRA_ITEM, + new PhotoItem("Hello world", R.drawable.gallery_photo_1)); addAction(actions, PlaybackOverlayActivity.class, R.string.playback, R.string.playback_description); addAction(actions, HorizontalGridTestActivity.class, R.string.hgrid, @@ -69,6 +73,9 @@ public class MainActivity extends Activity { R.string.guidedstep_description); addAction(actions, BrowseErrorActivity.class, R.string.browseerror, R.string.browseerror_description); + addAction(actions, DetailsPresenterSelectionActivity.class, + R.string.detail_presenter_options, + R.string.detail_presenter_options_description); } private void addAction(List<GuidedAction> actions, Class cls, int titleRes, int descRes) { diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/NewDetailsFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/NewDetailsFragment.java new file mode 100644 index 000000000..445e1486e --- /dev/null +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/NewDetailsFragment.java @@ -0,0 +1,254 @@ +/* + * Copyright (C) 2014 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 com.example.android.leanback; + +import android.app.Activity; +import android.content.Intent; +import android.content.res.Resources; +import android.os.Bundle; +import android.os.Handler; +import android.support.v4.app.ActivityOptionsCompat; +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.ImageCardView; +import android.support.v17.leanback.widget.ListRow; +import android.support.v17.leanback.widget.ListRowPresenter; +import android.support.v17.leanback.widget.OnActionClickedListener; +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.support.v17.leanback.widget.SparseArrayObjectAdapter; +import android.util.Log; +import android.view.View; +import android.widget.Toast; + +public class NewDetailsFragment extends android.support.v17.leanback.app.DetailsFragment { + private static final String TAG = "leanback.DetailsFragment"; + private static final String ITEM = "item"; + + private static final int NUM_ROWS = 3; + private ArrayObjectAdapter mRowsAdapter; + private PhotoItem mPhotoItem; + final CardPresenter cardPresenter = new CardPresenter(); + private BackgroundHelper mBackgroundHelper = new BackgroundHelper(); + + private static final int ACTION_PLAY = 1; + private static final int ACTION_RENT = 2; + private static final int ACTION_BUY = 3; + + private boolean TEST_OVERVIEW_ROW_ON_SECOND; + private boolean TEST_SHARED_ELEMENT_TRANSITION; + private boolean TEST_ENTRANCE_TRANSITION; + + private static final long TIME_TO_LOAD_OVERVIEW_ROW_MS = 1000; + private static final long TIME_TO_LOAD_RELATED_ROWS_MS = 2000; + + private Action mActionPlay; + private Action mActionRent; + private Action mActionBuy; + + private FullWidthDetailsOverviewSharedElementHelper mHelper; + + private void initializeTest() { + Activity activity = getActivity(); + TEST_SHARED_ELEMENT_TRANSITION = null != activity.getWindow().getSharedElementEnterTransition(); + TEST_OVERVIEW_ROW_ON_SECOND = !TEST_SHARED_ELEMENT_TRANSITION; + TEST_ENTRANCE_TRANSITION = true; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + Log.i(TAG, "onCreate"); + super.onCreate(savedInstanceState); + initializeTest(); + + setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.ic_title)); + setTitle("Leanback Sample App"); + setOnSearchClickedListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(getActivity(), SearchActivity.class); + startActivity(intent); + } + }); + + mActionPlay = new Action(ACTION_PLAY, "Play"); + mActionRent = new Action(ACTION_RENT, "Rent", "$3.99", + getResources().getDrawable(R.drawable.ic_action_a)); + mActionBuy = new Action(ACTION_BUY, "Buy $9.99"); + + ClassPresenterSelector ps = new ClassPresenterSelector(); + FullWidthDetailsOverviewRowPresenter dorPresenter = + new FullWidthDetailsOverviewRowPresenter(new DetailsDescriptionPresenter()); + dorPresenter.setOnActionClickedListener(new OnActionClickedListener() { + @Override + public void onActionClicked(Action action) { + Toast.makeText(getActivity(), action.toString(), Toast.LENGTH_SHORT).show(); + int indexOfOverviewRow = TEST_OVERVIEW_ROW_ON_SECOND ? 1 : 0; + DetailsOverviewRow dor = (DetailsOverviewRow) mRowsAdapter.get(indexOfOverviewRow); + if (action.getId() == ACTION_BUY) { + // on the UI thread, we can modify actions adapter directly + SparseArrayObjectAdapter actions = (SparseArrayObjectAdapter) + dor.getActionsAdapter(); + actions.set(ACTION_PLAY, mActionPlay); + actions.clear(ACTION_RENT); + actions.clear(ACTION_BUY); + dor.setItem(mPhotoItem.getTitle() + "(Owned)"); + dor.setImageDrawable(getResources().getDrawable(R.drawable.details_img_16x9)); + } else if (action.getId() == ACTION_RENT) { + // on the UI thread, we can modify actions adapter directly + SparseArrayObjectAdapter actions = (SparseArrayObjectAdapter) + dor.getActionsAdapter(); + actions.set(ACTION_PLAY, mActionPlay); + actions.clear(ACTION_RENT); + dor.setItem(mPhotoItem.getTitle() + "(Rented)"); + } else if (action.getId() == ACTION_PLAY) { + Intent intent = new Intent(getActivity(), PlaybackOverlayActivity.class); + getActivity().startActivity(intent); + } + } + }); + if (TEST_OVERVIEW_ROW_ON_SECOND) { + dorPresenter.setInitialState(FullWidthDetailsOverviewRowPresenter.STATE_SMALL); + } + + ps.addClassPresenter(DetailsOverviewRow.class, dorPresenter); + ps.addClassPresenter(ListRow.class, new ListRowPresenter()); + + mRowsAdapter = new ArrayObjectAdapter(ps); + + PhotoItem item = (PhotoItem) (savedInstanceState != null ? + savedInstanceState.getParcelable(ITEM) : null); + if (item != null) { + setItem(item); + } + + setOnItemViewClickedListener(new OnItemViewClickedListener() { + @Override + public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, + RowPresenter.ViewHolder rowViewHolder, Row row) { + Log.i(TAG, "onItemClicked: " + item + " row " + row); + if (item instanceof PhotoItem){ + Intent intent = new Intent(getActivity(), DetailsActivity.class); + intent.putExtra(DetailsActivity.EXTRA_ITEM, (PhotoItem) item); + + Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation( + getActivity(), + ((ImageCardView)itemViewHolder.view).getMainImageView(), + DetailsActivity.SHARED_ELEMENT_NAME).toBundle(); + getActivity().startActivity(intent, bundle); + } + } + }); + setOnItemViewSelectedListener(new OnItemViewSelectedListener() { + @Override + public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, + RowPresenter.ViewHolder rowViewHolder, Row row) { + Log.i(TAG, "onItemSelected: " + item + " row " + row); + } + }); + + if (TEST_SHARED_ELEMENT_TRANSITION) { + mHelper = new FullWidthDetailsOverviewSharedElementHelper(); + mHelper.setSharedElementEnterTransition(getActivity(), + DetailsActivity.SHARED_ELEMENT_NAME); + dorPresenter.setListener(mHelper); + dorPresenter.setParticipatingEntranceTransition(false); + } else { + dorPresenter.setParticipatingEntranceTransition(true); + } + if (TEST_ENTRANCE_TRANSITION) { + // don't run entrance transition if Activity is restored. + if (savedInstanceState == null) { + prepareEntranceTransition(); + } + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putParcelable(ITEM, mPhotoItem); + } + + public void setItem(PhotoItem photoItem) { + mPhotoItem = photoItem; + + mRowsAdapter.clear(); + new Handler().postDelayed(new Runnable() { + public void run() { + if (TEST_OVERVIEW_ROW_ON_SECOND) { + ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter); + listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1)); + listRowAdapter.add(new PhotoItem("This is a test", R.drawable.gallery_photo_2)); + listRowAdapter.add(new PhotoItem("Android TV", R.drawable.gallery_photo_3)); + listRowAdapter.add(new PhotoItem("Leanback", R.drawable.gallery_photo_4)); + HeaderItem header = new HeaderItem(0, "Search Result"); + mRowsAdapter.add(0, new ListRow(header, listRowAdapter)); + } + + Resources res = getActivity().getResources(); + DetailsOverviewRow dor = new DetailsOverviewRow(mPhotoItem.getTitle()); + dor.setImageDrawable(res.getDrawable(mPhotoItem.getImageResourceId())); + SparseArrayObjectAdapter adapter = new SparseArrayObjectAdapter(); + adapter.set(ACTION_RENT, mActionRent); + adapter.set(ACTION_BUY, mActionBuy); + dor.setActionsAdapter(adapter); + int indexOfOverviewRow = TEST_OVERVIEW_ROW_ON_SECOND ? 1 : 0; + mRowsAdapter.add(indexOfOverviewRow, dor); + setSelectedPosition(0, true); + if (TEST_SHARED_ELEMENT_TRANSITION) { + if (mHelper != null && !mHelper.getAutoStartSharedElementTransition()) { + mHelper.startPostponedEnterTransition(); + } + } + } + }, TIME_TO_LOAD_OVERVIEW_ROW_MS); + + new Handler().postDelayed(new Runnable() { + public void run() { + for (int i = 0; i < NUM_ROWS; ++i) { + ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter); + listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_1)); + listRowAdapter.add(new PhotoItem("This is a test", R.drawable.gallery_photo_2)); + listRowAdapter.add(new PhotoItem("Android TV", R.drawable.gallery_photo_3)); + listRowAdapter.add(new PhotoItem("Leanback", R.drawable.gallery_photo_4)); + HeaderItem header = new HeaderItem(i, "Row " + i); + mRowsAdapter.add(new ListRow(header, listRowAdapter)); + } + if (TEST_ENTRANCE_TRANSITION) { + startEntranceTransition(); + } + } + }, TIME_TO_LOAD_RELATED_ROWS_MS); + setAdapter(mRowsAdapter); + } + + @Override + public void onStart() { + super.onStart(); + if (mPhotoItem != null) { + mBackgroundHelper.setBackground( + getActivity(), mPhotoItem.getImageResourceId()); + } + } + +} diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchDetailsActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchDetailsActivity.java new file mode 100644 index 000000000..da9e08e59 --- /dev/null +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchDetailsActivity.java @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2014 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 com.example.android.leanback; + +/** + * Same implementation as DetailsActivity for different entries in AndroidManifest. + */ +public class SearchDetailsActivity extends DetailsActivity +{ +} |