diff --git a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ActivityDescriptor.java b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ActivityDescriptor.java index 925a7a9a5..8a4b1a9dc 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ActivityDescriptor.java +++ b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ActivityDescriptor.java @@ -8,6 +8,7 @@ package com.facebook.flipper.plugins.inspector.descriptors; import android.app.Activity; +import android.util.Log; import android.view.Window; import com.facebook.flipper.core.FlipperDynamic; import com.facebook.flipper.core.FlipperObject; @@ -25,6 +26,8 @@ import javax.annotation.Nullable; public class ActivityDescriptor extends NodeDescriptor { + private static final String TAG = "ActivityDescriptor"; + @Override public void init(Activity node) {} @@ -112,9 +115,14 @@ public class ActivityDescriptor extends NodeDescriptor { } FragmentManagerAccessor fragmentManagerAccessor = compat.forFragmentManager(); - List addedFragments = fragmentManagerAccessor.getAddedFragments(fragmentManager); + List addedFragments = null; + try { + addedFragments = fragmentManagerAccessor.getAddedFragments(fragmentManager); + } catch (Exception e) { + Log.e(TAG, "Failed to obtain list of fragments.", e); + } if (addedFragments == null) { - return Collections.EMPTY_LIST; + return Collections.emptyList(); } final List dialogFragments = new ArrayList<>(); diff --git a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/stethocopies/FragmentCompat.java b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/stethocopies/FragmentCompat.java index 61f26f405..d6e15b494 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/stethocopies/FragmentCompat.java +++ b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/stethocopies/FragmentCompat.java @@ -9,7 +9,9 @@ package com.facebook.flipper.plugins.inspector.descriptors.utils.stethocopies; import android.app.Activity; import android.os.Build; +import androidx.fragment.app.FragmentManager; import java.lang.reflect.Field; +import java.util.Collections; import java.util.List; import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; @@ -37,7 +39,7 @@ public abstract class FragmentCompat< static { sHasSupportFragment = - ReflectionUtil.tryGetClassForName("android.support.v4.app.Fragment") != null; + ReflectionUtil.tryGetClassForName("androidx.fragment.app.Fragment") != null; } @Nullable @@ -82,20 +84,22 @@ public abstract class FragmentCompat< @Nullable @Override public List getAddedFragments(FRAGMENT_MANAGER fragmentManager) { - // This field is actually sitting on FragmentManagerImpl, which derives from FragmentManager. - if (mFieldMAdded == null) { - Field fieldMAdded = - ReflectionUtil.tryGetDeclaredField(fragmentManager.getClass(), "mAdded"); + if (fragmentManager instanceof android.app.FragmentManager) { + // This field is actually sitting on FragmentManagerImpl, which derives from + // FragmentManager. + if (mFieldMAdded == null) { + Field fieldMAdded = + ReflectionUtil.tryGetDeclaredField(fragmentManager.getClass(), "mAdded"); - if (fieldMAdded != null) { - fieldMAdded.setAccessible(true); - mFieldMAdded = fieldMAdded; + if (fieldMAdded != null) { + fieldMAdded.setAccessible(true); + mFieldMAdded = fieldMAdded; + } } + } else if (fragmentManager instanceof androidx.fragment.app.FragmentManager) { + return (List) ((FragmentManager) fragmentManager).getFragments(); } - - return (mFieldMAdded != null) - ? (List) ReflectionUtil.getFieldValue(mFieldMAdded, fragmentManager) - : null; + return Collections.emptyList(); } } } diff --git a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/stethocopies/FragmentCompatUtil.java b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/stethocopies/FragmentCompatUtil.java index 7049a5c06..b2fa3eee7 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/stethocopies/FragmentCompatUtil.java +++ b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/stethocopies/FragmentCompatUtil.java @@ -8,11 +8,15 @@ package com.facebook.flipper.plugins.inspector.descriptors.utils.stethocopies; import android.app.Activity; +import android.util.Log; import android.view.View; +import java.util.Collections; import java.util.List; import javax.annotation.Nullable; public final class FragmentCompatUtil { + private static final String TAG = "FragmentCompatUtil"; + private FragmentCompatUtil() {} public static boolean isDialogFragment(Object fragment) { @@ -79,7 +83,13 @@ public final class FragmentCompatUtil { @Nullable private static Object findFragmentForViewInFragmentManager( FragmentCompat compat, Object fragmentManager, View view) { - List fragments = compat.forFragmentManager().getAddedFragments(fragmentManager); + List fragments; + try { + fragments = compat.forFragmentManager().getAddedFragments(fragmentManager); + } catch (Exception e) { + fragments = Collections.emptyList(); + Log.e(TAG, "Failed to obtain list of fragments.", e); + } if (fragments != null) { for (int i = 0, N = fragments.size(); i < N; ++i) {