summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcnchen <cnchen@google.com>2019-01-29 19:55:35 +0800
committerCn Chen <cnchen@google.com>2019-01-29 12:18:44 +0000
commit17b69519556165d2920e76bd974fffa33079031e (patch)
tree6ad7dd8708899e6c1b6ae79cb4ed693cdd93c393
parentd41e3be4ea5df08459129d02462cb73d1aa8a205 (diff)
downloadsetupcompat-17b69519556165d2920e76bd974fffa33079031e.tar.gz
Check fragment manager state before attach lifecycle fragment and catch IllegalStateException.
Test: atest Bug: b/123329829 Change-Id: I108630c1aaa8f160666596a7c240f56042cfdf12
-rw-r--r--main/java/com/google/android/setupcompat/lifecycle/LifecycleFragment.java31
1 files changed, 20 insertions, 11 deletions
diff --git a/main/java/com/google/android/setupcompat/lifecycle/LifecycleFragment.java b/main/java/com/google/android/setupcompat/lifecycle/LifecycleFragment.java
index f79956d..a617fd7 100644
--- a/main/java/com/google/android/setupcompat/lifecycle/LifecycleFragment.java
+++ b/main/java/com/google/android/setupcompat/lifecycle/LifecycleFragment.java
@@ -58,18 +58,27 @@ public class LifecycleFragment extends Fragment {
if (VERSION.SDK_INT > VERSION_CODES.M) {
FragmentManager fragmentManager = activity.getFragmentManager();
- Fragment fragment = activity.getFragmentManager().findFragmentByTag(FRAGMENT_ID);
- if (fragment == null) {
- LifecycleFragment lifeCycleFragment = new LifecycleFragment();
- fragmentManager.beginTransaction().add(lifeCycleFragment, FRAGMENT_ID).commitNow();
- fragment = lifeCycleFragment;
- } else if (!(fragment instanceof LifecycleFragment)) {
- Log.wtf(
- LOG_TAG,
- activity.getClass().getSimpleName() + " Incorrect instance on lifecycle fragment.");
+ if (fragmentManager != null && !fragmentManager.isDestroyed()) {
+ Fragment fragment = fragmentManager.findFragmentByTag(FRAGMENT_ID);
+ if (fragment == null) {
+ LifecycleFragment lifeCycleFragment = new LifecycleFragment();
+ try {
+ fragmentManager.beginTransaction().add(lifeCycleFragment, FRAGMENT_ID).commitNow();
+ fragment = lifeCycleFragment;
+ } catch (IllegalStateException e) {
+ Log.e(
+ LOG_TAG,
+ "Error occurred when attach to Activity:" + activity.getComponentName(),
+ e);
+ }
+ } else if (!(fragment instanceof LifecycleFragment)) {
+ Log.wtf(
+ LOG_TAG,
+ activity.getClass().getSimpleName() + " Incorrect instance on lifecycle fragment.");
+ return null;
+ }
+ return (LifecycleFragment) fragment;
}
-
- return (LifecycleFragment) fragment;
}
}