From 6212d0b77dfc8556f35152375421a7d6f9adbf1c Mon Sep 17 00:00:00 2001 From: Sam Stern Date: Thu, 11 Jan 2018 09:56:48 -0800 Subject: [PATCH 1/2] Prevent rationale dialog from showing twice Change-Id: Idf2806ea3dc84fa34a6cbe2eae7b723a4c8b4f72 --- build.gradle | 2 +- .../helper/BaseFrameworkPermissionsHelper.java | 15 ++++++++++++++- .../helper/BaseSupportPermissionsHelper.java | 16 +++++++++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) 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..18b5a16 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 != null && 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..055ef91 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 != null && 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); } } From a74b91824ec0eabd4d22e77a8b8bdd8d81162441 Mon Sep 17 00:00:00 2001 From: Sam Stern Date: Fri, 12 Jan 2018 08:13:38 -0800 Subject: [PATCH 2/2] Address review feedback Change-Id: I02907904fdb9e1b5b2db2684c8c606ad50865089 --- .../helper/BaseFrameworkPermissionsHelper.java | 2 +- .../helper/BaseSupportPermissionsHelper.java | 2 +- .../helper/SupportFragmentPermissionHelper.java | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) 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 18b5a16..243bb74 100644 --- a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseFrameworkPermissionsHelper.java +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseFrameworkPermissionsHelper.java @@ -32,7 +32,7 @@ public void showRequestPermissionRationale(@NonNull String rationale, // Check if fragment is already showing Fragment fragment = fm.findFragmentByTag(RationaleDialogFragment.TAG); - if (fragment != null && fragment instanceof RationaleDialogFragment) { + if (fragment instanceof RationaleDialogFragment) { Log.d(TAG, "Found existing fragment, not showing rationale."); return; } 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 055ef91..5e06d81 100644 --- a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseSupportPermissionsHelper.java +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseSupportPermissionsHelper.java @@ -33,7 +33,7 @@ public void showRequestPermissionRationale(@NonNull String rationale, // Check if fragment is already showing Fragment fragment = fm.findFragmentByTag(RationaleDialogFragmentCompat.TAG); - if (fragment != null && fragment instanceof RationaleDialogFragmentCompat) { + if (fragment instanceof RationaleDialogFragmentCompat) { Log.d(TAG, "Found existing fragment, not showing rationale."); return; } 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