Skip to content

Commit 00790a8

Browse files
Piotr Zawadzkizawadz88
authored andcommitted
- added an option to use custom back Button labels per step
1 parent d931c9b commit 00790a8

File tree

8 files changed

+49
-24
lines changed

8 files changed

+49
-24
lines changed

material-stepper/src/main/java/com/stepstone/stepper/StepperLayout.java

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import com.stepstone.stepper.type.StepperTypeFactory;
5050
import com.stepstone.stepper.util.AnimationUtil;
5151
import com.stepstone.stepper.util.TintUtil;
52+
import com.stepstone.stepper.viewmodel.StepViewModel;
5253

5354
/**
5455
* Stepper widget implemented according to the <a href="https://www.google.com/design/spec/components/steppers.html">Material documentation</a>.<br>
@@ -531,19 +532,18 @@ private void onComplete(View completeButton) {
531532

532533
private void onUpdate(int newStepPosition, boolean animate) {
533534
mPager.setCurrentItem(newStepPosition);
534-
boolean isLast = isLastPosition(newStepPosition);
535-
boolean isFirst = newStepPosition == 0;
535+
final boolean isLast = isLastPosition(newStepPosition);
536+
final boolean isFirst = newStepPosition == 0;
536537
AnimationUtil.fadeViewVisibility(mNextNavigationButton, isLast ? View.GONE : View.VISIBLE, animate);
537538
AnimationUtil.fadeViewVisibility(mCompleteNavigationButton, !isLast ? View.GONE : View.VISIBLE, animate);
538539
AnimationUtil.fadeViewVisibility(mBackNavigationButton, isFirst && !mShowBackButtonOnFirstStep ? View.GONE : View.VISIBLE, animate);
539540

541+
final StepViewModel viewModel = mStepAdapter.getViewModel(newStepPosition);
542+
543+
updateBackButtonText(viewModel);
544+
540545
if (!isLast) {
541-
CharSequence nextButtonTextForStep = mStepAdapter.getViewModel(newStepPosition).getNextButtonLabel();
542-
if (nextButtonTextForStep == null) {
543-
mNextNavigationButton.setText(mNextButtonText);
544-
} else {
545-
mNextNavigationButton.setText(nextButtonTextForStep);
546-
}
546+
updateNextButtonText(viewModel);
547547
}
548548

549549
mStepperType.onStepSelected(newStepPosition);
@@ -553,4 +553,22 @@ private void onUpdate(int newStepPosition, boolean animate) {
553553
step.onSelected();
554554
}
555555
}
556+
557+
private void updateNextButtonText(@NonNull StepViewModel viewModel) {
558+
CharSequence nextButtonTextForStep = viewModel.getNextButtonLabel();
559+
if (nextButtonTextForStep == null) {
560+
mNextNavigationButton.setText(mNextButtonText);
561+
} else {
562+
mNextNavigationButton.setText(nextButtonTextForStep);
563+
}
564+
}
565+
566+
private void updateBackButtonText(@NonNull StepViewModel viewModel) {
567+
CharSequence backButtonTextForStep = viewModel.getBackButtonLabel();
568+
if (backButtonTextForStep == null) {
569+
mBackNavigationButton.setText(mBackButtonText);
570+
} else {
571+
mBackNavigationButton.setText(backButtonTextForStep);
572+
}
573+
}
556574
}

material-stepper/src/main/java/com/stepstone/stepper/viewmodel/StepViewModel.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public Builder setTitle(@StringRes int titleId) {
9494
*
9595
* @return This Builder object to allow for chaining of calls to set methods
9696
*/
97-
public Builder setTitle(@Nullable String title) {
97+
public Builder setTitle(@Nullable CharSequence title) {
9898
this.title = title;
9999
return this;
100100
}
@@ -114,7 +114,7 @@ public Builder setNextButtonLabel(@StringRes int nextButtonLabelId) {
114114
*
115115
* @return This Builder object to allow for chaining of calls to set methods
116116
*/
117-
public Builder setNextButtonLabel(@Nullable String nextButtonLabel) {
117+
public Builder setNextButtonLabel(@Nullable CharSequence nextButtonLabel) {
118118
this.nextButtonLabel = nextButtonLabel;
119119
return this;
120120
}
@@ -134,7 +134,7 @@ public Builder setBackButtonLabel(@StringRes int backButtonLabelId) {
134134
*
135135
* @return This Builder object to allow for chaining of calls to set methods
136136
*/
137-
public Builder setBackButtonLabel(@Nullable String backButtonLabel) {
137+
public Builder setBackButtonLabel(@Nullable CharSequence backButtonLabel) {
138138
this.backButtonLabel = backButtonLabel;
139139
return this;
140140
}

sample/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<activity android:name=".CombinationActivity" />
2828
<activity android:name=".CustomPageTransformerActivity" />
2929
<activity android:name=".DelayedTransitionStepperActivity" />
30-
<activity android:name=".DifferentNextButtonStepperActivity" />
30+
<activity android:name=".CustomNavigationButtonsStepperActivity" />
3131
<activity android:name=".ReturnButtonActivity" />
3232
<activity android:name=".NoFragmentsActivity"/>
3333
</application>

sample/src/main/java/com/stepstone/stepper/sample/DifferentNextButtonStepperActivity.java renamed to sample/src/main/java/com/stepstone/stepper/sample/CustomNavigationButtonsStepperActivity.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
import android.support.v7.app.AppCompatActivity;
2121

2222
import com.stepstone.stepper.StepperLayout;
23-
import com.stepstone.stepper.sample.adapter.NextButtonsSampleFragmentStepAdapter;
23+
import com.stepstone.stepper.sample.adapter.CustomButtonsSampleFragmentStepAdapter;
2424

25-
public class DifferentNextButtonStepperActivity extends AppCompatActivity {
25+
public class CustomNavigationButtonsStepperActivity extends AppCompatActivity {
2626

2727
private static final String CURRENT_STEP_POSITION_KEY = "position";
2828

@@ -36,7 +36,7 @@ protected void onCreate(Bundle savedInstanceState) {
3636
setContentView(R.layout.activity_default_dots);
3737
mStepperLayout = (StepperLayout) findViewById(R.id.stepperLayout);
3838
int startingStepPosition = savedInstanceState != null ? savedInstanceState.getInt(CURRENT_STEP_POSITION_KEY) : 0;
39-
mStepperLayout.setAdapter(new NextButtonsSampleFragmentStepAdapter(getSupportFragmentManager(), this), startingStepPosition);
39+
mStepperLayout.setAdapter(new CustomButtonsSampleFragmentStepAdapter(getSupportFragmentManager(), this), startingStepPosition);
4040

4141
}
4242

sample/src/main/java/com/stepstone/stepper/sample/MainActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ public void onDelayedTransition(View view) {
8383
startActivity(new Intent(this, DelayedTransitionStepperActivity.class));
8484
}
8585

86-
@OnClick(R.id.differentNextButtons)
86+
@OnClick(R.id.differentNavigationButtons)
8787
public void onDifferentNextButtons(View view) {
88-
startActivity(new Intent(this, DifferentNextButtonStepperActivity.class));
88+
startActivity(new Intent(this, CustomNavigationButtonsStepperActivity.class));
8989
}
9090

9191
@OnClick(R.id.showReturnButtonOnFirstStep)
Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
import com.stepstone.stepper.sample.step.fragment.StepFragmentSample;
1212
import com.stepstone.stepper.viewmodel.StepViewModel;
1313

14-
public class NextButtonsSampleFragmentStepAdapter extends AbstractFragmentStepAdapter {
14+
public class CustomButtonsSampleFragmentStepAdapter extends AbstractFragmentStepAdapter {
1515

16-
public NextButtonsSampleFragmentStepAdapter(@NonNull FragmentManager fm, @NonNull Context context) {
16+
public CustomButtonsSampleFragmentStepAdapter(@NonNull FragmentManager fm, @NonNull Context context) {
1717
super(fm, context);
1818
}
1919

@@ -43,10 +43,17 @@ public StepViewModel getViewModel(@IntRange(from = 0) int position) {
4343
.setTitle(R.string.tab_title);
4444
switch (position) {
4545
case 0:
46-
builder.setNextButtonLabel(R.string.ms_next);
46+
builder
47+
.setNextButtonLabel("This way")
48+
.setBackButtonLabel("Go to first");
4749
break;
4850
case 1:
49-
builder.setNextButtonLabel(R.string.go_to_summary);
51+
builder
52+
.setNextButtonLabel(R.string.go_to_summary)
53+
.setBackButtonLabel("Go to first");
54+
break;
55+
case 2:
56+
builder.setBackButtonLabel("Go back");
5057
break;
5158
default:
5259
throw new IllegalArgumentException("Unsupported position: " + position);

sample/src/main/res/layout/activity_main.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,10 @@
7777
android:text="@string/delayed_transition" />
7878

7979
<Button
80-
android:id="@+id/differentNextButtons"
80+
android:id="@+id/differentNavigationButtons"
8181
android:layout_width="wrap_content"
8282
android:layout_height="wrap_content"
83-
android:text="@string/different_next_buttons" />
83+
android:text="@string/different_navigation_buttons" />
8484

8585
<Button
8686
android:id="@+id/showReturnButtonOnFirstStep"

sample/src/main/res/values/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<string name="combination">Dots in portrait, tabs in landscape</string>
1111
<string name="custom_page_transformer">Custom PageTransformer</string>
1212
<string name="delayed_transition">Delayed transition</string>
13-
<string name="different_next_buttons">Different next buttons</string>
13+
<string name="different_navigation_buttons">Different navigation buttons</string>
1414
<string name="show_back_button">Show Back button on first step</string>
1515
<string name="no_fragments">No Fragment Stepper</string>
1616

0 commit comments

Comments
 (0)