Skip to content
This repository was archived by the owner on Oct 3, 2024. It is now read-only.

Commit 623baa9

Browse files
authored
Prevent rationale dialog from showing twice (#195)
1 parent 2189d2f commit 623baa9

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ ext {
2929

3030
mavenGroup = 'pub.devrel'
3131
mavenArtifactId = 'easypermissions'
32-
mavenVersion = '1.1.1'
32+
mavenVersion = '1.1.2-SNAPSHOT'
3333

3434
bintrayOrg = 'easygoogle'
3535

easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseFrameworkPermissionsHelper.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import android.app.FragmentManager;
44
import android.support.annotation.NonNull;
55
import android.support.annotation.StyleRes;
6+
import android.app.Fragment;
7+
import android.util.Log;
68

79
import pub.devrel.easypermissions.RationaleDialogFragment;
810

@@ -11,6 +13,8 @@
1113
*/
1214
public abstract class BaseFrameworkPermissionsHelper<T> extends PermissionHelper<T> {
1315

16+
private static final String TAG = "BFPermissionsHelper";
17+
1418
public BaseFrameworkPermissionsHelper(@NonNull T host) {
1519
super(host);
1620
}
@@ -24,8 +28,17 @@ public void showRequestPermissionRationale(@NonNull String rationale,
2428
@StyleRes int theme,
2529
int requestCode,
2630
@NonNull String... perms) {
31+
FragmentManager fm = getFragmentManager();
32+
33+
// Check if fragment is already showing
34+
Fragment fragment = fm.findFragmentByTag(RationaleDialogFragment.TAG);
35+
if (fragment instanceof RationaleDialogFragment) {
36+
Log.d(TAG, "Found existing fragment, not showing rationale.");
37+
return;
38+
}
39+
2740
RationaleDialogFragment
2841
.newInstance(positiveButton, negativeButton, rationale, theme, requestCode, perms)
29-
.showAllowingStateLoss(getFragmentManager(), RationaleDialogFragment.TAG);
42+
.showAllowingStateLoss(fm, RationaleDialogFragment.TAG);
3043
}
3144
}

easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseSupportPermissionsHelper.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import android.support.annotation.NonNull;
44
import android.support.annotation.StyleRes;
5+
import android.support.v4.app.Fragment;
56
import android.support.v4.app.FragmentManager;
7+
import android.util.Log;
68

79
import pub.devrel.easypermissions.RationaleDialogFragmentCompat;
810

@@ -11,6 +13,8 @@
1113
*/
1214
public abstract class BaseSupportPermissionsHelper<T> extends PermissionHelper<T> {
1315

16+
private static final String TAG = "BSPermissionsHelper";
17+
1418
public BaseSupportPermissionsHelper(@NonNull T host) {
1519
super(host);
1620
}
@@ -24,8 +28,18 @@ public void showRequestPermissionRationale(@NonNull String rationale,
2428
@StyleRes int theme,
2529
int requestCode,
2630
@NonNull String... perms) {
31+
32+
FragmentManager fm = getSupportFragmentManager();
33+
34+
// Check if fragment is already showing
35+
Fragment fragment = fm.findFragmentByTag(RationaleDialogFragmentCompat.TAG);
36+
if (fragment instanceof RationaleDialogFragmentCompat) {
37+
Log.d(TAG, "Found existing fragment, not showing rationale.");
38+
return;
39+
}
40+
2741
RationaleDialogFragmentCompat
2842
.newInstance(rationale, positiveButton, negativeButton, theme, requestCode, perms)
29-
.showAllowingStateLoss(getSupportFragmentManager(), RationaleDialogFragmentCompat.TAG);
43+
.showAllowingStateLoss(fm, RationaleDialogFragmentCompat.TAG);
3044
}
3145
}

easypermissions/src/main/java/pub/devrel/easypermissions/helper/SupportFragmentPermissionHelper.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Context;
44
import android.support.annotation.NonNull;
55
import android.support.v4.app.Fragment;
6+
import android.support.v4.app.FragmentActivity;
67
import android.support.v4.app.FragmentManager;
78

89
/**
@@ -16,7 +17,12 @@ public SupportFragmentPermissionHelper(@NonNull Fragment host) {
1617

1718
@Override
1819
public FragmentManager getSupportFragmentManager() {
19-
return getHost().getChildFragmentManager();
20+
FragmentActivity hostActivity = getHost().getActivity();
21+
if (hostActivity != null) {
22+
return hostActivity.getSupportFragmentManager();
23+
} else {
24+
return getHost().getChildFragmentManager();
25+
}
2026
}
2127

2228
@Override

0 commit comments

Comments
 (0)