1616
1717package 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 ;
2319import com .karumi .dexter .listener .DexterError ;
2420import com .karumi .dexter .listener .PermissionDeniedResponse ;
2521import com .karumi .dexter .listener .PermissionGrantedResponse ;
2622import com .karumi .dexter .listener .PermissionRequest ;
2723import com .karumi .dexter .listener .multi .EmptyMultiplePermissionsListener ;
2824import com .karumi .dexter .listener .multi .MultiplePermissionsListener ;
2925import 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+
3132import java .util .Collection ;
3233import java .util .Collections ;
3334import 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