diff --git a/build.gradle b/build.gradle index c2ec530..277c185 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ ext { mavenGroup = 'pub.devrel' mavenArtifactId = 'easypermissions' - mavenVersion = '1.1.1' + mavenVersion = '1.1.2-SNAPSHOT' bintrayOrg = 'easygoogle' diff --git a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseFrameworkPermissionsHelper.java b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseFrameworkPermissionsHelper.java index 8e88a73..243bb74 100644 --- a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseFrameworkPermissionsHelper.java +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseFrameworkPermissionsHelper.java @@ -3,6 +3,8 @@ import android.app.FragmentManager; import android.support.annotation.NonNull; import android.support.annotation.StyleRes; +import android.app.Fragment; +import android.util.Log; import pub.devrel.easypermissions.RationaleDialogFragment; @@ -11,6 +13,8 @@ */ public abstract class BaseFrameworkPermissionsHelper extends PermissionHelper { + private static final String TAG = "BFPermissionsHelper"; + public BaseFrameworkPermissionsHelper(@NonNull T host) { super(host); } @@ -24,8 +28,17 @@ public void showRequestPermissionRationale(@NonNull String rationale, @StyleRes int theme, int requestCode, @NonNull String... perms) { + FragmentManager fm = getFragmentManager(); + + // Check if fragment is already showing + Fragment fragment = fm.findFragmentByTag(RationaleDialogFragment.TAG); + if (fragment instanceof RationaleDialogFragment) { + Log.d(TAG, "Found existing fragment, not showing rationale."); + return; + } + RationaleDialogFragment .newInstance(positiveButton, negativeButton, rationale, theme, requestCode, perms) - .showAllowingStateLoss(getFragmentManager(), RationaleDialogFragment.TAG); + .showAllowingStateLoss(fm, RationaleDialogFragment.TAG); } } diff --git a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseSupportPermissionsHelper.java b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseSupportPermissionsHelper.java index 11952e1..5e06d81 100644 --- a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseSupportPermissionsHelper.java +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseSupportPermissionsHelper.java @@ -2,7 +2,9 @@ import android.support.annotation.NonNull; import android.support.annotation.StyleRes; +import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; +import android.util.Log; import pub.devrel.easypermissions.RationaleDialogFragmentCompat; @@ -11,6 +13,8 @@ */ public abstract class BaseSupportPermissionsHelper extends PermissionHelper { + private static final String TAG = "BSPermissionsHelper"; + public BaseSupportPermissionsHelper(@NonNull T host) { super(host); } @@ -24,8 +28,18 @@ public void showRequestPermissionRationale(@NonNull String rationale, @StyleRes int theme, int requestCode, @NonNull String... perms) { + + FragmentManager fm = getSupportFragmentManager(); + + // Check if fragment is already showing + Fragment fragment = fm.findFragmentByTag(RationaleDialogFragmentCompat.TAG); + if (fragment instanceof RationaleDialogFragmentCompat) { + Log.d(TAG, "Found existing fragment, not showing rationale."); + return; + } + RationaleDialogFragmentCompat .newInstance(rationale, positiveButton, negativeButton, theme, requestCode, perms) - .showAllowingStateLoss(getSupportFragmentManager(), RationaleDialogFragmentCompat.TAG); + .showAllowingStateLoss(fm, RationaleDialogFragmentCompat.TAG); } } diff --git a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/SupportFragmentPermissionHelper.java b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/SupportFragmentPermissionHelper.java index 0b7e643..7ba7944 100644 --- a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/SupportFragmentPermissionHelper.java +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/SupportFragmentPermissionHelper.java @@ -3,6 +3,7 @@ import android.content.Context; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; /** @@ -16,7 +17,12 @@ public SupportFragmentPermissionHelper(@NonNull Fragment host) { @Override public FragmentManager getSupportFragmentManager() { - return getHost().getChildFragmentManager(); + FragmentActivity hostActivity = getHost().getActivity(); + if (hostActivity != null) { + return hostActivity.getSupportFragmentManager(); + } else { + return getHost().getChildFragmentManager(); + } } @Override