11package com .hololo .tutorial .library ;
22
3+ import android .annotation .SuppressLint ;
4+ import android .content .pm .PackageManager ;
35import android .os .Build ;
46import android .os .Bundle ;
7+ import android .support .annotation .NonNull ;
58import android .support .annotation .Nullable ;
69import android .support .annotation .RequiresApi ;
710import android .support .v4 .view .ViewPager ;
811import android .support .v7 .app .AppCompatActivity ;
12+ import android .view .MotionEvent ;
913import android .view .View ;
1014import android .view .Window ;
1115import 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