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

Commit bb59909

Browse files
authored
Fix fragment states (#170)
Change-Id: Iae9ee2791a3d2f408aef699028212c5bada7eb68
1 parent 1b84362 commit bb59909

File tree

4 files changed

+42
-2
lines changed

4 files changed

+42
-2
lines changed

easypermissions/src/main/java/pub/devrel/easypermissions/RationaleDialogFragment.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.app.Dialog;
44
import android.app.DialogFragment;
5+
import android.app.FragmentManager;
56
import android.content.Context;
67
import android.os.Build;
78
import android.os.Bundle;
@@ -19,6 +20,7 @@ public class RationaleDialogFragment extends DialogFragment {
1920
public static final String TAG = "RationaleDialogFragment";
2021

2122
private EasyPermissions.PermissionCallbacks mPermissionCallbacks;
23+
private boolean mStateSaved = false;
2224

2325
public static RationaleDialogFragment newInstance(
2426
@StringRes int positiveButton, @StringRes int negativeButton,
@@ -47,6 +49,31 @@ && getParentFragment() instanceof EasyPermissions.PermissionCallbacks) {
4749
}
4850
}
4951

52+
@Override
53+
public void onSaveInstanceState(Bundle outState) {
54+
mStateSaved = true;
55+
super.onSaveInstanceState(outState);
56+
}
57+
58+
/**
59+
* Version of {@link #show(FragmentManager, String)} that no-ops when an IllegalStateException
60+
* would otherwise occur.
61+
*/
62+
public void showAllowingStateLoss(FragmentManager manager, String tag) {
63+
// API 26 added this convenient method
64+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
65+
if (manager.isStateSaved()) {
66+
return;
67+
}
68+
}
69+
70+
if (mStateSaved) {
71+
return;
72+
}
73+
74+
show(manager, tag);
75+
}
76+
5077
@Override
5178
public void onDetach() {
5279
super.onDetach();

easypermissions/src/main/java/pub/devrel/easypermissions/RationaleDialogFragmentCompat.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import android.support.annotation.NonNull;
77
import android.support.annotation.RestrictTo;
88
import android.support.annotation.StringRes;
9+
import android.support.v4.app.FragmentManager;
910
import android.support.v7.app.AppCompatDialogFragment;
1011

1112
/**
@@ -34,6 +35,18 @@ public static RationaleDialogFragmentCompat newInstance(
3435
return dialogFragment;
3536
}
3637

38+
/**
39+
* Version of {@link #show(FragmentManager, String)} that no-ops when an IllegalStateException
40+
* would otherwise occur.
41+
*/
42+
public void showAllowingStateLoss(FragmentManager manager, String tag) {
43+
if (manager.isStateSaved()) {
44+
return;
45+
}
46+
47+
show(manager, tag);
48+
}
49+
3750
@Override
3851
public void onAttach(Context context) {
3952
super.onAttach(context);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ public void showRequestPermissionRationale(@NonNull String rationale,
2424
@NonNull String... perms) {
2525
RationaleDialogFragment
2626
.newInstance(positiveButton, negativeButton, rationale, requestCode, perms)
27-
.show(getFragmentManager(), RationaleDialogFragment.TAG);
27+
.showAllowingStateLoss(getFragmentManager(), RationaleDialogFragment.TAG);
2828
}
2929
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ public void showRequestPermissionRationale(@NonNull String rationale,
2424
@NonNull String... perms) {
2525
RationaleDialogFragmentCompat
2626
.newInstance(positiveButton, negativeButton, rationale, requestCode, perms)
27-
.show(getSupportFragmentManager(), RationaleDialogFragmentCompat.TAG);
27+
.showAllowingStateLoss(getSupportFragmentManager(), RationaleDialogFragmentCompat.TAG);
2828
}
2929
}

0 commit comments

Comments
 (0)