Skip to content

Commit b2664f5

Browse files
authored
Merge pull request #37 from leonardo2204/master
Further abstraction
2 parents 614ad2d + d21e6d6 commit b2664f5

25 files changed

+535
-201
lines changed

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ buildscript {
33
jcenter()
44
}
55
dependencies {
6-
classpath 'com.android.tools.build:gradle:2.2.2'
6+
classpath 'com.android.tools.build:gradle:2.2.3'
77
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
88
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
99

@@ -22,7 +22,7 @@ configure(allprojects) {
2222
androidMinSdkVersion = 14
2323
androidTargetSdkVersion = 24
2424
androidCompileSdkVersion = 24
25-
androidBuildToolsVersion = "25.0.0"
25+
androidBuildToolsVersion = "25.0.2"
2626
androidSupportLibraryVersion = "25.0.0"
2727

2828
/* Sample only */

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
import android.widget.Button;
4141
import android.widget.LinearLayout;
4242

43-
import com.stepstone.stepper.adapter.AbstractStepAdapter;
43+
import com.stepstone.stepper.adapter.StepAdapter;
4444
import com.stepstone.stepper.internal.ColorableProgressBar;
4545
import com.stepstone.stepper.internal.DottedProgressBar;
4646
import com.stepstone.stepper.internal.RightNavigationButton;
@@ -198,7 +198,7 @@ public final void goToPrevStep() {
198198

199199
private int mTypeIdentifier = AbstractStepperType.PROGRESS_BAR;
200200

201-
private AbstractStepAdapter mStepAdapter;
201+
private StepAdapter mStepAdapter;
202202

203203
private AbstractStepperType mStepperType;
204204

@@ -250,9 +250,9 @@ public void setListener(@NonNull StepperListener listener) {
250250
*
251251
* @param stepAdapter step adapter
252252
*/
253-
public void setAdapter(@NonNull AbstractStepAdapter stepAdapter) {
253+
public void setAdapter(@NonNull StepAdapter stepAdapter) {
254254
this.mStepAdapter = stepAdapter;
255-
mPager.setAdapter(stepAdapter);
255+
mPager.setAdapter(stepAdapter.getPagerAdapter());
256256

257257
mStepperType.onNewAdapter(stepAdapter);
258258

@@ -272,7 +272,7 @@ public void run() {
272272
* @param stepAdapter step adapter
273273
* @param currentStepPosition the initial step position, must be in the range of the adapter item count
274274
*/
275-
public void setAdapter(@NonNull AbstractStepAdapter stepAdapter, @IntRange(from = 0) int currentStepPosition) {
275+
public void setAdapter(@NonNull StepAdapter stepAdapter, @IntRange(from = 0) int currentStepPosition) {
276276
this.mCurrentStepPosition = currentStepPosition;
277277
setAdapter(stepAdapter);
278278
}
@@ -539,7 +539,7 @@ private void onUpdate(int newStepPosition, boolean animate) {
539539

540540
if (!isLast) {
541541
int nextButtonTextForStep = mStepAdapter.getNextButtonText(newStepPosition);
542-
if (nextButtonTextForStep == AbstractStepAdapter.DEFAULT_NEXT_BUTTON_TEXT) {
542+
if (nextButtonTextForStep == StepAdapter.DEFAULT_NEXT_BUTTON_TEXT) {
543543
mNextNavigationButton.setText(mNextButtonText);
544544
} else {
545545
mNextNavigationButton.setText(nextButtonTextForStep);
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
Copyright 2016 StepStone Services
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+
17+
package com.stepstone.stepper.adapter;
18+
19+
import android.support.annotation.StringRes;
20+
import android.support.v4.app.Fragment;
21+
import android.support.v4.app.FragmentManager;
22+
import android.support.v4.app.FragmentPagerAdapter;
23+
import android.support.v4.view.PagerAdapter;
24+
import android.support.v4.view.ViewPager;
25+
26+
import com.stepstone.stepper.Step;
27+
28+
/**
29+
* A base adapter class which returns step fragments to use inside of the {@link com.stepstone.stepper.StepperLayout}.
30+
*/
31+
public abstract class AbstractFragmentStepAdapter
32+
extends FragmentPagerAdapter
33+
implements StepAdapter {
34+
35+
private final FragmentManager mFragmentManager;
36+
37+
public AbstractFragmentStepAdapter(FragmentManager fm) {
38+
super(fm);
39+
mFragmentManager = fm;
40+
}
41+
42+
@Override
43+
public final Fragment getItem(int position) {
44+
return (Fragment) createStep(position);
45+
}
46+
47+
/** {@inheritDoc} */
48+
@SuppressWarnings("unchecked")
49+
public Step findStep(ViewPager viewPager, int position) {
50+
String fragmentTag = "android:switcher:" + viewPager.getId() + ":" + this.getItemId(position);
51+
return (Step) mFragmentManager.findFragmentByTag(fragmentTag);
52+
}
53+
54+
/** {@inheritDoc} */
55+
@StringRes
56+
public int getNextButtonText(int position) {
57+
return DEFAULT_NEXT_BUTTON_TEXT;
58+
}
59+
60+
/** {@inheritDoc} */
61+
@Override
62+
public final PagerAdapter getPagerAdapter() {
63+
return this;
64+
}
65+
}
Lines changed: 11 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,23 @@
1-
/*
2-
Copyright 2016 StepStone Services
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-
171
package com.stepstone.stepper.adapter;
182

19-
import android.support.annotation.StringRes;
20-
import android.support.v4.app.Fragment;
21-
import android.support.v4.app.FragmentManager;
22-
import android.support.v4.app.FragmentPagerAdapter;
23-
import android.support.v4.view.ViewPager;
24-
25-
import com.stepstone.stepper.Step;
3+
import android.support.v4.view.PagerAdapter;
264

275
/**
28-
* A base adapter class which returns step fragments to use inside of the {@link com.stepstone.stepper.StepperLayout}.
6+
* A base adapter class which returns step to use inside of the {@link com.stepstone.stepper.StepperLayout}.
7+
* This class is intended to be inherited if you need to use {@link com.stepstone.stepper.StepperLayout} without fragments.
8+
* Otherwise, you should use {@link AbstractFragmentStepAdapter}
299
*/
30-
public abstract class AbstractStepAdapter<T extends Fragment & Step> extends FragmentPagerAdapter {
31-
32-
public static final int DEFAULT_NEXT_BUTTON_TEXT = -1;
33-
34-
private final FragmentManager mFragmentManager;
35-
36-
public AbstractStepAdapter(FragmentManager fm) {
37-
super(fm);
38-
mFragmentManager = fm;
39-
}
10+
public abstract class AbstractStepAdapter extends PagerAdapter implements StepAdapter {
4011

12+
/** {@inheritDoc} */
4113
@Override
42-
public final T getItem(int position) {
43-
return createStep(position);
44-
}
45-
46-
protected abstract T createStep(int position);
47-
48-
/**
49-
* Finds the given step without creating it.
50-
* @see FragmentPagerAdapter#makeFragmentName(int, long)
51-
* @param viewPager view pager to use for displaying step fragments
52-
* @param position step position
53-
* @return step fragment
54-
*/
55-
public Step findStep(ViewPager viewPager, int position) {
56-
String fragmentTag = "android:switcher:" + viewPager.getId() + ":" + this.getItemId(position);
57-
return (Step) mFragmentManager.findFragmentByTag(fragmentTag);
58-
}
59-
60-
/**
61-
* Allows to override the text on the Next button per step.
62-
* For a given step position you need to return a String resource ID for the label to be used.
63-
* If you wish to change the text for selected steps only (and leave the default for the rest)
64-
* then return {@link #DEFAULT_NEXT_BUTTON_TEXT} for the default ones.
65-
* By default this method returns {@link #DEFAULT_NEXT_BUTTON_TEXT} for all steps.
66-
* This method is not invoked for the last step.
67-
* @param position step position
68-
* @return a String resource ID to override the default button text or {@link #DEFAULT_NEXT_BUTTON_TEXT} if the default text should be kept
69-
*/
70-
@StringRes
7114
public int getNextButtonText(int position) {
7215
return DEFAULT_NEXT_BUTTON_TEXT;
7316
}
7417

18+
/** {@inheritDoc} */
19+
@Override
20+
public final PagerAdapter getPagerAdapter() {
21+
return this;
22+
}
7523
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.stepstone.stepper.adapter;
2+
3+
import android.support.annotation.StringRes;
4+
import android.support.v4.app.FragmentPagerAdapter;
5+
import android.support.v4.view.PagerAdapter;
6+
import android.support.v4.view.ViewPager;
7+
8+
import com.stepstone.stepper.Step;
9+
10+
/**
11+
* Interface to be used as model to {@link com.stepstone.stepper.StepperLayout}.
12+
*/
13+
public interface StepAdapter {
14+
15+
int DEFAULT_NEXT_BUTTON_TEXT = -1;
16+
17+
/**
18+
* Create each step of the {@link com.stepstone.stepper.StepperLayout}.
19+
* @param position The position of the {@link PagerAdapter} to be used inside the {@link ViewPager}.
20+
* @return the step to be used inside the {@link com.stepstone.stepper.StepperLayout}.
21+
*/
22+
Step createStep(int position);
23+
24+
/**
25+
* Finds the given step without creating it.
26+
* @see FragmentPagerAdapter#makeFragmentName(int, long)
27+
* @param viewPager view pager to use for displaying step fragments
28+
* @param position step position
29+
* @return step fragment
30+
*/
31+
Step findStep(ViewPager viewPager, int position);
32+
33+
/**
34+
* Allows to override the text on the Next button per step.
35+
* For a given step position you need to return a String resource ID for the label to be used.
36+
* If you wish to change the text for selected steps only (and leave the default for the rest)
37+
* then return {@link #DEFAULT_NEXT_BUTTON_TEXT} for the default ones.
38+
* By default this method returns {@link #DEFAULT_NEXT_BUTTON_TEXT} for all steps.
39+
* This method is not invoked for the last step.
40+
* @param position step position
41+
* @return a String resource ID to override the default button text or {@link #DEFAULT_NEXT_BUTTON_TEXT} if the default text should be kept
42+
*/
43+
@StringRes int getNextButtonText(int position);
44+
45+
/**
46+
* Get the step count.
47+
* @return the quantity of steps
48+
*/
49+
int getCount();
50+
51+
/**
52+
* Method for internal purpose. Should not be inherited.
53+
* @return the adapter to be used in the {@link ViewPager}.
54+
*/
55+
PagerAdapter getPagerAdapter();
56+
}

material-stepper/src/main/java/com/stepstone/stepper/type/AbstractStepperType.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import android.support.annotation.NonNull;
2121

2222
import com.stepstone.stepper.StepperLayout;
23-
import com.stepstone.stepper.adapter.AbstractStepAdapter;
23+
import com.stepstone.stepper.adapter.StepAdapter;
2424

2525
/**
2626
* A base stepper type all stepper types must extend.
@@ -58,7 +58,7 @@ public AbstractStepperType(StepperLayout stepperLayout) {
5858
* Called when {@link StepperLayout}'s adapter gets changed
5959
* @param stepAdapter new stepper adapter
6060
*/
61-
public abstract void onNewAdapter(@NonNull AbstractStepAdapter<?> stepAdapter);
61+
public abstract void onNewAdapter(@NonNull StepAdapter stepAdapter);
6262

6363
@ColorInt
6464
protected int getSelectedColor() {

material-stepper/src/main/java/com/stepstone/stepper/type/DotsStepperType.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import com.stepstone.stepper.R;
2323
import com.stepstone.stepper.StepperLayout;
24-
import com.stepstone.stepper.adapter.AbstractStepAdapter;
24+
import com.stepstone.stepper.adapter.StepAdapter;
2525
import com.stepstone.stepper.internal.DottedProgressBar;
2626

2727
/**
@@ -51,7 +51,7 @@ public void onStepSelected(int newStepPosition) {
5151
* {@inheritDoc}
5252
*/
5353
@Override
54-
public void onNewAdapter(@NonNull AbstractStepAdapter stepAdapter) {
54+
public void onNewAdapter(@NonNull StepAdapter stepAdapter) {
5555
final int stepCount = stepAdapter.getCount();
5656
mDottedProgressBar.setDotCount(stepCount);
5757
mDottedProgressBar.setVisibility(stepCount > 1 ? View.VISIBLE : View.GONE);

material-stepper/src/main/java/com/stepstone/stepper/type/ProgressBarStepperType.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import com.stepstone.stepper.R;
2323
import com.stepstone.stepper.StepperLayout;
24-
import com.stepstone.stepper.adapter.AbstractStepAdapter;
24+
import com.stepstone.stepper.adapter.StepAdapter;
2525
import com.stepstone.stepper.internal.ColorableProgressBar;
2626

2727
/**
@@ -51,7 +51,7 @@ public void onStepSelected(int newStepPosition) {
5151
* {@inheritDoc}
5252
*/
5353
@Override
54-
public void onNewAdapter(@NonNull AbstractStepAdapter stepAdapter) {
54+
public void onNewAdapter(@NonNull StepAdapter stepAdapter) {
5555
final int stepCount = stepAdapter.getCount();
5656
mProgressBar.setMax(stepAdapter.getCount());
5757
mProgressBar.setVisibility(stepCount > 1 ? View.VISIBLE : View.GONE);

material-stepper/src/main/java/com/stepstone/stepper/type/TabsStepperType.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import com.stepstone.stepper.R;
2323
import com.stepstone.stepper.Step;
2424
import com.stepstone.stepper.StepperLayout;
25-
import com.stepstone.stepper.adapter.AbstractStepAdapter;
25+
import com.stepstone.stepper.adapter.StepAdapter;
2626
import com.stepstone.stepper.internal.TabsContainer;
2727

2828
import java.util.ArrayList;
@@ -57,11 +57,11 @@ public void onStepSelected(int newStepPosition) {
5757
* {@inheritDoc}
5858
*/
5959
@Override
60-
public void onNewAdapter(@NonNull AbstractStepAdapter<?> stepAdapter) {
60+
public void onNewAdapter(@NonNull StepAdapter stepAdapter) {
6161
List<Integer> titles = new ArrayList<>();
6262
final int stepCount = stepAdapter.getCount();
6363
for (int i = 0; i < stepCount; i++) {
64-
final Step step = stepAdapter.getItem(i);
64+
final Step step = (Step) stepAdapter.createStep(i);
6565
titles.add(step.getName());
6666
}
6767
mTabsContainer.setSteps(titles);

sample/src/main/AndroidManifest.xml

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,35 +8,28 @@
88
android:label="@string/app_name"
99
android:supportsRtl="true"
1010
android:theme="@style/AppTheme">
11-
1211
<activity android:name=".MainActivity">
1312
<intent-filter>
1413
<action android:name="android.intent.action.MAIN" />
1514

1615
<category android:name="android.intent.category.LAUNCHER" />
1716
</intent-filter>
1817
</activity>
19-
2018
<activity android:name=".DefaultDotsActivity" />
2119
<activity android:name=".StyledDotsActivity" />
22-
<activity android:name=".ThemedDotsActivity" android:theme="@style/AppTheme.DotStepper" />
23-
20+
<activity
21+
android:name=".ThemedDotsActivity"
22+
android:theme="@style/AppTheme.DotStepper" />
2423
<activity android:name=".DefaultProgressBarActivity" />
2524
<activity android:name=".StyledProgressBarActivity" />
26-
2725
<activity android:name=".DefaultTabsActivity" />
2826
<activity android:name=".StyledTabsActivity" />
29-
3027
<activity android:name=".CombinationActivity" />
31-
3228
<activity android:name=".CustomPageTransformerActivity" />
33-
3429
<activity android:name=".DelayedTransitionStepperActivity" />
35-
3630
<activity android:name=".DifferentNextButtonStepperActivity" />
37-
3831
<activity android:name=".ReturnButtonActivity" />
39-
32+
<activity android:name=".NoFragmentsActivity"/>
4033
</application>
4134

42-
</manifest>
35+
</manifest>

0 commit comments

Comments
 (0)