1 // CHECKSTYLE:OFF Generated code 2 /* This file is auto-generated from GuidedStepActivity.java. DO NOT MODIFY. */ 3 4 /* 5 * Copyright (C) 2014 The Android Open Source Project 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 */ 19 20 package com.example.android.leanback; 21 22 import android.content.Context; 23 import android.content.res.Configuration; 24 import android.graphics.drawable.Drawable; 25 import android.os.Bundle; 26 import android.text.InputType; 27 import android.text.TextUtils; 28 import android.util.Log; 29 import android.view.LayoutInflater; 30 import android.view.View; 31 import android.view.ViewGroup; 32 import android.view.inputmethod.EditorInfo; 33 34 import androidx.core.content.res.ResourcesCompat; 35 import androidx.fragment.app.Fragment; 36 import androidx.fragment.app.FragmentActivity; 37 import androidx.fragment.app.FragmentManager; 38 import androidx.leanback.app.GuidedStepSupportFragment; 39 import androidx.leanback.widget.GuidanceStylist; 40 import androidx.leanback.widget.GuidanceStylist.Guidance; 41 import androidx.leanback.widget.GuidedAction; 42 import androidx.leanback.widget.GuidedActionsStylist; 43 import androidx.leanback.widget.GuidedDatePickerAction; 44 45 import java.util.ArrayList; 46 import java.util.Calendar; 47 import java.util.List; 48 49 /** 50 * Activity that showcases different aspects of GuidedStepSupportFragments. 51 */ 52 public class GuidedStepSupportActivity extends FragmentActivity { 53 54 private static final int BACK = 2; 55 56 private static final int FIRST_NAME = 3; 57 private static final int LAST_NAME = 4; 58 private static final int PASSWORD = 5; 59 private static final int PAYMENT = 6; 60 private static final int NEW_PAYMENT = 7; 61 private static final int PAYMENT_EXPIRE = 8; 62 private static final int REFRESH = 9; 63 64 private static final long RADIO_ID_BASE = 0; 65 private static final long CHECKBOX_ID_BASE = 100; 66 67 private static final long DEFAULT_OPTION = RADIO_ID_BASE; 68 69 private static final String[] OPTION_NAMES = { "Option A", "Option B", "Option C" }; 70 private static final String[] OPTION_DESCRIPTIONS = { "Here's one thing you can do", 71 "Here's another thing you can do", "Here's one more thing you can do" }; 72 73 private static final String TAG = GuidedStepSupportActivity.class.getSimpleName(); 74 75 @Override 76 protected void onCreate(Bundle savedInstanceState) { 77 Log.v(TAG, "onCreate"); 78 super.onCreate(savedInstanceState); 79 setContentView(R.layout.guided_step_activity); 80 if (savedInstanceState == null) { 81 GuidedStepSupportFragment.addAsRoot(this, new FirstStepFragment(), R.id.lb_guidedstep_host); 82 } 83 } 84 85 @Override 86 public void onConfigurationChanged(Configuration newConfig) { 87 Log.v(TAG, "onConfigurationChanged"); 88 super.onConfigurationChanged(newConfig); 89 } 90 91 @Override 92 protected void onSaveInstanceState(Bundle outState) { 93 Log.v(TAG, "onSaveInstanceState"); 94 super.onSaveInstanceState(outState); 95 } 96 97 @Override 98 protected void onRestoreInstanceState(Bundle savedInstanceState) { 99 Log.v(TAG, "onRestoreInstanceState"); 100 super.onRestoreInstanceState(savedInstanceState); 101 } 102 103 private static GuidedAction addAction(List<GuidedAction> actions, long id, String title, 104 String desc) { 105 GuidedAction action; 106 actions.add(action = new GuidedAction.Builder(null) 107 .id(id) 108 .title(title) 109 .description(desc) 110 .build()); 111 return action; 112 } 113 114 private static GuidedAction addAction(List<GuidedAction> actions, long id, String title, 115 String desc, List<GuidedAction> subActions) { 116 GuidedAction action; 117 actions.add(action = new GuidedAction.Builder(null) 118 .id(id) 119 .title(title) 120 .description(desc) 121 .subActions(subActions) 122 .build()); 123 return action; 124 } 125 126 private static GuidedAction addEditableAction(Context context, List<GuidedAction> actions, 127 long id, String title, String desc) { 128 GuidedAction action; 129 actions.add(action = new GuidedAction.Builder(context) 130 .id(id) 131 .title(title) 132 .description(desc) 133 .editable(true) 134 .icon(R.drawable.lb_ic_search_mic) 135 .build()); 136 return action; 137 } 138 139 private static GuidedAction addEditableAction(List<GuidedAction> actions, long id, String title, 140 String editTitle, String desc) { 141 GuidedAction action; 142 actions.add(action = new GuidedAction.Builder(null) 143 .id(id) 144 .title(title) 145 .editTitle(editTitle) 146 .description(desc) 147 .editable(true) 148 .build()); 149 return action; 150 } 151 152 private static GuidedAction addEditableAction(List<GuidedAction> actions, long id, String title, 153 String editTitle, int editInputType, String desc, String editDesc) { 154 GuidedAction action; 155 actions.add(action = new GuidedAction.Builder(null) 156 .id(id) 157 .title(title) 158 .editTitle(editTitle) 159 .editInputType(editInputType) 160 .description(desc) 161 .editDescription(editDesc) 162 .editable(true) 163 .build()); 164 return action; 165 } 166 167 private static GuidedDatePickerAction addDatePickerAction(List<GuidedAction> actions, long id, 168 String title) { 169 GuidedDatePickerAction action; 170 actions.add(action = new GuidedDatePickerAction.Builder(null) 171 .id(id) 172 .title(title) 173 .datePickerFormat("MY") 174 .build()); 175 return action; 176 } 177 178 private static GuidedAction addEditableDescriptionAction(List<GuidedAction> actions, long id, 179 String title, String desc, String editDescription, int descriptionEditInputType) { 180 GuidedAction action; 181 actions.add(action = new GuidedAction.Builder(null) 182 .id(id) 183 .title(title) 184 .description(desc) 185 .editDescription(editDescription) 186 .descriptionEditInputType(descriptionEditInputType) 187 .descriptionEditable(true) 188 .build()); 189 return action; 190 } 191 192 private static GuidedAction addCheckedAction(List<GuidedAction> actions, long id, 193 String title, String desc, int checkSetId) { 194 GuidedAction action; 195 actions.add(action = new GuidedAction.Builder(null) 196 .id(id) 197 .title(title) 198 .description(desc) 199 .checkSetId(checkSetId) 200 .build()); 201 return action; 202 } 203 204 public static class FirstStepFragment extends GuidedStepSupportFragment { 205 206 @Override 207 public int onProvideTheme() { 208 return R.style.Theme_Example_Leanback_GuidedStep_First; 209 } 210 211 @Override 212 public Guidance onCreateGuidance(Bundle savedInstanceState) { 213 String title = getString(R.string.guidedstep_first_title); 214 String breadcrumb = getString(R.string.guidedstep_first_breadcrumb); 215 String description = getString(R.string.guidedstep_first_description); 216 final Context context = getActivity(); 217 Drawable icon = ResourcesCompat.getDrawable(context.getResources(), 218 R.drawable.ic_main_icon, context.getTheme()); 219 return new Guidance(title, description, breadcrumb, icon); 220 } 221 222 @Override 223 public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { 224 Context context = getActivity(); 225 actions.add(new GuidedAction.Builder(context) 226 .clickAction(GuidedAction.ACTION_ID_CONTINUE) 227 .description("Let's do it") 228 .build()); 229 actions.add(new GuidedAction.Builder(context) 230 .id(REFRESH) 231 .title("Refresh") 232 .build()); 233 actions.add(new GuidedAction.Builder(context) 234 .clickAction(GuidedAction.ACTION_ID_CANCEL) 235 .description("Never mind") 236 .build()); 237 } 238 239 @Override 240 public void onGuidedActionClicked(GuidedAction action) { 241 FragmentManager fm = getFragmentManager(); 242 if (action.getId() == GuidedAction.ACTION_ID_CONTINUE) { 243 GuidedStepSupportFragment.add(fm, new SecondStepFragment(), R.id.lb_guidedstep_host); 244 } else if (action.getId() == REFRESH) { 245 // swap actions position and change content: 246 Context context = getActivity(); 247 ArrayList<GuidedAction> newActions = new ArrayList(); 248 newActions.add(new GuidedAction.Builder(context) 249 .id(REFRESH) 250 .title("Refresh done") 251 .build()); 252 newActions.add(new GuidedAction.Builder(context) 253 .clickAction(GuidedAction.ACTION_ID_CONTINUE) 254 .description("Let's do it") 255 .build()); 256 newActions.add(new GuidedAction.Builder(context) 257 .clickAction(GuidedAction.ACTION_ID_CANCEL) 258 .description("Never mind") 259 .build()); 260 //setActionsDiffCallback(null); 261 setActions(newActions); 262 } else if (action.getId() == GuidedAction.ACTION_ID_CANCEL){ 263 finishGuidedStepSupportFragments(); 264 } 265 } 266 } 267 268 public interface NewPaymentFragmentTarget { 269 void onNewPaymentFragmentStarted(); 270 void onNewPaymentAdded(int selection); 271 } 272 273 static ArrayList<String> sCards = new ArrayList<String>(); 274 static int sSelectedCard = -1; 275 static { 276 sCards.add("Visa-1234"); 277 sCards.add("Master-4321"); 278 } 279 280 public static class NewPaymentStepFragment extends GuidedStepSupportFragment { 281 282 NewPaymentFragmentTarget mNewPaymentTarget; 283 284 @Override 285 public void onCreate(Bundle savedInstance) { 286 super.onCreate(savedInstance); 287 Fragment targetFragment = getTargetFragment(); 288 if (targetFragment instanceof NewPaymentFragmentTarget) { 289 mNewPaymentTarget = ((NewPaymentFragmentTarget) targetFragment); 290 mNewPaymentTarget.onNewPaymentFragmentStarted(); 291 } 292 } 293 294 @Override 295 public Guidance onCreateGuidance(Bundle savedInstanceState) { 296 String title = getString(R.string.guidedstep_newpayment_title); 297 String breadcrumb = getString(R.string.guidedstep_newpayment_breadcrumb); 298 String description = getString(R.string.guidedstep_newpayment_description); 299 final Context context = getActivity(); 300 Drawable icon = ResourcesCompat.getDrawable(context.getResources(), 301 R.drawable.ic_main_icon, context.getTheme()); 302 return new Guidance(title, description, breadcrumb, icon); 303 } 304 305 @Override 306 public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { 307 addEditableAction(actions, NEW_PAYMENT, "Input credit card number", "", 308 InputType.TYPE_CLASS_NUMBER, 309 "Input credit card number", "Input credit card number"); 310 addDatePickerAction(actions, PAYMENT_EXPIRE, "Exp:"); 311 } 312 313 @Override 314 public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) { 315 Context context = getActivity(); 316 actions.add(new GuidedAction.Builder(context).clickAction(GuidedAction.ACTION_ID_OK) 317 .build()); 318 actions.get(actions.size() - 1).setEnabled(false); 319 } 320 321 @Override 322 public void onGuidedActionClicked(GuidedAction action) { 323 if (action.getId() == GuidedAction.ACTION_ID_OK) { 324 CharSequence desc = findActionById(NEW_PAYMENT).getDescription(); 325 String cardNumber = desc.subSequence(desc.length() - 4, desc.length()).toString(); 326 String card; 327 if ((Integer.parseInt(cardNumber) & 1) == 0) { 328 card = "Visa "+cardNumber; 329 } else { 330 card = "Master "+cardNumber; 331 } 332 int selection = sCards.size(); 333 sCards.add(card); 334 if (mNewPaymentTarget != null) { 335 mNewPaymentTarget.onNewPaymentAdded(selection); 336 } 337 popBackStackToGuidedStepSupportFragment(NewPaymentStepFragment.class, 338 FragmentManager.POP_BACK_STACK_INCLUSIVE); 339 } 340 } 341 342 @Override 343 public long onGuidedActionEditedAndProceed(GuidedAction action) { 344 if (action.getId() == NEW_PAYMENT) { 345 CharSequence editTitle = action.getEditTitle(); 346 if (isCardNumberValid(editTitle)) { 347 editTitle = editTitle.subSequence(editTitle.length() - 4, editTitle.length()); 348 action.setDescription("Visa XXXX-XXXX-XXXX-" + editTitle); 349 updateOkButton(isExpDateValid(findActionById(PAYMENT_EXPIRE))); 350 return GuidedAction.ACTION_ID_NEXT; 351 } else if (editTitle.length() == 0) { 352 action.setDescription("Input credit card number"); 353 updateOkButton(false); 354 return GuidedAction.ACTION_ID_CURRENT; 355 } else { 356 action.setDescription("Error credit card number"); 357 updateOkButton(false); 358 return GuidedAction.ACTION_ID_CURRENT; 359 } 360 } else if (action.getId() == PAYMENT_EXPIRE) { 361 updateOkButton(isExpDateValid(action) && 362 isCardNumberValid(findActionById(NEW_PAYMENT).getEditTitle())); 363 } 364 return GuidedAction.ACTION_ID_NEXT; 365 } 366 367 boolean isCardNumberValid(CharSequence number) { 368 return TextUtils.isDigitsOnly(number) && number.length() == 16; 369 } 370 371 boolean isExpDateValid(GuidedAction action) { 372 long date = ((GuidedDatePickerAction) action).getDate(); 373 Calendar c = Calendar.getInstance(); 374 c.setTimeInMillis(date); 375 return Calendar.getInstance().before(c); 376 } 377 378 void updateOkButton(boolean enabled) { 379 findButtonActionById(GuidedAction.ACTION_ID_OK).setEnabled(enabled); 380 notifyButtonActionChanged(findButtonActionPositionById(GuidedAction.ACTION_ID_OK)); 381 } 382 } 383 384 public static class SecondStepFragment extends GuidedStepSupportFragment 385 implements NewPaymentFragmentTarget { 386 387 388 boolean mExpandPaymentListInOnCreateView; 389 390 @Override 391 public void onNewPaymentAdded(int selection) { 392 // if a new payment is added, we dont need expand the sub actions list. 393 mExpandPaymentListInOnCreateView = false; 394 sSelectedCard = selection; 395 updatePaymentAction(findActionById(PAYMENT)); 396 findButtonActionById(GuidedAction.ACTION_ID_CONTINUE).setEnabled(sSelectedCard != -1); 397 } 398 399 @Override 400 public void onNewPaymentFragmentStarted() { 401 // if a new payment fragment is opened, when come back we should expand the payment 402 // sub actions list unless user created a new payment in onNewPaymentAdded 403 mExpandPaymentListInOnCreateView = true; 404 } 405 406 @Override 407 public GuidedActionsStylist onCreateActionsStylist() { 408 return new GuidedActionsStylist() { 409 @Override 410 protected void setupImeOptions(GuidedActionsStylist.ViewHolder vh, 411 GuidedAction action) { 412 if (action.getId() == PASSWORD) { 413 vh.getEditableDescriptionView().setImeActionLabel("Confirm!", 414 EditorInfo.IME_ACTION_DONE); 415 } else { 416 super.setupImeOptions(vh, action); 417 } 418 } 419 }; 420 } 421 422 @Override 423 public Guidance onCreateGuidance(Bundle savedInstanceState) { 424 String title = getString(R.string.guidedstep_second_title); 425 String breadcrumb = getString(R.string.guidedstep_second_breadcrumb); 426 String description = getString(R.string.guidedstep_second_description); 427 final Context context = getActivity(); 428 Drawable icon = ResourcesCompat.getDrawable(context.getResources(), 429 R.drawable.ic_main_icon, context.getTheme()); 430 return new Guidance(title, description, breadcrumb, icon); 431 } 432 433 @Override 434 public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { 435 addEditableAction(getActivity(), actions, FIRST_NAME, "Pat", "Your first name"); 436 addEditableAction(getActivity(), actions, LAST_NAME, "Smith", "Your last name"); 437 List<GuidedAction> subActions = new ArrayList<GuidedAction>(); 438 updatePaymentAction(addAction(actions, PAYMENT, "Select Payment", "", subActions)); 439 addEditableDescriptionAction(actions, PASSWORD, "Password", "", "", 440 InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 441 } 442 443 @Override 444 public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) { 445 actions.add(new GuidedAction.Builder(getActivity()) 446 .clickAction(GuidedAction.ACTION_ID_CONTINUE) 447 .description("Continue") 448 .enabled(isPasswordValid() && isPaymentValid()) 449 .build()); 450 } 451 452 @Override 453 public void onGuidedActionClicked(GuidedAction action) { 454 if (action.getId() == GuidedAction.ACTION_ID_CONTINUE) { 455 FragmentManager fm = getFragmentManager(); 456 GuidedStepSupportFragment.add(fm, new ThirdStepFragment(), R.id.lb_guidedstep_host); 457 } 458 } 459 460 void updatePaymentAction(GuidedAction paymentAction) { 461 List<GuidedAction> subActions = paymentAction.getSubActions(); 462 subActions.clear(); 463 for (int i = 0; i < sCards.size(); i++) { 464 addCheckedAction(subActions, -1, sCards.get(i), "", 465 GuidedAction.DEFAULT_CHECK_SET_ID); 466 if (i == sSelectedCard) { 467 subActions.get(i).setChecked(true); 468 } 469 } 470 addAction(subActions, NEW_PAYMENT, "Add New Card", ""); 471 paymentAction.setDescription(sSelectedCard == -1 ? "" : sCards.get(sSelectedCard)); 472 } 473 474 @Override 475 public long onGuidedActionEditedAndProceed(GuidedAction action) { 476 if (action.getId() == PASSWORD) { 477 CharSequence password = action.getEditDescription(); 478 if (password.length() > 0) { 479 if (isPaymentValid()) { 480 updateContinue(true); 481 return GuidedAction.ACTION_ID_NEXT; 482 } else { 483 updateContinue(false); 484 return GuidedAction.ACTION_ID_CURRENT; 485 } 486 } else { 487 updateContinue(false); 488 return GuidedAction.ACTION_ID_CURRENT; 489 } 490 } 491 return GuidedAction.ACTION_ID_NEXT; 492 } 493 494 @Override 495 public boolean onSubGuidedActionClicked(GuidedAction action) { 496 if (action.isChecked()) { 497 String payment = action.getTitle().toString(); 498 for (int i = 0; i < sCards.size(); i++) { 499 if (payment.equals(sCards.get(i))) { 500 sSelectedCard = i; 501 findActionById(PAYMENT).setDescription(payment); 502 notifyActionChanged(findActionPositionById(PAYMENT)); 503 updateContinue(isPasswordValid()); 504 break; 505 } 506 } 507 return true; 508 } else { 509 FragmentManager fm = getFragmentManager(); 510 NewPaymentStepFragment newPaymentFragment = new NewPaymentStepFragment(); 511 newPaymentFragment.setTargetFragment(this, 0); 512 GuidedStepSupportFragment.add(fm, newPaymentFragment, R.id.lb_guidedstep_host); 513 return false; 514 } 515 } 516 517 @Override 518 public View onCreateView(LayoutInflater inflater, ViewGroup container, 519 Bundle savedInstanceState) { 520 View view = super.onCreateView(inflater, container, savedInstanceState); 521 if (mExpandPaymentListInOnCreateView) { 522 expandAction(findActionById(PAYMENT), false); 523 } 524 return view; 525 } 526 527 boolean isPaymentValid() { 528 CharSequence paymentType = findActionById(PAYMENT).getDescription(); 529 return (paymentType.length() >= 4 && 530 paymentType.subSequence(0, 4).toString().equals("Visa")) || 531 (paymentType.length() >= 6 && 532 paymentType.subSequence(0, 6).toString().equals("Master")); 533 } 534 535 boolean isPasswordValid() { 536 return findActionById(PASSWORD).getEditDescription().length() > 0; 537 } 538 539 void updateContinue(boolean enabled) { 540 findButtonActionById(GuidedAction.ACTION_ID_CONTINUE).setEnabled(enabled); 541 notifyButtonActionChanged(findButtonActionPositionById( 542 GuidedAction.ACTION_ID_CONTINUE)); 543 } 544 } 545 546 public static class ThirdStepFragment extends GuidedStepSupportFragment { 547 548 private long mSelectedOption = DEFAULT_OPTION; 549 550 @Override 551 public Guidance onCreateGuidance(Bundle savedInstanceState) { 552 String title = getString(R.string.guidedstep_third_title); 553 String breadcrumb = getString(R.string.guidedstep_third_breadcrumb); 554 String description = getString(R.string.guidedstep_third_description); 555 final Context context = getActivity(); 556 Drawable icon = ResourcesCompat.getDrawable(context.getResources(), 557 R.drawable.ic_main_icon, context.getTheme()); 558 return new Guidance(title, description, breadcrumb, icon); 559 } 560 561 @Override 562 public GuidanceStylist onCreateGuidanceStylist() { 563 return new GuidanceStylist() { 564 @Override 565 public int onProvideLayoutId() { 566 return R.layout.guidedstep_second_guidance; 567 } 568 }; 569 } 570 571 @Override 572 public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { 573 String desc = "The description can be quite long as well. " 574 + "Just be sure to set multilineDescription to true in the GuidedAction." 575 + "For testing purpose we make this line even longer since " 576 + "multilineDescriptionMinLines will be set to 2."; 577 actions.add(new GuidedAction.Builder(getActivity()) 578 .title("Note that Guided Actions can have titles that are quite long.") 579 .description(desc) 580 .multilineDescription(true) 581 .infoOnly(true) 582 .enabled(true) 583 .focusable(false) 584 .build()); 585 for (int i = 0; i < OPTION_NAMES.length; i++) { 586 addCheckedAction(actions, RADIO_ID_BASE + i, OPTION_NAMES[i], 587 OPTION_DESCRIPTIONS[i], GuidedAction.DEFAULT_CHECK_SET_ID); 588 if (i == DEFAULT_OPTION) { 589 actions.get(actions.size() -1).setChecked(true); 590 } 591 } 592 for (int i = 0; i < OPTION_NAMES.length; i++) { 593 addCheckedAction(actions, CHECKBOX_ID_BASE + i, OPTION_NAMES[i], 594 OPTION_DESCRIPTIONS[i], GuidedAction.CHECKBOX_CHECK_SET_ID); 595 } 596 } 597 598 @Override 599 public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) { 600 actions.add(new GuidedAction.Builder(getActivity()) 601 .clickAction(GuidedAction.ACTION_ID_CONTINUE) 602 .build()); 603 } 604 605 @Override 606 public void onGuidedActionClicked(GuidedAction action) { 607 if (action.getId() == GuidedAction.ACTION_ID_CONTINUE) { 608 FragmentManager fm = getFragmentManager(); 609 FourthStepFragment f = new FourthStepFragment(); 610 Bundle arguments = new Bundle(); 611 arguments.putLong(FourthStepFragment.EXTRA_OPTION, mSelectedOption); 612 f.setArguments(arguments); 613 GuidedStepSupportFragment.add(fm, f, R.id.lb_guidedstep_host); 614 } else if (action.getCheckSetId() == GuidedAction.DEFAULT_CHECK_SET_ID) { 615 mSelectedOption = action.getId(); 616 } 617 } 618 619 } 620 621 public static class FourthStepFragment extends GuidedStepSupportFragment { 622 public static final String EXTRA_OPTION = "extra_option"; 623 624 public FourthStepFragment() { 625 } 626 627 public long getOption() { 628 Bundle b = getArguments(); 629 if (b == null) return 0; 630 return b.getLong(EXTRA_OPTION, 0); 631 } 632 633 @Override 634 public Guidance onCreateGuidance(Bundle savedInstanceState) { 635 String title = getString(R.string.guidedstep_fourth_title); 636 String breadcrumb = getString(R.string.guidedstep_fourth_breadcrumb); 637 String description = "You chose: " + OPTION_NAMES[(int) getOption()]; 638 final Context context = getActivity(); 639 Drawable icon = ResourcesCompat.getDrawable(context.getResources(), 640 R.drawable.ic_main_icon, context.getTheme()); 641 return new Guidance(title, description, breadcrumb, icon); 642 } 643 644 @Override 645 public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { 646 actions.add(new GuidedAction.Builder(getActivity()) 647 .clickAction(GuidedAction.ACTION_ID_FINISH) 648 .description("All Done...") 649 .build()); 650 addAction(actions, BACK, "Start Over", "Let's try this again..."); 651 } 652 653 @Override 654 public void onGuidedActionClicked(GuidedAction action) { 655 if (action.getId() == GuidedAction.ACTION_ID_FINISH) { 656 finishGuidedStepSupportFragments(); 657 } else if (action.getId() == BACK) { 658 // pop 4, 3, 2 659 popBackStackToGuidedStepSupportFragment(SecondStepFragment.class, 660 FragmentManager.POP_BACK_STACK_INCLUSIVE); 661 } 662 } 663 664 } 665 666 } 667