From cf407ad88bef3bc640489b300f23eaa8ea0b724e Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Fri, 11 Mar 2011 13:17:57 -0800 Subject: [PATCH] Fix issues #4087362 and #4087356 4087362: Provide a safer way to call DialogFragment.dismiss() 4087356: PreferenceActivity.invalidateHeaders() can cause IllegalStateException: Can not perform this action after onSaveInstanceState These are very safe; the first is just a new public API that allows you to use an existing feature in DialogFragment, and the second just uses the version of commit that avoids the failure if happening at a point where the operation would be lost if restored from the last state (which is no big deal for preferences). Change-Id: I53971c9fb1efdcd599694cdcd4585b81afc156b8 --- api/current.xml | 13 ++++++++++++- core/java/android/app/DialogFragment.java | 10 ++++++++++ .../java/android/preference/PreferenceActivity.java | 6 +++--- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/api/current.xml b/api/current.xml index fb4cdde07a8f5..5207534b3dd42 100644 --- a/api/current.xml +++ b/api/current.xml @@ -28643,6 +28643,17 @@ visibility="public" > + + - + diff --git a/core/java/android/app/DialogFragment.java b/core/java/android/app/DialogFragment.java index dee1ef3a0a27b..cce7cd6bd8fec 100644 --- a/core/java/android/app/DialogFragment.java +++ b/core/java/android/app/DialogFragment.java @@ -258,6 +258,16 @@ public class DialogFragment extends Fragment dismissInternal(false); } + /** + * Version of {@link #dismiss()} that uses + * {@link FragmentTransaction#commitAllowingStateLoss() + * FragmentTransaction.commitAllowingStateLoss()}. See linked + * documentation for further details. + */ + public void dismissAllowingStateLoss() { + dismissInternal(true); + } + void dismissInternal(boolean allowStateLoss) { if (mDismissed) { return; diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java index 2b609ea7ed6c5..ad0bc84a40817 100644 --- a/core/java/android/preference/PreferenceActivity.java +++ b/core/java/android/preference/PreferenceActivity.java @@ -1049,7 +1049,7 @@ public abstract class PreferenceActivity extends ListActivity implements FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); transaction.replace(com.android.internal.R.id.prefs, f); - transaction.commit(); + transaction.commitAllowingStateLoss(); } /** @@ -1144,7 +1144,7 @@ public abstract class PreferenceActivity extends ListActivity implements } else { transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); } - transaction.commit(); + transaction.commitAllowingStateLoss(); } /** @@ -1184,7 +1184,7 @@ public abstract class PreferenceActivity extends ListActivity implements } transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); transaction.addToBackStack(BACK_STACK_PREFS); - transaction.commit(); + transaction.commitAllowingStateLoss(); } }