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 new file mode 100644 index 000000000..48c40b6dc --- /dev/null +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ColorDrawableDescriptor.kt @@ -0,0 +1,32 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.flipper.plugins.uidebugger.descriptors + +import android.graphics.drawable.ColorDrawable +import android.os.Build +import com.facebook.flipper.plugins.uidebugger.common.Inspectable +import com.facebook.flipper.plugins.uidebugger.common.InspectableObject +import com.facebook.flipper.plugins.uidebugger.common.InspectableValue + +object ColorDrawableDescriptor : ChainedDescriptor() { + + override fun onGetName(node: ColorDrawable): String = node.javaClass.simpleName + + override fun onGetData( + node: ColorDrawable, + attributeSections: MutableMap + ) { + val props = mutableMapOf() + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + props.put("color", InspectableValue.Color(node.color, mutable = true)) + } + + attributeSections["ColorDrawable"] = InspectableObject(props.toMap()) + } +} diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/DescriptorRegister.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/DescriptorRegister.kt index 879a0218b..9055dea4b 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/DescriptorRegister.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/DescriptorRegister.kt @@ -8,6 +8,8 @@ package com.facebook.flipper.plugins.uidebugger.descriptors import android.app.Activity +import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.Drawable import android.view.View import android.view.ViewGroup import android.view.Window @@ -33,6 +35,8 @@ class DescriptorRegister { mapping.register(TextView::class.java, TextViewDescriptor) mapping.register(Button::class.java, ButtonDescriptor) mapping.register(ViewPager::class.java, ViewPagerDescriptor) + mapping.register(Drawable::class.java, DrawableDescriptor) + mapping.register(ColorDrawable::class.java, ColorDrawableDescriptor) mapping.register(android.app.Fragment::class.java, FragmentFrameworkDescriptor) mapping.register(androidx.fragment.app.Fragment::class.java, FragmentSupportDescriptor) diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/DrawableDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/DrawableDescriptor.kt new file mode 100644 index 000000000..616ca6d65 --- /dev/null +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/DrawableDescriptor.kt @@ -0,0 +1,37 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.flipper.plugins.uidebugger.descriptors + +import android.graphics.drawable.Drawable +import android.os.Build +import com.facebook.flipper.plugins.uidebugger.common.Inspectable +import com.facebook.flipper.plugins.uidebugger.common.InspectableObject +import com.facebook.flipper.plugins.uidebugger.common.InspectableValue +import com.facebook.flipper.plugins.uidebugger.model.Bounds + +object DrawableDescriptor : ChainedDescriptor() { + override fun onGetName(node: Drawable): String = node.javaClass.simpleName + + override fun onGetBounds(node: Drawable): Bounds = + Bounds(node.bounds.left, node.bounds.top, node.bounds.width(), node.bounds.height()) + + override fun onGetData( + node: Drawable, + attributeSections: MutableMap + ) { + val props = mutableMapOf() + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + props.put("alpha", InspectableValue.Number(node.getAlpha(), true)) + } + + attributeSections["Drawable"] = InspectableObject(props.toMap()) + } + + override fun onGetTags(node: Drawable): Set = BaseTags.NativeAndroid +} diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/NodeDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/NodeDescriptor.kt index 182094ddc..a74c0c958 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/NodeDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/NodeDescriptor.kt @@ -22,11 +22,14 @@ import com.facebook.flipper.plugins.uidebugger.model.Bounds typealias SectionName = String object BaseTags { + const val Declarative = "Declarative" const val Native = "Native" const val Accessibility = "Accessibility" const val Android = "Android" const val Unknown = "Unknown" + val NativeAndroid = setOf(Android, Native) + val AccessibleNativeAndroid = setOf(Android, Native, Accessibility) } interface NodeDescriptor { 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 54a23bcde..1250f87de 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 @@ -26,15 +26,12 @@ import java.lang.reflect.Field object ViewDescriptor : ChainedDescriptor() { - override fun onGetName(node: View): String { - return node.javaClass.simpleName - } + override fun onGetName(node: View): String = node.javaClass.simpleName - override fun onGetBounds(node: View): Bounds { - return Bounds(node.left, node.top, node.width, node.height) - } + override fun onGetBounds(node: View): Bounds = + Bounds(node.left, node.top, node.width, node.height) - override fun onGetTags(node: View): Set = setOf(BaseTags.Native, BaseTags.Android) + override fun onGetTags(node: View): Set = BaseTags.NativeAndroid override fun onGetData( node: View,