Skip to content

Commit 182aa9e

Browse files
author
Rafael Dominiquini
committed
Refactor
1 parent 742adc6 commit 182aa9e

File tree

2 files changed

+39
-18
lines changed

2 files changed

+39
-18
lines changed

dexter/src/main/java/com/karumi/dexter/Dexter.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@
1616

1717
package com.karumi.dexter;
1818

19-
import android.app.Activity;
20-
import android.content.Context;
2119
import com.karumi.dexter.listener.EmptyPermissionRequestErrorListener;
2220
import com.karumi.dexter.listener.PermissionRequestErrorListener;
2321
import com.karumi.dexter.listener.multi.EmptyMultiplePermissionsListener;
2422
import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
2523
import com.karumi.dexter.listener.single.PermissionListener;
24+
25+
import android.app.Activity;
26+
import android.content.Context;
27+
2628
import java.util.ArrayList;
2729
import java.util.Arrays;
2830
import java.util.Collection;
@@ -145,9 +147,20 @@ private Thread getThread() {
145147
AndroidPermissionService androidPermissionService = new AndroidPermissionService();
146148
IntentProvider intentProvider = new IntentProvider();
147149
instance = new DexterInstance(activity, androidPermissionService, intentProvider);
150+
} else {
151+
instance.updateContext(activity);
148152
}
149153
}
150154

155+
/**
156+
* Clear instance of the library.
157+
*
158+
* @deprecated Use the non static constructor: new Dexter(Activity activity)
159+
*/
160+
@Deprecated public static void clearInstance() {
161+
instance = null;
162+
}
163+
151164
/**
152165
* Checks the permission and notifies the listener of its state.
153166
* It is important to note that permissions still have to be declared in the manifest.

dexter/src/main/java/com/karumi/dexter/DexterInstance.java

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,19 @@
1616

1717
package com.karumi.dexter;
1818

19-
import android.app.Activity;
20-
import android.content.Context;
21-
import android.content.Intent;
22-
import android.content.pm.PackageManager;
2319
import com.karumi.dexter.listener.DexterError;
2420
import com.karumi.dexter.listener.PermissionDeniedResponse;
2521
import com.karumi.dexter.listener.PermissionGrantedResponse;
2622
import com.karumi.dexter.listener.PermissionRequest;
2723
import com.karumi.dexter.listener.multi.EmptyMultiplePermissionsListener;
2824
import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
2925
import com.karumi.dexter.listener.single.PermissionListener;
30-
import java.lang.ref.WeakReference;
26+
27+
import android.app.Activity;
28+
import android.content.Context;
29+
import android.content.Intent;
30+
import android.content.pm.PackageManager;
31+
3132
import java.util.Collection;
3233
import java.util.Collections;
3334
import java.util.LinkedList;
@@ -44,7 +45,8 @@ final class DexterInstance {
4445
private static final MultiplePermissionsListener EMPTY_LISTENER =
4546
new EmptyMultiplePermissionsListener();
4647

47-
private final WeakReference<Context> context;
48+
private Context context;
49+
4850
private final AndroidPermissionService androidPermissionService;
4951
private final IntentProvider intentProvider;
5052
private final Collection<String> pendingPermissions;
@@ -59,7 +61,8 @@ final class DexterInstance {
5961

6062
DexterInstance(Context context, AndroidPermissionService androidPermissionService,
6163
IntentProvider intentProvider) {
62-
this.context = new WeakReference<>(context);
64+
this.context = context;
65+
6366
this.androidPermissionService = androidPermissionService;
6467
this.intentProvider = intentProvider;
6568
this.pendingPermissions = new TreeSet<>();
@@ -188,6 +191,10 @@ void requestPermissionsToSystem(Collection<String> permissions) {
188191
isShowingNativeDialog.set(true);
189192
}
190193

194+
void updateContext(Context context) {
195+
this.context = context;
196+
}
197+
191198
private PermissionStates getPermissionStates(Collection<String> pendingPermissions) {
192199
PermissionStates permissionStates = new PermissionStates();
193200

@@ -208,12 +215,13 @@ private PermissionStates getPermissionStates(Collection<String> pendingPermissio
208215
}
209216

210217
private void startTransparentActivityIfNeeded() {
211-
if (context.get() == null) {
212-
return;
218+
if (context != null) {
219+
Intent intent = intentProvider.get(context, DexterActivity.class);
220+
if (!(context instanceof Activity)) {
221+
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
222+
}
223+
context.startActivity(intent);
213224
}
214-
215-
Intent intent = intentProvider.get(context.get(), DexterActivity.class);
216-
context.get().startActivity(intent);
217225
}
218226

219227
private void handleDeniedPermissions(Collection<String> permissions) {
@@ -301,15 +309,15 @@ private void checkMultiplePermissions(final MultiplePermissionsListener listener
301309
checkNoDexterRequestOngoing();
302310
checkRequestSomePermission(permissions);
303311

304-
if (context.get() == null) {
312+
if (context == null) {
305313
return;
306314
}
307315

308316
pendingPermissions.clear();
309317
pendingPermissions.addAll(permissions);
310318
multiplePermissionsReport.clear();
311319
this.listener = new MultiplePermissionListenerThreadDecorator(listener, thread);
312-
if (isEveryPermissionGranted(permissions, context.get()) && isContextInstanceOfActivity()) {
320+
if (isEveryPermissionGranted(permissions, context) && isContextInstanceOfActivity()) {
313321
thread.execute(new Runnable() {
314322
@Override public void run() {
315323
MultiplePermissionsReport report = new MultiplePermissionsReport();
@@ -331,7 +339,7 @@ private void checkMultiplePermissions(final MultiplePermissionsListener listener
331339
* at some point if the context instance is an instance of {@link android.app.Activity}.
332340
*/
333341
private boolean isContextInstanceOfActivity() {
334-
return context.get() != null && context.get() instanceof Activity;
342+
return context != null && context instanceof Activity;
335343
}
336344

337345
private boolean isEveryPermissionGranted(Collection<String> permissions, Context context) {
@@ -343,7 +351,7 @@ private boolean isEveryPermissionGranted(Collection<String> permissions, Context
343351
}
344352
return true;
345353
}
346-
354+
347355
private final class PermissionStates {
348356
private final Collection<String> deniedPermissions = new LinkedList<>();
349357
private final Collection<String> grantedPermissions = new LinkedList<>();

0 commit comments

Comments
 (0)