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 7259c4685..54a23bcde 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 @@ -19,10 +19,7 @@ import android.view.View import android.view.ViewGroup import android.widget.FrameLayout import android.widget.LinearLayout -import com.facebook.flipper.plugins.uidebugger.common.EnumMapping -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.common.* import com.facebook.flipper.plugins.uidebugger.model.Bounds import com.facebook.flipper.plugins.uidebugger.util.ResourcesUtil import java.lang.reflect.Field @@ -108,20 +105,24 @@ object ViewDescriptor : ChainedDescriptor() { } override fun onGetSnapshot(node: View, bitmap: Bitmap?): Bitmap? { + if (node.width <= 0 || node.height <= 0) { + return null + } var workingBitmap = bitmap try { - if (workingBitmap == null) { + val differentSize = + if (bitmap != null) (node.width != bitmap.width || node.height != bitmap.height) + else false + if (workingBitmap == null || differentSize) { val viewWidth: Int = node.width val viewHeight: Int = node.height - workingBitmap = Bitmap.createBitmap(viewWidth, viewHeight, Bitmap.Config.RGB_565) + workingBitmap = BitmapPool.createBitmapWithDefaultConfig(viewWidth, viewHeight) } - workingBitmap?.let { b -> - val canvas = Canvas(b) - node.draw(canvas) - } + val canvas = Canvas(workingBitmap) + node.draw(canvas) } catch (e: OutOfMemoryError) {} return workingBitmap 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 678e12f46..fd7c12827 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 @@ -7,14 +7,13 @@ package com.facebook.flipper.plugins.uidebugger.descriptors +import android.graphics.Bitmap +import android.graphics.Canvas import android.os.Build import android.view.View import android.view.ViewGroup import androidx.core.view.ViewGroupCompat -import com.facebook.flipper.plugins.uidebugger.common.EnumMapping -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.common.* import com.facebook.flipper.plugins.uidebugger.core.FragmentTracker object ViewGroupDescriptor : ChainedDescriptor() { @@ -51,6 +50,30 @@ object ViewGroupDescriptor : ChainedDescriptor() { attributeSections["ViewGroup"] = InspectableObject(viewGroupAttrs) } + override fun onGetSnapshot(node: ViewGroup, bitmap: Bitmap?): Bitmap? { + if (node.width <= 0 || node.height <= 0) { + return null + } + var workingBitmap = bitmap + + try { + val differentSize = + if (bitmap != null) (node.width != bitmap.width || node.height != bitmap.height) + else false + if (workingBitmap == null || differentSize) { + val viewWidth: Int = node.width + val viewHeight: Int = node.height + + workingBitmap = BitmapPool.createBitmapWithDefaultConfig(viewWidth, viewHeight) + } + + val canvas = Canvas(workingBitmap) + node.draw(canvas) + } catch (e: OutOfMemoryError) {} + + return workingBitmap + } + private val LayoutModeMapping: EnumMapping = object : EnumMapping(