From e195c7c3fd2b3446aafdffbb1198047ccf1b7b35 Mon Sep 17 00:00:00 2001 From: Luke De Feo Date: Wed, 7 Dec 2022 04:27:25 -0800 Subject: [PATCH] Dont show non visible fragments Summary: On messenger they use fragments heavily and for navigation. The hide some views via the fragment but we were using that so we saw a lot of overlapping boxes. Ive added a check for if the fragment isVisible as well as exported some more fragment state Reviewed By: lblasa Differential Revision: D41800223 fbshipit-source-id: fde33c7542f5fa98d8b98e0722d4292f2d1b67d0 --- .../descriptors/FragmentSupportDescriptor.kt | 55 ++++++++++++++++--- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/FragmentSupportDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/FragmentSupportDescriptor.kt index a45f9409e..73b50b69a 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/FragmentSupportDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/FragmentSupportDescriptor.kt @@ -22,34 +22,75 @@ class FragmentSupportDescriptor(val register: DescriptorRegister) : private var SectionId = MetadataRegister.register(MetadataRegister.TYPE_ATTRIBUTE, NAMESPACE, NAMESPACE) + private var IsInLayout = + MetadataRegister.register(MetadataRegister.TYPE_ATTRIBUTE, NAMESPACE, "isInLayout") + + private var IsAdded = + MetadataRegister.register(MetadataRegister.TYPE_ATTRIBUTE, NAMESPACE, "isAdded") + private var IsDetatched = + MetadataRegister.register(MetadataRegister.TYPE_ATTRIBUTE, NAMESPACE, "isDetached") + private var IsHidden = + MetadataRegister.register(MetadataRegister.TYPE_ATTRIBUTE, NAMESPACE, "isHidden") + private var IsVisible = + MetadataRegister.register(MetadataRegister.TYPE_ATTRIBUTE, NAMESPACE, "isVisible") + + private var IsResumed = + MetadataRegister.register(MetadataRegister.TYPE_ATTRIBUTE, NAMESPACE, "isResumed") + + private var IsMenuVisible = + MetadataRegister.register(MetadataRegister.TYPE_ATTRIBUTE, NAMESPACE, "isMenuVisible") + + private var Arguements = + MetadataRegister.register(MetadataRegister.TYPE_ATTRIBUTE, NAMESPACE, "arguements") + override fun onGetName(node: androidx.fragment.app.Fragment): String { return node.javaClass.simpleName } override fun onGetBounds(node: Fragment): Bounds = Bounds(0, 0, 0, 0) - override fun onGetChildren(node: androidx.fragment.app.Fragment): List = - node.view?.let { view -> listOf(view) } ?: listOf() + override fun onGetChildren(node: androidx.fragment.app.Fragment): List { + val view = node.view + return if (view != null && node.isVisible) { + listOf(view) + } else { + listOf() + } + } override fun onGetData( node: androidx.fragment.app.Fragment, attributeSections: MutableMap ) { + + val props = mutableMapOf() + + props[IsInLayout] = InspectableValue.Boolean(node.isInLayout) + props[IsAdded] = InspectableValue.Boolean(node.isAdded) + props[IsDetatched] = InspectableValue.Boolean(node.isDetached) + props[IsHidden] = InspectableValue.Boolean(node.isHidden) + props[IsVisible] = InspectableValue.Boolean(node.isVisible) + props[IsResumed] = InspectableValue.Boolean(node.isResumed) + props[IsMenuVisible] = InspectableValue.Boolean(node.isMenuVisible) + + val arguements = mutableMapOf() val args = node.arguments args?.let { bundle -> - val props = mutableMapOf() for (key in bundle.keySet()) { val metadata = MetadataRegister.get(NAMESPACE, key) val identifier = metadata?.id ?: MetadataRegister.register(MetadataRegister.TYPE_ATTRIBUTE, NAMESPACE, key) when (val value = bundle[key]) { - is Number -> props[identifier] = InspectableValue.Number(value) - is Boolean -> props[identifier] = InspectableValue.Boolean(value) - is String -> props[identifier] = InspectableValue.Text(value) + is Number -> arguements[identifier] = InspectableValue.Number(value) + is Boolean -> arguements[identifier] = InspectableValue.Boolean(value) + is String -> arguements[identifier] = InspectableValue.Text(value) } } - attributeSections[SectionId] = InspectableObject(props.toMap()) } + if (arguements.size > 0) { + props[Arguements] = InspectableObject(arguements) + } + attributeSections[SectionId] = InspectableObject(props) } }