Improve getSnapshot
Summary: Addresses a few issues with the existing implementation. Reviewed By: LukeDefeo Differential Revision: D39812624 fbshipit-source-id: 6f955f62bc5a7943558541e4cf7b4ccba4fd9be3
This commit is contained in:
committed by
Facebook GitHub Bot
parent
e7742169f5
commit
08b3489201
@@ -19,10 +19,7 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import com.facebook.flipper.plugins.uidebugger.common.EnumMapping
|
import com.facebook.flipper.plugins.uidebugger.common.*
|
||||||
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
|
import com.facebook.flipper.plugins.uidebugger.model.Bounds
|
||||||
import com.facebook.flipper.plugins.uidebugger.util.ResourcesUtil
|
import com.facebook.flipper.plugins.uidebugger.util.ResourcesUtil
|
||||||
import java.lang.reflect.Field
|
import java.lang.reflect.Field
|
||||||
@@ -108,20 +105,24 @@ object ViewDescriptor : ChainedDescriptor<View>() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onGetSnapshot(node: View, bitmap: Bitmap?): Bitmap? {
|
override fun onGetSnapshot(node: View, bitmap: Bitmap?): Bitmap? {
|
||||||
|
if (node.width <= 0 || node.height <= 0) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
var workingBitmap = bitmap
|
var workingBitmap = bitmap
|
||||||
|
|
||||||
try {
|
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 viewWidth: Int = node.width
|
||||||
val viewHeight: Int = node.height
|
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(workingBitmap)
|
||||||
val canvas = Canvas(b)
|
|
||||||
node.draw(canvas)
|
node.draw(canvas)
|
||||||
}
|
|
||||||
} catch (e: OutOfMemoryError) {}
|
} catch (e: OutOfMemoryError) {}
|
||||||
|
|
||||||
return workingBitmap
|
return workingBitmap
|
||||||
|
|||||||
@@ -7,14 +7,13 @@
|
|||||||
|
|
||||||
package com.facebook.flipper.plugins.uidebugger.descriptors
|
package com.facebook.flipper.plugins.uidebugger.descriptors
|
||||||
|
|
||||||
|
import android.graphics.Bitmap
|
||||||
|
import android.graphics.Canvas
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.view.ViewGroupCompat
|
import androidx.core.view.ViewGroupCompat
|
||||||
import com.facebook.flipper.plugins.uidebugger.common.EnumMapping
|
import com.facebook.flipper.plugins.uidebugger.common.*
|
||||||
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.core.FragmentTracker
|
import com.facebook.flipper.plugins.uidebugger.core.FragmentTracker
|
||||||
|
|
||||||
object ViewGroupDescriptor : ChainedDescriptor<ViewGroup>() {
|
object ViewGroupDescriptor : ChainedDescriptor<ViewGroup>() {
|
||||||
@@ -51,6 +50,30 @@ object ViewGroupDescriptor : ChainedDescriptor<ViewGroup>() {
|
|||||||
attributeSections["ViewGroup"] = InspectableObject(viewGroupAttrs)
|
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<Int> =
|
private val LayoutModeMapping: EnumMapping<Int> =
|
||||||
object :
|
object :
|
||||||
EnumMapping<Int>(
|
EnumMapping<Int>(
|
||||||
|
|||||||
Reference in New Issue
Block a user