Skip to content

Commit 0a0414a

Browse files
committed
Permission Step added,
Indicator drawables change function added
1 parent 4d00552 commit 0a0414a

File tree

7 files changed

+142
-47
lines changed

7 files changed

+142
-47
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
package="com.hololo.tutorial.sample">
44

5+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
6+
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
7+
58
<application
69
android:allowBackup="true"
710
android:icon="@mipmap/ic_launcher"

app/src/main/java/com/hololo/tutorial/sample/MainActivity.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.hololo.tutorial.sample;
22

3+
import android.Manifest;
34
import android.graphics.Color;
45
import android.os.Bundle;
56
import android.widget.Toast;
67

8+
import com.hololo.tutorial.library.PermissionStep;
79
import com.hololo.tutorial.library.Step;
810
import com.hololo.tutorial.library.TutorialActivity;
911

@@ -13,10 +15,12 @@ public class MainActivity extends TutorialActivity {
1315
protected void onCreate(Bundle savedInstanceState) {
1416
super.onCreate(savedInstanceState);
1517

18+
addFragment(new PermissionStep.Builder().setPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}).setTitle(getString(R.string.permission_title)).setContent(getString(R.string.permission_detail)).setBackgroundColor(Color.parseColor("#FF0957")).setDrawable(R.drawable.ss_1).setSummary(getString(R.string.continue_and_learn)).build());
1619
addFragment(new Step.Builder().setTitle(getString(R.string.automatic_data)).setContent(getString(R.string.gm_finds_photos)).setBackgroundColor(Color.parseColor("#FF0957")).setDrawable(R.drawable.ss_1).setSummary(getString(R.string.continue_and_learn)).build());
1720
addFragment(new Step.Builder().setTitle(getString(R.string.choose_the_song)).setContent(getString(R.string.swap_to_the_tab)).setBackgroundColor(Color.parseColor("#00D4BA")).setDrawable(R.drawable.ss_2).setSummary(getString(R.string.continue_and_update)).build());
1821
addFragment(new Step.Builder().setTitle(getString(R.string.edit_data)).setContent(getString(R.string.update_easily)).setBackgroundColor(Color.parseColor("#1098FE")).setDrawable(R.drawable.ss_3).setSummary(getString(R.string.continue_and_result)).build());
1922
addFragment(new Step.Builder().setTitle(getString(R.string.result_awesome)).setContent(getString(R.string.after_updating)).setBackgroundColor(Color.parseColor("#CA70F3")).setDrawable(R.drawable.ss_4).setSummary(getString(R.string.thank_you)).build());
23+
2024
}
2125

2226
@Override

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<string name="app_name">Sample</string>
33

44
<string name="automatic_data">Automatic Data</string>
5+
<string name="permission_title">Grant Access</string>
6+
<string name="permission_detail">Give Music Player access to files</string>
57
<string name="choose_the_song">Choose the song</string>
68
<string name="edit_data">Edit Data</string>
79
<string name="result_awesome">Result is awesome!</string>

library/src/main/java/com/hololo/tutorial/library/Step.java

Lines changed: 56 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,88 @@
55

66
public class Step implements Parcelable {
77

8+
public static final Parcelable.Creator<Step> CREATOR = new Parcelable.Creator<Step>() {
9+
@Override
10+
public Step createFromParcel(Parcel source) {
11+
return new Step(source);
12+
}
13+
14+
@Override
15+
public Step[] newArray(int size) {
16+
return new Step[size];
17+
}
18+
};
819
private String title;
920
private String content;
1021
private String summary;
1122
private int drawable;
1223
private int backgroundColor;
1324

25+
public Step() {
26+
}
27+
28+
protected Step(Parcel in) {
29+
this.title = in.readString();
30+
this.content = in.readString();
31+
this.summary = in.readString();
32+
this.drawable = in.readInt();
33+
this.backgroundColor = in.readInt();
34+
}
35+
1436
public String getTitle() {
1537
return title;
1638
}
1739

40+
public void setTitle(String title) {
41+
this.title = title;
42+
}
43+
1844
public String getContent() {
1945
return content;
2046
}
2147

48+
public void setContent(String content) {
49+
this.content = content;
50+
}
51+
2252
public int getDrawable() {
2353
return drawable;
2454
}
2555

56+
public void setDrawable(int drawable) {
57+
this.drawable = drawable;
58+
}
59+
2660
public int getBackgroundColor() {
2761
return backgroundColor;
2862
}
2963

64+
public void setBackgroundColor(int backgroundColor) {
65+
this.backgroundColor = backgroundColor;
66+
}
67+
3068
public String getSummary() {
3169
return summary;
3270
}
3371

72+
public void setSummary(String summary) {
73+
this.summary = summary;
74+
}
75+
76+
@Override
77+
public int describeContents() {
78+
return 0;
79+
}
80+
81+
@Override
82+
public void writeToParcel(Parcel dest, int flags) {
83+
dest.writeString(this.title);
84+
dest.writeString(this.content);
85+
dest.writeString(this.summary);
86+
dest.writeInt(this.drawable);
87+
dest.writeInt(this.backgroundColor);
88+
}
89+
3490
public static class Builder {
3591

3692
private Step step;
@@ -68,41 +124,4 @@ public Builder setBackgroundColor(int backgroundColor) {
68124
return this;
69125
}
70126
}
71-
72-
@Override
73-
public int describeContents() {
74-
return 0;
75-
}
76-
77-
@Override
78-
public void writeToParcel(Parcel dest, int flags) {
79-
dest.writeString(this.title);
80-
dest.writeString(this.content);
81-
dest.writeString(this.summary);
82-
dest.writeInt(this.drawable);
83-
dest.writeInt(this.backgroundColor);
84-
}
85-
86-
public Step() {
87-
}
88-
89-
protected Step(Parcel in) {
90-
this.title = in.readString();
91-
this.content = in.readString();
92-
this.summary = in.readString();
93-
this.drawable = in.readInt();
94-
this.backgroundColor = in.readInt();
95-
}
96-
97-
public static final Parcelable.Creator<Step> CREATOR = new Parcelable.Creator<Step>() {
98-
@Override
99-
public Step createFromParcel(Parcel source) {
100-
return new Step(source);
101-
}
102-
103-
@Override
104-
public Step[] newArray(int size) {
105-
return new Step[size];
106-
}
107-
};
108127
}

library/src/main/java/com/hololo/tutorial/library/StepFragment.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,21 @@
22

33
import android.os.Bundle;
44
import android.support.annotation.Nullable;
5-
import android.support.v4.app.Fragment;
65
import android.view.LayoutInflater;
76
import android.view.View;
87
import android.view.ViewGroup;
98
import android.widget.ImageView;
109
import android.widget.LinearLayout;
1110
import android.widget.TextView;
1211

13-
public class StepFragment extends Fragment {
12+
public class StepFragment extends StepView {
1413

1514
private TextView title;
1615
private TextView content;
1716
private TextView summary;
1817
private ImageView imageView;
1918
private LinearLayout layout;
2019

21-
private Step step;
2220

2321
static StepFragment createFragment(Step step) {
2422
StepFragment fragment = new StepFragment();

library/src/main/java/com/hololo/tutorial/library/StepPagerAdapter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ public StepPagerAdapter(FragmentManager fm, List<Step> stepList) {
1616

1717
@Override
1818
public Fragment getItem(int position) {
19-
return StepFragment.createFragment(stepList.get(position));
19+
Step step = stepList.get(position);
20+
21+
return StepFragment.createFragment(step);
2022
}
2123

2224
@Override

library/src/main/java/com/hololo/tutorial/library/TutorialActivity.java

Lines changed: 73 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package com.hololo.tutorial.library;
22

3+
import android.annotation.SuppressLint;
4+
import android.content.pm.PackageManager;
35
import android.os.Build;
46
import android.os.Bundle;
7+
import android.support.annotation.NonNull;
58
import android.support.annotation.Nullable;
69
import android.support.annotation.RequiresApi;
710
import android.support.v4.view.ViewPager;
811
import android.support.v7.app.AppCompatActivity;
12+
import android.view.MotionEvent;
913
import android.view.View;
1014
import android.view.Window;
1115
import android.view.WindowManager;
@@ -31,14 +35,19 @@ public class TutorialActivity extends AppCompatActivity implements View.OnClickL
3135

3236
private int currentItem;
3337

34-
private String prevText, nextText, finishText, cancelText;
38+
private String prevText, nextText, finishText, cancelText, givePermissionText;
39+
private int selectedIndicator = R.drawable.circle_black, indicator = R.drawable.circle_white;
3540

3641
@Override
3742
protected void onCreate(@Nullable Bundle savedInstanceState) {
3843
setTheme(R.style.TutorialStyle);
3944
super.onCreate(savedInstanceState);
40-
4145
setContentView(R.layout.activity_tutorial);
46+
47+
init();
48+
}
49+
50+
private void init() {
4251
steps = new ArrayList<>();
4352
initTexts();
4453
initViews();
@@ -50,6 +59,7 @@ private void initTexts() {
5059
cancelText = "Cancel";
5160
finishText = "Finish";
5261
nextText = "Next";
62+
givePermissionText = "Give";
5363
}
5464

5565
private void initAdapter() {
@@ -84,6 +94,7 @@ private void changeStatusBarColor(int backgroundColor) {
8494

8595
private void controlPosition(int position) {
8696
notifyIndicator();
97+
8798
if (position == steps.size() - 1) {
8899
next.setText(finishText);
89100
prev.setText(prevText);
@@ -95,10 +106,31 @@ private void controlPosition(int position) {
95106
next.setText(nextText);
96107
}
97108

109+
if (controlPermission()) {
110+
prepareNormalView();
111+
} else {
112+
preparePermissionView();
113+
}
114+
98115
containerLayout.setBackgroundColor(steps.get(position).getBackgroundColor());
99116
buttonContainer.setBackgroundColor(steps.get(position).getBackgroundColor());
100117
}
101118

119+
private void prepareNormalView() {
120+
pager.setOnTouchListener(null);
121+
}
122+
123+
private void preparePermissionView() {
124+
next.setText(givePermissionText);
125+
126+
pager.setOnTouchListener(new View.OnTouchListener() {
127+
@Override
128+
public boolean onTouch(View v, MotionEvent event) {
129+
return true;
130+
}
131+
});
132+
}
133+
102134
private void initViews() {
103135
currentItem = 0;
104136

@@ -133,9 +165,9 @@ public void notifyIndicator() {
133165
for (int i = 0; i < steps.size(); i++) {
134166
ImageView imageView = new ImageView(this);
135167
imageView.setPadding(8, 8, 8, 8);
136-
int drawable = R.drawable.circle_black;
168+
int drawable = indicator;
137169
if (i == currentItem)
138-
drawable = R.drawable.circle_white;
170+
drawable = selectedIndicator;
139171

140172
imageView.setImageResource(drawable);
141173

@@ -161,17 +193,36 @@ public void onBackPressed() {
161193
}
162194
}
163195

196+
@SuppressLint("NewApi")
164197
@Override
165198
public void onClick(View v) {
166199
if (v.getId() == R.id.next) {
167-
changeFragment(true);
200+
if (controlPermission())
201+
changeFragment(true);
202+
else
203+
requestPermissions(((PermissionStep) steps.get(pager.getCurrentItem())).getPermissions(), 1903);
168204
} else if (v.getId() == R.id.prev) {
169205
changeFragment(false);
170206
}
171207
}
172208

173209
private void changeFragment(int position) {
174-
pager.setCurrentItem(position, true);
210+
if (controlPermission())
211+
pager.setCurrentItem(position, true);
212+
}
213+
214+
private boolean controlPermission() {
215+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && steps.get(pager.getCurrentItem()) instanceof PermissionStep) {
216+
217+
for (String permission : ((PermissionStep) steps.get(pager.getCurrentItem())).getPermissions()) {
218+
int permissionResult = checkSelfPermission(permission);
219+
220+
if (permissionResult != PackageManager.PERMISSION_GRANTED) {
221+
return false;
222+
}
223+
}
224+
}
225+
return true;
175226
}
176227

177228
private void changeFragment(boolean isNext) {
@@ -208,4 +259,20 @@ public void setCancelText(String text) {
208259
cancelText = text;
209260
}
210261

262+
public void setIndicatorSelected(int drawable) {
263+
selectedIndicator = drawable;
264+
}
265+
266+
public void setIndicator(int drawable) {
267+
indicator = drawable;
268+
}
269+
270+
@Override
271+
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
272+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
273+
274+
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
275+
changeFragment(true);
276+
}
277+
}
211278
}

0 commit comments

Comments
 (0)