diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ColorDrawableDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ColorDrawableDescriptor.kt index 78fc0c566..4a3c95b24 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ColorDrawableDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ColorDrawableDescriptor.kt @@ -8,7 +8,6 @@ package com.facebook.flipper.plugins.uidebugger.descriptors import android.graphics.drawable.ColorDrawable -import android.os.Build import com.facebook.flipper.plugins.uidebugger.model.Color import com.facebook.flipper.plugins.uidebugger.model.Inspectable import com.facebook.flipper.plugins.uidebugger.model.InspectableObject @@ -23,9 +22,7 @@ object ColorDrawableDescriptor : ChainedDescriptor() { attributeSections: MutableMap ) { val props = mutableMapOf() - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { - props["color"] = InspectableValue.Color(Color.fromColor(node.color), mutable = true) - } + props["color"] = InspectableValue.Color(Color.fromColor(node.color), mutable = true) attributeSections["ColorDrawable"] = InspectableObject(props.toMap()) } diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ViewDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ViewDescriptor.kt index 0a8567644..035b6281b 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ViewDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ViewDescriptor.kt @@ -108,10 +108,7 @@ object ViewDescriptor : ChainedDescriptor() { fromDrawable(node.foreground)?.let { foreground -> props["foreground"] = foreground } } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { - props["alpha"] = InspectableValue.Number(node.alpha, mutable = true) - } - + props["alpha"] = InspectableValue.Number(node.alpha, mutable = true) props["state"] = InspectableObject( mapOf( diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ViewGroupDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ViewGroupDescriptor.kt index cf70ce776..7eeb9ae47 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ViewGroupDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ViewGroupDescriptor.kt @@ -28,6 +28,7 @@ object ViewGroupDescriptor : ChainedDescriptor() { for (i in 0..count) { val child: View = node.getChildAt(i) val fragment = FragmentTracker.getFragment(child) + if (fragment != null) { children.add(fragment) } else children.add(child) diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ViewPagerDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ViewPagerDescriptor.kt index e89161d26..da548b7c6 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ViewPagerDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ViewPagerDescriptor.kt @@ -8,6 +8,7 @@ package com.facebook.flipper.plugins.uidebugger.descriptors import androidx.viewpager.widget.ViewPager +import com.facebook.flipper.plugins.uidebugger.core.FragmentTracker import com.facebook.flipper.plugins.uidebugger.model.InspectableObject import com.facebook.flipper.plugins.uidebugger.model.InspectableValue @@ -15,7 +16,14 @@ object ViewPagerDescriptor : ChainedDescriptor() { override fun onGetName(node: ViewPager): String = node.javaClass.simpleName - override fun onGetActiveChild(node: ViewPager): Any? = node.getChildAt(node.currentItem) + override fun onGetActiveChild(node: ViewPager): Any? { + val child = node.getChildAt(node.currentItem) + val fragment = FragmentTracker.getFragment(child) + if (fragment != null) { + return fragment + } + return child + } override fun onGetData( node: ViewPager, diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/WindowDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/WindowDescriptor.kt index 42a85ea26..fae88b9fd 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/WindowDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/WindowDescriptor.kt @@ -87,9 +87,11 @@ object WindowDescriptor : ChainedDescriptor() { else -> { if (typedValue.type >= TypedValue.TYPE_FIRST_COLOR_INT && typedValue.type <= TypedValue.TYPE_LAST_COLOR_INT) { - val hexColor = "#" + Integer.toHexString(typedValue.data) - val color = android.graphics.Color.parseColor(hexColor) - props[name] = InspectableValue.Color(Color.fromColor(color)) + try { + val hexColor = "#" + Integer.toHexString(typedValue.data) + val color = android.graphics.Color.parseColor(hexColor) + props[name] = InspectableValue.Color(Color.fromColor(color)) + } catch (e: Exception) {} } else if (typedValue.type >= TypedValue.TYPE_FIRST_INT && typedValue.type <= TypedValue.TYPE_LAST_INT) { props[name] = InspectableValue.Number(typedValue.data) diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/traversal/PartialLayoutTraversal.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/traversal/PartialLayoutTraversal.kt index 480ff996b..6bf42a909 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/traversal/PartialLayoutTraversal.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/traversal/PartialLayoutTraversal.kt @@ -38,6 +38,8 @@ class PartialLayoutTraversal( val stack = mutableListOf() stack.add(root) + val shallow = mutableSetOf() + while (stack.isNotEmpty()) { val node = stack.removeLast() @@ -49,28 +51,40 @@ class PartialLayoutTraversal( } val descriptor = descriptorRegister.descriptorForClassUnsafe(node::class.java).asAny() + + if (shallow.contains(node)) { + visited.add( + Node( + node.nodeId(), + descriptor.getName(node), + emptyMap(), + null, + emptySet(), + emptyList(), + null)) + + shallow.remove(node) + continue + } + val children = descriptor.getChildren(node) + val activeChild = descriptor.getActiveChild(node) + var activeChildId: Id? = null + if (activeChild != null) { + activeChildId = activeChild.nodeId() + } val childrenIds = mutableListOf() children.forEach { child -> - // It might make sense one day to remove id from the descriptor since its always the - // hash code - val childDescriptor = - descriptorRegister.descriptorForClassUnsafe(child::class.java).asAny() childrenIds.add(child.nodeId()) + stack.add(child) // If there is an active child then don't traverse it - if (activeChild == null) { - stack.add(child) + if (activeChild != null && activeChild != child) { + shallow.add(child) } } - var activeChildId: Id? = null - if (activeChild != null) { - stack.add(activeChild) - activeChildId = activeChild.nodeId() - } - val attributes = descriptor.getData(node) val bounds = descriptor.getBounds(node) val tags = descriptor.getTags(node)