From bfcde222e90be80c004408a0d79017670b7f0f40 Mon Sep 17 00:00:00 2001 From: Kris Giesing Date: Mon, 16 Feb 2015 15:10:05 -0800 Subject: [PATCH] Add demos for GuidedStepFragment. Make the main activity a guided step that allows the selection of other activities. Add a dedicated activity to represent a sequence of GuidedStepFragments. b/18935698 Change-Id: I16142f4d7e87b3f2f02b812faa9bff82ecf5361c --- .../SupportLeanbackDemos/AndroidManifest.xml | 14 +- .../res/drawable-hdpi/ic_main_icon.png | Bin 0 -> 4669 bytes .../res/drawable-mdpi/ic_main_icon.png | Bin 0 -> 3152 bytes .../res/drawable-xhdpi/ic_main_icon.png | Bin 0 -> 6275 bytes .../res/drawable/ic_guidedstep_option_a.png | Bin 0 -> 4230 bytes .../res/drawable/ic_guidedstep_option_b.png | Bin 0 -> 4384 bytes .../res/drawable/ic_guidedstep_option_c.png | Bin 0 -> 4306 bytes .../res/layout/{main.xml => browse.xml} | 0 .../res/layout/guidedstep_second_guidance.xml | 47 +++++ .../res/values/colors.xml | 19 ++ .../res/values/strings.xml | 29 +++ .../res/values/styles.xml | 9 + .../res/values/themes.xml | 6 + .../android/leanback/BrowseActivity.java | 26 +++ .../android/leanback/BrowseErrorActivity.java | 2 +- .../android/leanback/GuidedStepActivity.java | 190 ++++++++++++++++++ .../android/leanback/MainActivity.java | 90 +++++++-- 17 files changed, 415 insertions(+), 17 deletions(-) create mode 100644 samples/SupportLeanbackDemos/res/drawable-hdpi/ic_main_icon.png create mode 100644 samples/SupportLeanbackDemos/res/drawable-mdpi/ic_main_icon.png create mode 100644 samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_main_icon.png create mode 100644 samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_a.png create mode 100644 samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_b.png create mode 100644 samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_c.png rename samples/SupportLeanbackDemos/res/layout/{main.xml => browse.xml} (100%) create mode 100644 samples/SupportLeanbackDemos/res/layout/guidedstep_second_guidance.xml create mode 100644 samples/SupportLeanbackDemos/res/values/colors.xml create mode 100644 samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseActivity.java create mode 100644 samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepActivity.java diff --git a/samples/SupportLeanbackDemos/AndroidManifest.xml b/samples/SupportLeanbackDemos/AndroidManifest.xml index 391bcb752..e429423f3 100644 --- a/samples/SupportLeanbackDemos/AndroidManifest.xml +++ b/samples/SupportLeanbackDemos/AndroidManifest.xml @@ -14,14 +14,17 @@ android:theme="@style/Theme.Example.Leanback"> + android:label="@string/app_name"> + + @@ -44,9 +47,14 @@ android:exported="true" /> + android:exported="true" /> + + + diff --git a/samples/SupportLeanbackDemos/res/drawable-hdpi/ic_main_icon.png b/samples/SupportLeanbackDemos/res/drawable-hdpi/ic_main_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6f0c9628e3ee9d5880eb8f20402cff37398a1f4b GIT binary patch literal 4669 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 SegCm>04p;)(^?Z$^1lJgHfpQ@ literal 0 HcmV?d00001 diff --git a/samples/SupportLeanbackDemos/res/drawable-mdpi/ic_main_icon.png b/samples/SupportLeanbackDemos/res/drawable-mdpi/ic_main_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e9effc82e1990657f0b25c6dbc8d964319a17745 GIT binary patch literal 3152 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 literal 0 HcmV?d00001 diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_main_icon.png b/samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_main_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2e5651689d22466c2b61cfa643e9e005e027e7e2 GIT binary patch literal 6275 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 literal 0 HcmV?d00001 diff --git a/samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_a.png b/samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_a.png new file mode 100644 index 0000000000000000000000000000000000000000..b1afd78d3cb2c2b9653ff150ebb6d4cb02ae75b7 GIT binary patch literal 4230 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 Ks-?>2f&T~a3hP<` literal 0 HcmV?d00001 diff --git a/samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_b.png b/samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_b.png new file mode 100644 index 0000000000000000000000000000000000000000..3349108bb17d29fda1cbee9d7a126687e6bbac11 GIT binary patch literal 4384 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 KD3>c*;{FGEEHc#q literal 0 HcmV?d00001 diff --git a/samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_c.png b/samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_c.png new file mode 100644 index 0000000000000000000000000000000000000000..d92c92717f167ce43e094097be069c10f21bafcd GIT binary patch literal 4306 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 + + + + + + + + + + + + + + + + diff --git a/samples/SupportLeanbackDemos/res/values/colors.xml b/samples/SupportLeanbackDemos/res/values/colors.xml new file mode 100644 index 000000000..705ce0187 --- /dev/null +++ b/samples/SupportLeanbackDemos/res/values/colors.xml @@ -0,0 +1,19 @@ + + + + #4A4F51 + #2A2F51 + diff --git a/samples/SupportLeanbackDemos/res/values/strings.xml b/samples/SupportLeanbackDemos/res/values/strings.xml index e8840436b..09e43a685 100644 --- a/samples/SupportLeanbackDemos/res/values/strings.xml +++ b/samples/SupportLeanbackDemos/res/values/strings.xml @@ -17,4 +17,33 @@ MainActivity + Demo + Activities + Browse + BrowseFragment test + Search + SearchFragment test + Details + DetailsFragment test + Playback + PlaybackOverlay test + Horizontal Grid + HorizontalGridView test + Vertical Grid + VerticalGridView test + Guided Step + GuidedStepFragment test + Browse Error + BrowseError test + + + First + First step of guided sequence + Guided Steps + Second + Showcasing different action configurations + Guided Steps + Third + Third step of guided sequence + Guided Steps diff --git a/samples/SupportLeanbackDemos/res/values/styles.xml b/samples/SupportLeanbackDemos/res/values/styles.xml index 17ea0efad..dd86e7ec8 100644 --- a/samples/SupportLeanbackDemos/res/values/styles.xml +++ b/samples/SupportLeanbackDemos/res/values/styles.xml @@ -20,4 +20,13 @@ + + + \ No newline at end of file diff --git a/samples/SupportLeanbackDemos/res/values/themes.xml b/samples/SupportLeanbackDemos/res/values/themes.xml index 22a41f06d..5d7c2320a 100644 --- a/samples/SupportLeanbackDemos/res/values/themes.xml +++ b/samples/SupportLeanbackDemos/res/values/themes.xml @@ -25,4 +25,10 @@ @style/Widget.Example.Leanback.Title.Text @style/Widget.Example.Leanback.Rows.VerticalGridView + + diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseActivity.java new file mode 100644 index 000000000..fdd81c638 --- /dev/null +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseActivity.java @@ -0,0 +1,26 @@ +/* + * 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.os.Bundle; + +public class BrowseActivity extends Activity { + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.browse); + } +} diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseErrorActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseErrorActivity.java index f2f61925f..022310191 100644 --- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseErrorActivity.java +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseErrorActivity.java @@ -34,7 +34,7 @@ public class BrowseErrorActivity extends Activity public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.main); + setContentView(R.layout.browse); testError(); } diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepActivity.java new file mode 100644 index 000000000..3a3d712be --- /dev/null +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepActivity.java @@ -0,0 +1,190 @@ +/* + * 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 GuidedStepActivity extends Activity { + + private static final int CONTINUE = 0; + private static final int BACK = 1; + + private static final int OPTION_CHECK_SET_ID = 10; + private static final int DEFAULT_OPTION = 0; + private static final String[] OPTION_NAMES = { "Option A", "Option B", "Option C" }; + private static final String[] OPTION_DESCRIPTIONS = { "Here's one thing you can do", + "Here's another thing you can do", "Here's one more thing you can do" }; + private static final int[] OPTION_DRAWABLES = { R.drawable.ic_guidedstep_option_a, + R.drawable.ic_guidedstep_option_b, R.drawable.ic_guidedstep_option_c }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + GuidedStepFragment.add(getFragmentManager(), new FirstStepFragment()); + } + + private static void addAction(List actions, long id, String title, String desc) { + actions.add(new GuidedAction.Builder() + .id(id) + .title(title) + .description(desc) + .build()); + } + + private static void addCheckedAction(List actions, int iconResId, Context context, + String title, String desc) { + actions.add(new GuidedAction.Builder() + .title(title) + .description(desc) + .checkSetId(OPTION_CHECK_SET_ID) + .iconResourceId(iconResId, context) + .build()); + } + + /** + * The first fragment is instantiated via XML, so it must be public. + */ + public static class FirstStepFragment extends GuidedStepFragment { + @Override + public int onProvideTheme() { + return R.style.Theme_Example_Leanback_GuidedStep_First; + } + + @Override + public Guidance onCreateGuidance(Bundle savedInstanceState) { + String title = getString(R.string.guidedstep_first_title); + String breadcrumb = getString(R.string.guidedstep_first_breadcrumb); + String description = getString(R.string.guidedstep_first_description); + Drawable icon = getActivity().getDrawable(R.drawable.ic_main_icon); + return new Guidance(title, description, breadcrumb, icon); + } + + @Override + public void onCreateActions(List actions, Bundle savedInstanceState) { + addAction(actions, CONTINUE, "Continue", "Let's do it"); + addAction(actions, BACK, "Cancel", "Nevermind"); + } + + @Override + public void onGuidedActionClicked(GuidedAction action) { + FragmentManager fm = getFragmentManager(); + if (action.getId() == CONTINUE) { + GuidedStepFragment.add(fm, new SecondStepFragment()); + } else { + getActivity().finish(); + } + } + } + + private static class SecondStepFragment 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 actions, Bundle savedInstanceState) { + String desc = "The description can be quite long as well. "; + desc += "Just be sure to set multilineDescription to true in the GuidedAction."; + actions.add(new GuidedAction.Builder() + .title("Note that Guided Actions can have titles that are quite long.") + .description(desc) + .multilineDescription(true) + .infoOnly(true) + .enabled(false) + .build()); + for (int i = 0; i < OPTION_NAMES.length; i++) { + addCheckedAction(actions, OPTION_DRAWABLES[i], getActivity(), OPTION_NAMES[i], + OPTION_DESCRIPTIONS[i]); + if (i == DEFAULT_OPTION) { + actions.get(actions.size() -1).setChecked(true); + } + } + } + + @Override + public void onGuidedActionClicked(GuidedAction action) { + FragmentManager fm = getFragmentManager(); + GuidedStepFragment.add(fm, new ThirdStepFragment(getSelectedActionPosition()-1)); + } + + } + + private static class ThirdStepFragment extends GuidedStepFragment { + private final int mOption; + + public ThirdStepFragment(int option) { + mOption = option; + } + + @Override + public Guidance onCreateGuidance(Bundle savedInstanceState) { + String title = getString(R.string.guidedstep_third_title); + String breadcrumb = getString(R.string.guidedstep_third_breadcrumb); + String description = "You chose: " + OPTION_NAMES[mOption]; + Drawable icon = getActivity().getDrawable(R.drawable.ic_main_icon); + return new Guidance(title, description, breadcrumb, icon); + } + + @Override + public void onCreateActions(List actions, Bundle savedInstanceState) { + addAction(actions, CONTINUE, "Done", "All finished"); + addAction(actions, BACK, "Back", "Forgot something..."); + } + + @Override + public void onGuidedActionClicked(GuidedAction action) { + if (action.getId() == CONTINUE) { + getActivity().finish(); + } else { + getFragmentManager().popBackStack(); + } + } + + } + +} diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/MainActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/MainActivity.java index 74e7fb216..90b1c6fc0 100644 --- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/MainActivity.java +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/MainActivity.java @@ -1,28 +1,92 @@ /* * 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 + * 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 + * 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. + * 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.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.Guidance; + +import java.util.List; +import java.util.ArrayList; + +/** + * Activity that allows navigation among the demo activities. + */ +public class MainActivity extends Activity { + + private GuidedStepFragment mGuidedStepFragment; -public class MainActivity extends Activity -{ - /** Called when the activity is first created. */ @Override - public void onCreate(Bundle savedInstanceState) - { + protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.main); + + mGuidedStepFragment = new StepFragment(); + GuidedStepFragment.add(getFragmentManager(), mGuidedStepFragment); } + + private static class StepFragment extends GuidedStepFragment { + @Override + public Guidance onCreateGuidance(Bundle savedInstanceState) { + String title = getString(R.string.main_title); + String breadcrumb = getString(R.string.main_breadcrumb); + String description = ""; + Drawable icon = getActivity().getDrawable(R.drawable.ic_main_icon); + return new Guidance(title, description, breadcrumb, icon); + } + + @Override + public void onCreateActions(List actions, Bundle savedInstanceState) { + addAction(actions, BrowseActivity.class, R.string.browse, R.string.browse_description); + addAction(actions, SearchActivity.class, R.string.search, R.string.search_description); + 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, PlaybackOverlayActivity.class, R.string.playback, + R.string.playback_description); + addAction(actions, HorizontalGridTestActivity.class, R.string.hgrid, + R.string.hgrid_description); + addAction(actions, VerticalGridActivity.class, R.string.vgrid, + R.string.vgrid_description); + addAction(actions, GuidedStepActivity.class, R.string.guidedstep, + R.string.guidedstep_description); + addAction(actions, BrowseErrorActivity.class, R.string.browseerror, + R.string.browseerror_description); + } + + private void addAction(List actions, Class cls, int titleRes, int descRes) { + actions.add(new GuidedAction.Builder() + .intent(new Intent(getActivity(), cls)) + .title(getString(titleRes)) + .description(getString(descRes)) + .build()); + } + + @Override + public void onGuidedActionClicked(GuidedAction action) { + Intent intent = action.getIntent(); + if (intent != null) { + startActivity(intent); + } + } + + } + }