GuidedStepActivity.java revision 9f4e25b607fc4ec53b4f2b4996f49481857afdab
1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.example.android.leanback; 18 19import android.app.Activity; 20import android.app.FragmentManager; 21import android.content.Context; 22import android.content.Intent; 23import android.graphics.drawable.Drawable; 24import android.os.Bundle; 25import android.support.v17.leanback.app.GuidedStepFragment; 26import android.support.v17.leanback.widget.GuidedAction; 27import android.support.v17.leanback.widget.GuidanceStylist; 28import android.support.v17.leanback.widget.GuidanceStylist.Guidance; 29 30import java.util.List; 31import java.util.ArrayList; 32 33/** 34 * Activity that showcases different aspects of GuidedStepFragments. 35 */ 36public class GuidedStepActivity extends Activity { 37 38 private static final int CONTINUE = 1; 39 private static final int BACK = 2; 40 41 private static final int OPTION_CHECK_SET_ID = 10; 42 private static final int DEFAULT_OPTION = 0; 43 private static final String[] OPTION_NAMES = { "Option A", "Option B", "Option C" }; 44 private static final String[] OPTION_DESCRIPTIONS = { "Here's one thing you can do", 45 "Here's another thing you can do", "Here's one more thing you can do" }; 46 private static final int[] OPTION_DRAWABLES = { R.drawable.ic_guidedstep_option_a, 47 R.drawable.ic_guidedstep_option_b, R.drawable.ic_guidedstep_option_c }; 48 49 @Override 50 protected void onCreate(Bundle savedInstanceState) { 51 super.onCreate(savedInstanceState); 52 GuidedStepFragment.add(getFragmentManager(), new FirstStepFragment()); 53 } 54 55 private static void addAction(List<GuidedAction> actions, long id, String title, String desc) { 56 actions.add(new GuidedAction.Builder() 57 .id(id) 58 .title(title) 59 .description(desc) 60 .build()); 61 } 62 63 private static void addCheckedAction(List<GuidedAction> actions, int iconResId, Context context, 64 String title, String desc) { 65 actions.add(new GuidedAction.Builder() 66 .title(title) 67 .description(desc) 68 .checkSetId(OPTION_CHECK_SET_ID) 69 .iconResourceId(iconResId, context) 70 .build()); 71 } 72 73 /** 74 * The first fragment is instantiated via XML, so it must be public. 75 */ 76 public static class FirstStepFragment extends GuidedStepFragment { 77 @Override 78 public int onProvideTheme() { 79 return R.style.Theme_Example_Leanback_GuidedStep_First; 80 } 81 82 @Override 83 public Guidance onCreateGuidance(Bundle savedInstanceState) { 84 String title = getString(R.string.guidedstep_first_title); 85 String breadcrumb = getString(R.string.guidedstep_first_breadcrumb); 86 String description = getString(R.string.guidedstep_first_description); 87 Drawable icon = getActivity().getDrawable(R.drawable.ic_main_icon); 88 return new Guidance(title, description, breadcrumb, icon); 89 } 90 91 @Override 92 public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { 93 addAction(actions, CONTINUE, "Continue", "Let's do it"); 94 addAction(actions, BACK, "Cancel", "Nevermind"); 95 } 96 97 @Override 98 public void onGuidedActionClicked(GuidedAction action) { 99 FragmentManager fm = getFragmentManager(); 100 if (action.getId() == CONTINUE) { 101 GuidedStepFragment.add(fm, new SecondStepFragment()); 102 } else { 103 getActivity().finish(); 104 } 105 } 106 } 107 108 private static class SecondStepFragment extends GuidedStepFragment { 109 110 private int mSelectedOption = DEFAULT_OPTION; 111 112 @Override 113 public Guidance onCreateGuidance(Bundle savedInstanceState) { 114 String title = getString(R.string.guidedstep_second_title); 115 String breadcrumb = getString(R.string.guidedstep_second_breadcrumb); 116 String description = getString(R.string.guidedstep_second_description); 117 Drawable icon = getActivity().getDrawable(R.drawable.ic_main_icon); 118 return new Guidance(title, description, breadcrumb, icon); 119 } 120 121 @Override 122 public GuidanceStylist onCreateGuidanceStylist() { 123 return new GuidanceStylist() { 124 @Override 125 public int onProvideLayoutId() { 126 return R.layout.guidedstep_second_guidance; 127 } 128 }; 129 } 130 131 @Override 132 public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { 133 String desc = "The description can be quite long as well. "; 134 desc += "Just be sure to set multilineDescription to true in the GuidedAction."; 135 actions.add(new GuidedAction.Builder() 136 .title("Note that Guided Actions can have titles that are quite long.") 137 .description(desc) 138 .multilineDescription(true) 139 .infoOnly(true) 140 .enabled(false) 141 .build()); 142 for (int i = 0; i < OPTION_NAMES.length; i++) { 143 addCheckedAction(actions, OPTION_DRAWABLES[i], getActivity(), OPTION_NAMES[i], 144 OPTION_DESCRIPTIONS[i]); 145 if (i == DEFAULT_OPTION) { 146 actions.get(actions.size() -1).setChecked(true); 147 } 148 } 149 addAction(actions, CONTINUE, "Continue", ""); 150 } 151 152 @Override 153 public void onGuidedActionClicked(GuidedAction action) { 154 if (action.getId() == CONTINUE) { 155 FragmentManager fm = getFragmentManager(); 156 GuidedStepFragment.add(fm, new ThirdStepFragment(mSelectedOption)); 157 } else { 158 mSelectedOption = getSelectedActionPosition()-1; 159 } 160 } 161 162 } 163 164 private static class ThirdStepFragment extends GuidedStepFragment { 165 private final int mOption; 166 167 public ThirdStepFragment(int option) { 168 mOption = option; 169 } 170 171 @Override 172 public Guidance onCreateGuidance(Bundle savedInstanceState) { 173 String title = getString(R.string.guidedstep_third_title); 174 String breadcrumb = getString(R.string.guidedstep_third_breadcrumb); 175 String description = "You chose: " + OPTION_NAMES[mOption]; 176 Drawable icon = getActivity().getDrawable(R.drawable.ic_main_icon); 177 return new Guidance(title, description, breadcrumb, icon); 178 } 179 180 @Override 181 public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { 182 addAction(actions, CONTINUE, "Done", "All finished"); 183 addAction(actions, BACK, "Back", "Forgot something..."); 184 } 185 186 @Override 187 public void onGuidedActionClicked(GuidedAction action) { 188 if (action.getId() == CONTINUE) { 189 getActivity().finish(); 190 } else { 191 getFragmentManager().popBackStack(); 192 } 193 } 194 195 } 196 197} 198