1818
1919import android .app .Activity ;
2020import android .content .Context ;
21+ import com .karumi .dexter .listener .EmptyPermissionRequestErrorListener ;
22+ import com .karumi .dexter .listener .PermissionRequestErrorListener ;
23+ import com .karumi .dexter .listener .multi .EmptyMultiplePermissionsListener ;
2124import com .karumi .dexter .listener .multi .MultiplePermissionsListener ;
2225import com .karumi .dexter .listener .single .PermissionListener ;
26+ import java .util .ArrayList ;
2327import java .util .Arrays ;
2428import java .util .Collection ;
29+ import java .util .Collections ;
2530
2631/**
2732 * Class to simplify the management of Android runtime permissions
2833 * Dexter needs to be initialized before checking for a permission using {@link
29- * #initialize(Context )}
34+ * #initialize(Activity )}
3035 */
31- public final class Dexter {
36+ public final class Dexter
37+ implements DexterBuilder , DexterBuilder .Permission , DexterBuilder .SinglePermissionListener ,
38+ DexterBuilder .MultiPermissionListener {
3239
3340 private static DexterInstance instance ;
3441
42+ private Collection <String > permissions ;
43+ private MultiplePermissionsListener listener = new EmptyMultiplePermissionsListener ();
44+ private PermissionRequestErrorListener errorListener = new EmptyPermissionRequestErrorListener ();
45+ private boolean shouldExecuteOnSameThread = false ;
46+
47+ private Dexter (Activity activity ) {
48+ initialize (activity );
49+ }
50+
51+ public static DexterBuilder .Permission withActivity (Activity activity ) {
52+ return new Dexter (activity );
53+ }
54+
55+ @ Override public DexterBuilder .SinglePermissionListener withPermission (String permission ) {
56+ permissions = Collections .singletonList (permission );
57+ return this ;
58+ }
59+
60+ @ Override public DexterBuilder .MultiPermissionListener withPermissions (String ... permissions ) {
61+ this .permissions = Arrays .asList (permissions );
62+ return this ;
63+ }
64+
65+ @ Override
66+ public DexterBuilder .MultiPermissionListener withPermissions (Collection <String > permissions ) {
67+ this .permissions = new ArrayList <>(permissions );
68+ return this ;
69+ }
70+
71+ @ Override public void continueRequestingPendingPermissions (PermissionListener listener ) {
72+ instance .continuePendingRequestIfPossible (listener , ThreadFactory .makeMainThread ());
73+ }
74+
75+ @ Override public void continueRequestingPendingPermissions (MultiplePermissionsListener listener ) {
76+ instance .continuePendingRequestsIfPossible (listener , ThreadFactory .makeMainThread ());
77+ }
78+
79+ @ Override public DexterBuilder withListener (PermissionListener listener ) {
80+ this .listener = new MultiplePermissionsListenerToPermissionListenerAdapter (listener );
81+ return this ;
82+ }
83+
84+ @ Override public DexterBuilder withListener (MultiplePermissionsListener listener ) {
85+ this .listener = listener ;
86+ return this ;
87+ }
88+
89+ @ Override public DexterBuilder onSameThread () {
90+ shouldExecuteOnSameThread = true ;
91+ return this ;
92+ }
93+
94+ @ Override public DexterBuilder withErrorListener (PermissionRequestErrorListener errorListener ) {
95+ this .errorListener = errorListener ;
96+ return this ;
97+ }
98+
99+ @ Override public void check () {
100+ try {
101+ Thread thread = getThread ();
102+ instance .checkPermissions (listener , permissions , thread );
103+ } catch (DexterException e ) {
104+ errorListener .onError (e .error );
105+ }
106+ }
107+
108+ private Thread getThread () {
109+ Thread thread ;
110+
111+ if (shouldExecuteOnSameThread ) {
112+ thread = ThreadFactory .makeSameThread ();
113+ } else {
114+ thread = ThreadFactory .makeMainThread ();
115+ }
116+
117+ return thread ;
118+ }
119+
35120 /**
36- * Initializes the library
121+ * Initializes the library.
37122 *
38123 * @param context Context used by Dexter. Use your {@link android.app.Application} to make sure
39- * the instance is not cleaned up during your app lifetime
124+ * the instance is not cleaned up during your app lifetime.
125+ * @deprecated use the initialize overloaded method using an {@link android.app.Activity} instance
126+ * as param instead of this one. This method will be removed in the next major release.
40127 */
41- public static void initialize (Context context ) {
128+ @ Deprecated public static void initialize (Context context ) {
42129 if (instance == null ) {
43130 AndroidPermissionService androidPermissionService = new AndroidPermissionService ();
44131 IntentProvider intentProvider = new IntentProvider ();
45132 instance = new DexterInstance (context , androidPermissionService , intentProvider );
46133 }
47134 }
48135
136+ /**
137+ * Initializes the library.
138+ *
139+ * @param activity context used by Dexter. Remember to invoke {@link com.karumi.dexter.Dexter}
140+ * stop method to avoid memory leaks.
141+ * @deprecated Use the non static constructor: new Dexter(Activity activity)
142+ */
143+ @ Deprecated public static void initialize (Activity activity ) {
144+ if (instance == null ) {
145+ AndroidPermissionService androidPermissionService = new AndroidPermissionService ();
146+ IntentProvider intentProvider = new IntentProvider ();
147+ instance = new DexterInstance (activity , androidPermissionService , intentProvider );
148+ }
149+ }
150+
49151 /**
50152 * Checks the permission and notifies the listener of its state.
51153 * It is important to note that permissions still have to be declared in the manifest.
@@ -54,8 +156,10 @@ public static void initialize(Context context) {
54156 *
55157 * @param listener The class that will be reported when the state of the permission is ready
56158 * @param permission One of the values found in {@link android.Manifest.permission}
159+ * @deprecated
57160 */
58- public static void checkPermissionOnSameThread (PermissionListener listener , String permission ) {
161+ @ Deprecated public static void checkPermissionOnSameThread (PermissionListener listener ,
162+ String permission ) {
59163 checkInstanceNotNull ();
60164 instance .checkPermission (listener , permission , ThreadFactory .makeSameThread ());
61165 }
@@ -68,8 +172,9 @@ public static void checkPermissionOnSameThread(PermissionListener listener, Stri
68172 *
69173 * @param listener The class that will be reported when the state of the permission is ready
70174 * @param permission One of the values found in {@link android.Manifest.permission}
175+ * @deprecated
71176 */
72- public static void checkPermission (PermissionListener listener , String permission ) {
177+ @ Deprecated public static void checkPermission (PermissionListener listener , String permission ) {
73178 checkInstanceNotNull ();
74179 instance .checkPermission (listener , permission , ThreadFactory .makeMainThread ());
75180 }
@@ -82,12 +187,12 @@ public static void checkPermission(PermissionListener listener, String permissio
82187 *
83188 * @param listener The class that will be reported when the state of the permissions are ready
84189 * @param permissions Array of values found in {@link android.Manifest.permission}
190+ * @deprecated
85191 */
86- public static void checkPermissionsOnSameThread (MultiplePermissionsListener listener ,
192+ @ Deprecated public static void checkPermissionsOnSameThread (MultiplePermissionsListener listener ,
87193 String ... permissions ) {
88194 checkInstanceNotNull ();
89- instance .checkPermissions (listener , Arrays .asList (permissions ),
90- ThreadFactory .makeSameThread ());
195+ instance .checkPermissions (listener , Arrays .asList (permissions ), ThreadFactory .makeSameThread ());
91196 }
92197
93198 /**
@@ -98,11 +203,12 @@ public static void checkPermissionsOnSameThread(MultiplePermissionsListener list
98203 *
99204 * @param listener The class that will be reported when the state of the permissions are ready
100205 * @param permissions Array of values found in {@link android.Manifest.permission}
206+ * @deprecated
101207 */
102- public static void checkPermissions (MultiplePermissionsListener listener , String ... permissions ) {
208+ @ Deprecated public static void checkPermissions (MultiplePermissionsListener listener ,
209+ String ... permissions ) {
103210 checkInstanceNotNull ();
104- instance .checkPermissions (listener , Arrays .asList (permissions ),
105- ThreadFactory .makeMainThread ());
211+ instance .checkPermissions (listener , Arrays .asList (permissions ), ThreadFactory .makeMainThread ());
106212 }
107213
108214 /**
@@ -111,8 +217,9 @@ public static void checkPermissions(MultiplePermissionsListener listener, String
111217 *
112218 * @param listener The class that will be reported when the state of the permissions are ready
113219 * @param permissions Collection of values found in {@link android.Manifest.permission}
220+ * @deprecated
114221 */
115- public static void checkPermissions (MultiplePermissionsListener listener ,
222+ @ Deprecated public static void checkPermissions (MultiplePermissionsListener listener ,
116223 Collection <String > permissions ) {
117224 checkInstanceNotNull ();
118225 instance .checkPermissions (listener , permissions , ThreadFactory .makeMainThread ());
@@ -122,8 +229,10 @@ public static void checkPermissions(MultiplePermissionsListener listener,
122229 * Checks is there is any permission request still ongoing.
123230 * If so, state of permissions must not be checked until it is resolved
124231 * or it will cause an exception.
232+ *
233+ * @deprecated
125234 */
126- public static boolean isRequestOngoing () {
235+ @ Deprecated public static boolean isRequestOngoing () {
127236 checkInstanceNotNull ();
128237 return instance .isRequestOngoing ();
129238 }
@@ -132,8 +241,11 @@ public static boolean isRequestOngoing() {
132241 * Requests pending permissions if there were permissions lost. This method can be used to
133242 * recover the Dexter state during a configuration change, for example when the device is
134243 * rotated.
244+ *
245+ * @deprecated
135246 */
136- public static void continuePendingRequestsIfPossible (MultiplePermissionsListener listener ) {
247+ @ Deprecated public static void continuePendingRequestsIfPossible (
248+ MultiplePermissionsListener listener ) {
137249 checkInstanceNotNull ();
138250 instance .continuePendingRequestsIfPossible (listener , ThreadFactory .makeMainThread ());
139251 }
@@ -142,13 +254,15 @@ public static void continuePendingRequestsIfPossible(MultiplePermissionsListener
142254 * Requests pending permission if there was a permissions lost. This method can be used to
143255 * recover the Dexter state during a configuration change, for example when the device is
144256 * rotated.
257+ *
258+ * @deprecated
145259 */
146- public static void continuePendingRequestIfPossible (PermissionListener listener ) {
260+ @ Deprecated public static void continuePendingRequestIfPossible (PermissionListener listener ) {
147261 checkInstanceNotNull ();
148262 instance .continuePendingRequestIfPossible (listener , ThreadFactory .makeMainThread ());
149263 }
150264
151- private static void checkInstanceNotNull () {
265+ @ Deprecated private static void checkInstanceNotNull () {
152266 if (instance == null ) {
153267 throw new NullPointerException ("context == null \n Must call \" initialize\" on Dexter" );
154268 }
0 commit comments